Un número de Kaprekar es un número k de n dígitos que, cuando se suman los primeros n o n-1 dígitos de k ^ 2 al segundo n los dígitos de N ^ 2, el resultado es N.
Ejemplos:
9^2 = 81. 8+1 = 9.
45^2 = 2025. 20+25 = 45.
297^2 = 88,209. 88+209 = 297
La secuencia de Kaprekar comienza en 1.
Escriba un programa que calcule y genere los primeros n números de Kaprekar, con n estando en el rango, pero no limitado al rango, de 1 a 100. Cada número de Kaprekar debe estar separado con espacios en blanco y nada más.
Más números Kaprekar se pueden encontrar aquí para comprobar su programa en contra, pero este recurso no pueden ser utilizados en cualquier forma para ayudar con el cálculo - en otras palabras, sin codificar duro, la lectura de esta fuente, o usarlo en cualquier otro explotador manera: todos los números deben ser generados por su programa.
El código más corto gana.
n
hasta un mínimo de 100.Respuestas:
Perl - 63 bytes
Contando el shebang como un byte. La entrada se toma de
stdin
.Esto tiene un tiempo de ejecución aceptable para n ≤ 50 , después de eso se vuelve un poco lento.
Uso de la muestra:
fuente
C,
109106n
hasta 17 estaría bien eliminar ellong long
,1
son tontos ...fuente
(i-i*i/x-i*i%x)||printf(...)
.x
yi
en el ámbito global en lugar de en elfor
bucle para guardar un par de caracteres.Mathematica
144154Prueba
fuente
Javascript 96
Salida:
fuente
for(i=0,n=prompt(s='');n;i++){t=''+i*i;if(t.substr(0,l=t.length/2)==i-t.substr(l))n--,s+=i+' '}s
pitón - 98
Utilicé algunas rebanadas de python para afeitar algunos caracteres.
fuente
C # - 255 caracteres.
x es el número de números de Kaprekar que desea que encuentre el código. Esto se ha probado en el rango de 1 a 100, pero debería admitir mucho más que esto. 100 números tardaron dos horas y cuarto en regresar, aunque los primeros 50 solo tomaron aproximadamente 1 segundo; las cosas se desaceleraron gradualmente después de eso.
Salida:
Presentado este código es el siguiente;
Me encantaría saber si esto se puede acortar aún más.
fuente
C,
907675 bytesfuente
Python 2.7, 144 (incluidas las nuevas líneas)
Salida para c = 10:
Salida para u = 20:
fuente
R, 99 caracteres
Con la
i
mitad del número de dígitos dek^2
redondeado, la evaluación de si k es un número de Kaprekar se realiza aquí sumando el cociente y el resto de la división entera dek^2
by10^i
(el cociente es la mitad izquierda de los dígitos redondeados hacia abajo y el resto la mitad derecha redondeada).fuente
bash + sed, 75 caracteres
Bash hace aritmética de enteros y representa números como cadenas decimales; Estos atributos son útiles para jugar al golf en este desafío. También se supone que las variables no declaradas / no asignadas tienen un valor de 0 al hacer aritmética.
Me molestó ponerlo
10#
allí, pero algo así es necesario si la segunda mitad de la división comienza con un0
. Al hacer aritmética, bash trata tales números como octales, a menos que la base se indique explícitamente.fuente
Python 3.3 - 117 caracteres
Cada nivel de sangría y cada nueva línea, excepto la última, cuentan para 1 personaje. Creo que eso es justo para el código Python. El script espera que el usuario ingrese el número de números de Kaprekar para calcular.
fuente
J - 64
Un poco feo, pero aún así. Comprueba todos los números hasta un millón y luego los toma
n
, por lo que funciona solo para n <= 50.n
es donde poner la entradafuente