Echa un vistazo a la tabla de multiplicar sietes de 7 × 0 a 7 × 9:
0, 7, 14, 21, 28, 35, 42, 49, 56, 63
Si solo miramos los dígitos en su lugar, obtenemos una permutación de los dígitos del 0 al 9:
0, 7, 4, 1, 8, 5, 2, 9, 6, 3
Considere tomar un número entero decimal positivo N y reemplazar cada dígito D en N con el dígito en el lugar de 7 × D.
Por ejemplo, 15209
se hace 75403
porque 1
se asigna a 7
, 5
mapas para 5
, 2
mapas para 4
, 0
mapas para 0
, y 9
se asigna a 3
.
Ahora repitamos este proceso con este nuevo entero decimal hasta que veamos un ciclo, es decir, hasta que aparezca un entero que ya hemos visto.
Por ejemplo, con 15209
nosotros obtenemos el ciclo
15209 -> 75403 -> 95801 -> 35607 -> 15209 -> repeats...
^
|
cycle restarts here
Como otro ejemplo, 505
tiene el ciclo corto
505 -> 505 -> repeats...
^
|
cycle restarts here
Resulta que para cualquier N estos ciclos siempre contendrán exactamente 1 o 4 enteros distintos. (Dejaré que usted descubra por qué es eso). Lo interesante es que si suma todos los enteros distintos en un ciclo, casi siempre obtiene un entero decimal que solo consiste en 2
'sy 0
' s.
Por ejemplo, 15209 + 75403 + 95801 + 35607 = 222020.
N = 505 es una de las excepciones. El único entero en el ciclo es 505, por lo que la suma total es 505 en sí misma.
Aquí están las sumas de los ciclos para N = 1 a 60:
N sum
1 20
2 20
3 20
4 20
5 5
6 20
7 20
8 20
9 20
10 200
11 220
12 220
13 220
14 220
15 220
16 220
17 220
18 220
19 220
20 200
21 220
22 220
23 220
24 220
25 220
26 220
27 220
28 220
29 220
30 200
31 220
32 220
33 220
34 220
35 220
36 220
37 220
38 220
39 220
40 200
41 220
42 220
43 220
44 220
45 220
46 220
47 220
48 220
49 220
50 50
51 220
52 220
53 220
54 220
55 55
56 220
57 220
58 220
59 220
60 200
Llamaremos a esto la secuencia de la suma del ciclo de los siete.
Desafío
Escriba un programa o función que tome un entero decimal positivo N e imprima o devuelva, en decimal, el término correspondiente de la secuencia de la suma del ciclo de los siete.
Por ejemplo, si la entrada es 95801
, la salida debería ser 222020
. Si la entrada es 505
, la salida debería ser 505
. Si la entrada es 54
, la salida debería ser 220
.
El código más corto en bytes gana.
fuente
Respuestas:
Pyth, 14 bytes
No estoy seguro, por qué todos determinan el resultado al observar patrones en los números. Simplemente haciendo el proceso, calcular todos los números del círculo y resumirlos es más corto. Al menos en Pyth ;-)
Pruébelo en línea: Demostración o conjunto de pruebas
Por cierto, esta es mi 200a respuesta de código de golf. Así que esta publicación me gana la insignia de golf de código dorado.
Explicación:
fuente
.u
Python 2, 69 bytes
La función es simple de describir:
El golf se puede mejorar, principalmente publico para compartir el método. Un lenguaje con expresiones regulares nativas debería permitir una solución corta.
Una declaración alternativa de la función es
fuente
Python 2, 63 bytes
Se espera que el argumento de entrada sea una cadena.
fuente
strip
comportarse de esta manera.CJam, 16 bytes
Usando el mismo algoritmo que todos los demás:
Banco de pruebas. (Genera todos los resultados desde 1 a la entrada).
Explicación
fuente
JavaScript (ES6),
5451 bytesUsando el método de xnor :
Guardado 3 bytes gracias a @charlie !
Explicación
Prueba
Mostrar fragmento de código
Método ingenuo, 102 bytes
Mostrar fragmento de código
fuente
n=>/[^05]/.test(n)?`${n}0`.replace(/./g,d=>+d&&2):n
n=>n-(s=`${n}`.replace(/[^0]/g,5))?s*4:n
s*4
truco es increíble! Creo que debe publicar esto como una respuesta separada porque el método es lo suficientemente diferente y es mucho más corto que el mío. :)Mathematica,
837760 caracteresSin golf
fuente
JavaScript (ES5), 40 bytes
Es una evolución de la solución usuario 81655 , utilizando el enfoque alternativo descrito por xnor .
Explicación
La suma de un dígito distinto de cero en el ciclo 4 siempre es 20, ya que el dígito se desplaza por 1 → 7 → 9 → 3, o 2 → 4 → 8 → 6, o 5 → 5 → 5 → 5. Por lo tanto, reemplazar cada dígito con 5 no cambia la suma.
Esa acción de reemplazo se reutiliza para distinguir el ciclo 4 de 1 ciclo: si el resultado del reemplazo es diferente de la entrada, entonces es un ciclo 4, de lo contrario es un ciclo 1.
NB: La cadena de plantilla
`${n}`
es solo para facilitar la lectura,(n+'')
tiene la misma longitud.fuente
n=>(s=[...`${n}`].map(d=>+d&&5).join``)^n?s*4:n
sed, 26 bytes
/[^05]/{s/[^0]/2/g;s/$/0/}
(Otra versión del enfoque "reemplazar por 2").
Ejemplos
echo '500' | sed '/[^05]/{s/[^0]/2/g;s/$/0/}'
→500
echo '501' | sed '/[^05]/{s/[^0]/2/g;s/$/0/}'
→2020
fuente
Perl 6 ,
68 55 53 3633 bytesDefinitivamente, esta es la forma incorrecta de hacer esto, si el número consiste solo en
5
sys0
, devolverá un objeto Match, de lo contrario, reemplazará todo menos0
con a2
, y agregará0
a al final.(El objeto Match se comportará como un número si lo usa como uno)
Aunque como lo está haciendo mal, es fácil señalar los números raros llamando al
gist
método.uso:
fuente