freeCodeCamp/curriculum/challenges/ukrainian/10-coding-interview-prep/rosetta-code/self-describing-numbers.md

2.9 KiB
Raw Blame History

id title challengeType forumTopicId dashedName
5eaf48389ee512d4d103684b Самоописувальні числа 5 385289 self-describing-numbers

--description--

Існує декілька так званих "самоописів" або "самоописувальних" цілих чисел.

Ціле число називають самоописувальним, якщо воно має такі властивості, коли розряд цифри позначений від 0 до N-1, а цифра в кожній позиції дорівнює тій кількості разів, за яку вона з'являється в числі.

До прикладу, 2020 — це самоописувальне чотиризначне число:

  • розряд 0 має значення 2, і в числі є 2 нулі;
  • розряд 1 має значення 0, але одиниці тут відсутні;
  • розряд 2 має значення 2, а число містить 2 двійки;
  • розряд 3 має значення 0, але трійки в числі також відсутні;

Самоописувальними числами < 100,000,000 є: 1210, 2020, 21200, 3211000, 42101000.

--instructions--

Напишіть функцію, яка враховує додатне ціле число як параметр. Якщо число самоописувальне, поверніть true. В іншому випадку — false.

--hints--

isSelfDescribing повинен бути функцією.

assert(typeof isSelfDescribing == 'function');

isSelfDescribing() має повертати логічне значення.

assert(typeof isSelfDescribing(2020) == 'boolean');

isSelfDescribing(2020) має повертати true.

assert.equal(isSelfDescribing(2020), true);

isSelfDescribing(3021) має повертати false.

assert.equal(isSelfDescribing(3021), false);

isSelfDescribing(3211000) має повертати true.

assert.equal(isSelfDescribing(3211000), true);

--seed--

--seed-contents--

function isSelfDescribing(n) {

}

--solutions--

function isSelfDescribing(n) {
    let digits = String(n).split("");
    digits = digits.map(function(e) {return parseInt(e)});
    let count = digits.map((x) => {return 0})
    digits.forEach((d) =>{
        if (d >= count.length) {
            return false
        }
        count[d] += 1;
    });

     if (digits === count) {
        return true;
    }
    if (digits.length != count.length) {
        return false;
    }

    for (let i=0; i< digits.length; i++){
      if (digits[i] !== count[i]) {
        return false;
      }
    }
    return true;
}