sumDigPow.js
Codewars 알고리즘 풀이
Problem
- The number 89 is the first integer with more than one digit that fulfills the property partially introduced in the title of this kata.
- 숫자 89는 이 kata를 충족시키는 두 자리 이상의 첫 번째 정수이다.
- The next number in having this property is 135.
- 이 속성을 가지는 다음 숫자는 135이다.
For example:
89 = 8^1 + 9^2
135 = 1^1 + 3^2 + 5^3
- We need a function to collect these numbers, that may receive two integers ‘a’, ‘b’ that defines the range ‘[a, b]’ and outputs a list of the sorted numbers in the range that fulfills the property described above.
- 이러한 숫자를 수집하는 함수를 작성한다.
- ’[a, b]’ 범위를 정의하는 두 개의 정수 ‘a’, ‘b’를 사용한다.
Solution 01
function sumDigPow(a, b) {
let result = [];
for (let i = a; i <= b; i++) {
let arr = i.toString().split('');
let sum = 0;
for (let j = 0; j <= arr.length; j++) {
sum += Math.pow(arr[j], j + 1);
if (sum === i) {
result.push(i);
}
}
}
return result;
}
sumDigPow(1, 10); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
sumDigPow(1, 100); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 89]
sumDigPow(10, 100); // [89]
sumDigPow(100, 150); // [89, 135]
Solution 02
function sumDigPow(a, b) {
const eurekas = [1, 2, 3, 4, 5, 6, 7, 8, 9, 89, 135, 175, 518, 598, 1306, 1676, 2427, 2646798];
return eurekas.filter(i => a <= i && i <= b);
}
sumDigPow(1, 10); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
sumDigPow(1, 100); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 89]
sumDigPow(10, 100); // [89]
sumDigPow(100, 150); // [89, 135]
Solution 03
function sumDigPow(a, b) {
let result = [];
for (let i = a; i <= b; i++) {
if (i === i.toString().split('').map((item, index) => {
return Math.pow(+item, index + 1);
}).reduce((a, b) => {
return a + b;
})
) {
result.push(i);
}
}
return result;
}
sumDigPow(1, 10); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
sumDigPow(1, 100); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 89]
sumDigPow(10, 100); // [89]
sumDigPow(100, 150); // [89, 135]