¿Por qué salida diferente?
Traté de resolver este problema y no puedo con javascript solo usando python, ¿qué pasa si '%' es diferente en javascript?
Uso '%' para obtener los últimos 10 dígitos del resultado.
JavaScript:
const puzzle = (N, P) => { var A = 1, B = 1, C = 1, D = 1, X; for (var j = 0; j < P; j++) for (var i = 0; i < N; i++) { X = D + 2 * C + 3 * B + 4 * A; A = B; B = C; C = D; D = X; } return D % 10000000000; }; console.log(puzzle(10, 1)); console.log(puzzle(100, 1)); console.log(puzzle(2022, 100));Pitón:
def puzzle(N, P): A = 1; B = 1; C = 1; D = 1; X = 0; for ea in range(P): for esa in range(N): X = D + 2 * C + 3 * B + 4 * A; A = B; B = C; C = D; D = X; return D % 10000000000; print(puzzle(10, 1)); print(puzzle(100, 1)); print(puzzle(2022, 100));Salida (Python):
> 30520 > 720820623 > 5553751141Simplemente está jugando con números demasiado grandes para el number primitivo.
Afortunadamente, hay una solución.
Para entenderlo correctamente, nada mejor que leer la documentación sobre BigInt .
console.clear(); const puzzle = (N, P) => { var A = BigInt(1), B = BigInt(1), C = BigInt(1), D = BigInt(1), X = BigInt(1); for (var j = 0; j < P; j++) for (var i = 0; i < N; i++) { X = D + BigInt(2) * C + BigInt(3) * B + BigInt(4) * A; A = B; B = C; C = D; D = X; } return Number(D % BigInt(10000000000)); }; console.log(puzzle(10, 1)); console.log(puzzle(100, 1)); console.log(puzzle(2022, 100));