101 lines
2.2 KiB
Markdown
101 lines
2.2 KiB
Markdown
|
---
|
||
|
id: 5eaf48389ee512d4d103684b
|
||
|
title: Self Describing Numbers
|
||
|
challengeType: 5
|
||
|
forumTopicId: 385289
|
||
|
dashedName: self-describing-numbers
|
||
|
---
|
||
|
|
||
|
# --description--
|
||
|
|
||
|
There are several so-called "self describing" or ["self-descriptive"](https://en.wikipedia.org/wiki/Self-descriptive_number) integers.
|
||
|
|
||
|
An integer is said to be "self-describing" if it has the property that, when digit positions are labeled 0 to N-1, the digit in each position is equal to the number of times that digit appears in the number.
|
||
|
|
||
|
For example, **2020** is a four-digit self describing number:
|
||
|
|
||
|
<ul>
|
||
|
<li> position 0 has value 2 and there are two 0s in the number; </li>
|
||
|
<li> position 1 has value 0 and there are no 1s in the number; </li>
|
||
|
<li> position 2 has value 2 and there are two 2s; </li>
|
||
|
<li> position 3 has value 0 and there are zero 3s; </li>
|
||
|
</ul>
|
||
|
|
||
|
Self-describing numbers < 100,000,000 are: 1210, 2020, 21200, 3211000, 42101000.
|
||
|
|
||
|
# --instructions--
|
||
|
|
||
|
Write a function that takes a positive integer as a parameter. If it is self-describing return true. Otherwise, return false.
|
||
|
|
||
|
# --hints--
|
||
|
|
||
|
`isSelfDescribing` should be a function.
|
||
|
|
||
|
```js
|
||
|
assert(typeof isSelfDescribing == 'function');
|
||
|
```
|
||
|
|
||
|
`isSelfDescribing()` should return a boolean.
|
||
|
|
||
|
```js
|
||
|
assert(typeof isSelfDescribing(2020) == 'boolean');
|
||
|
```
|
||
|
|
||
|
`isSelfDescribing(2020)` should return `true`.
|
||
|
|
||
|
```js
|
||
|
assert.equal(isSelfDescribing(2020), true);
|
||
|
```
|
||
|
|
||
|
`isSelfDescribing(3021)` should return `false`.
|
||
|
|
||
|
```js
|
||
|
assert.equal(isSelfDescribing(3021), false);
|
||
|
```
|
||
|
|
||
|
`isSelfDescribing(3211000)` should return `true`.
|
||
|
|
||
|
```js
|
||
|
assert.equal(isSelfDescribing(3211000), true);
|
||
|
```
|
||
|
|
||
|
# --seed--
|
||
|
|
||
|
## --seed-contents--
|
||
|
|
||
|
```js
|
||
|
function isSelfDescribing(n) {
|
||
|
|
||
|
}
|
||
|
```
|
||
|
|
||
|
# --solutions--
|
||
|
|
||
|
```js
|
||
|
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;
|
||
|
}
|
||
|
```
|