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;
 | |
| }
 | |
| ```
 |