2.9 KiB
id, title, challengeType, forumTopicId, dashedName
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;
}