Números confidentes
Deje x
ser un número entero de una base arbitraria, tal que D
es una matriz de sus dígitos. x
es un Número de Confidente si, para todo n
entre 1
y la longitud de D
:
D[n+1] = D[n] + D[n-1] + ... + D[1] + n
Tomemos, por ejemplo, el número 349
en la base 10. Si etiquetamos los índices para este número, tenemos lo siguiente.
Index Digit
----- -----
1 3
2 4
3 9
A partir del primer dígito, tenemos 1 + 3 = 4
, que produce el siguiente dígito. Luego, con el segundo dígito que tenemos 3 + 4 + 2 = 9
, que, nuevamente, produce el siguiente dígito. Por lo tanto, este número es un número de confianza.
Dado un número entero con una base entre 1 y 62, calcule todos los Números de Confianza para esa base y genere una lista de ellos, separados por nuevas líneas. Puede suponer que hay una cantidad finita de números de confianza para una base determinada.
Para dígitos mayores que 9, use los caracteres alfabéticos A-Z
y para dígitos mayores que Z
use los caracteres alfabéticos a-z
. No tendrá que preocuparse por los dígitos más allá z
.
No tienen que salir en ningún orden en particular.
Entrada de muestra:
16
Salida de muestra:
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
12
23
34
45
56
67
78
89
9A
AB
BC
CD
DE
EF
125
237
349
45B
56D
67F
125B
237F
Este es el código de golf, por lo que gana el código más corto. ¡Buena suerte!
(Gracias a Zach por ayudar con el formato y señalar algunos problemas).
CD
no está en la lista? Como todas las otras combinaciones en las que el segundo dígito es uno más que el primer dígito están en la lista, no entiendo por quéCD
no califica.Respuestas:
Pyth, 38 bytes
Pruébelo en línea: demostración
Explicación:
fuente
Python 2, 104 bytes
Esto utiliza la siguiente observación: en un número confidente, el dígito
i
es seguido por2*i+1
, excepto que esi+1
el segundo dígito. Al probar todos los primeros dígitos posibles y agregar más dígitos hasta que sean demasiado grandes, podemos generar todos los números confidentes.Calculamos el carácter que corresponde al número
i
comochr(48+i+(i>9)*7+i/36*6)
, lo que lo cambia al número, letra mayúscula o rango de letra mayúscula para los intervalos0-9, 10-35, 36-61
.Luego, aumentamos
i
víai+=i+1
con dos ajustes. Para hacer esto eni+=1
su lugar después del primer dígito, agregamosi
condicional ques
tenga más de1
caracteres. Además, debemos evitar que se impriman números que comienzan con 0, mientras que al mismo tiempo lo permitimos0
. Para hacer esto, hacemos un truco que hacei=0
que falle la condicióni<n
en el siguiente ciclo al agregarlon
. Esto se hace reemplazando1
conn**0**i
, qué derecho se asocia an**(0**i)
, qué es igual an**(i==0)
on if i==0 else 1
.fuente
Python 3,
201200 bytesExplicación
La idea clave aquí es que, dada una secuencia
x
(como, por ejemplo,[1,2,5]
), puede obtener el siguiente término en la secuencia consum(x)+len(x)
, que da11
en este caso (B
). Verifique si esto es menor quen
, y si es así, agregue la secuencia extendida a la lista de todas esas secuencias (sembradas por todos los dígitos individuales).Así es como mapeo los elementos de secuencia a los personajes. Estos se
''.join
editan juntos y luego se imprimen, separados por nuevas líneas.fuente
print('\n'.join(''.join(map(lambda x:[str(x),chr(x+55),chr(x+61)][(x>9)+(x>35)],x))for x in X))
. Además, actualmente son 201 bytes; no 200.GS2, 44 bytes
Produce los números en un orden diferente, pero la descripción del problema no especifica, ¡así que voy por ello! Aquí está la salida para la entrada de 16.
Aquí están los equivalentes mnemotécnicos para los bytes:
fuente
CJam,
464240 bytesPruébelo en línea en el intérprete de CJam .
Cómo funciona
Al final, quedan 0 conjuntos vacíos en la pila, por lo que el intérprete imprime
0
.fuente
gawk, 111 bytes
Para cada dígito inicial de
1
abase-1
, calcula los siguientes dígitos, y aunque estos son más bajos que la base, todavía tenemos un número confidente. Cálculo del siguiente dígito durante la impresión. Finalmente imprime0
.fuente