Hola, quiero preguntar qué le pasa a mi solución. Cuando voy a probar la solución, parece que esperaba -1 para igualar 12933. Todas las instrucciones son de Codewors.
La pregunta: algunos números tienen propiedades divertidas. Por ejemplo:
89 --> 8¹ + 9² = 89 * 1
695 --> 6² + 9³ + 5⁴= 1390 = 695 * 2
46288 --> 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51
Dado un entero positivo n escrito como abcd... (a, b, c, d... siendo dígitos) y un entero positivo p
queremos encontrar un entero positivo k, si existe, tal que la suma de las cifras de n elevadas a las sucesivas potencias de p sea igual a k * n. En otras palabras:
¿Existe un número entero k como: (a ^ p + b ^ (p+1) + c ^(p+2) + d ^ (p+3) + ...) = n * k
Si es el caso devolveremos k, si no devolveremos -1.
Nota: n y p siempre se darán como números enteros estrictamente positivos.
digPow(89, 1) should return 1 since 8¹ + 9² = 89 = 89 * 1 digPow(92, 1) should return -1 since there is no k such as 9¹ + 2² equals 92 * k digPow(695, 2) should return 2 since 6² + 9³ + 5⁴= 1390 = 695 * 2 digPow(46288, 3) should return 51 since 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51Mi solución:
function digPow(p, n) { let arrayP = [...String(p)].map((e) => Number(e)); let arrayPLength = arrayP.length; let nums = []; let firstResult = []; for (let i = n; i < 5000; i++) { nums.push(i); } for (let i = n; i < nums.length; i++) { let currentPow = []; let j = i; let k = i + arrayPLength; while (j < k) { currentPow.push(j); j++; if (j == k) break; } let result = 0; for (let h = 0; h < arrayP.length; h++) { result = arrayP[h] ** currentPow[h] + result; } firstResult.push(result); } for (let i = 0; i < firstResult.length; i++) { for (let j = 0; j < 100; j++) { if (firstResult[i] == p * j) return j; } } return -1; }