Un nombre Kaprekar est un nombre à n chiffres k qui, lorsque les premiers n ou n-1 chiffres de k ^ 2 sont ajoutés au deuxième n les chiffres de N ^ 2, le résultat est N.
Exemples:
9^2 = 81. 8+1 = 9.
45^2 = 2025. 20+25 = 45.
297^2 = 88,209. 88+209 = 297
La séquence de Kaprekar commence à 1.
Écrivez un programme qui calcule et génère les n premiers nombres Kaprekar, avec n compris dans la plage, mais sans s'y limiter, de 1 à 100. Chaque numéro Kaprekar doit être séparé par des espaces et rien d'autre.
Plus de numéros Kaprekar peuvent être trouvés ici pour comparer votre programme, mais cette ressource NE PEUT PAS être utilisée de quelque manière que ce soit pour aider au calcul - en d'autres termes, pas de codage en dur, de lecture à partir de cette source, ou de l'utiliser dans tout autre exploitant façon - tous les numéros doivent être générés par votre programme.
Le code le plus court gagne.
n
charge au moins 100.Réponses:
Perl - 63 octets
Compter le shebang comme un octet. L'entrée provient de
stdin
.Cela a un temps d'exécution acceptable pour n ≤ 50 , après quoi il devient un peu lent.
Exemple d'utilisation:
la source
C,
109106n
jusqu'à 17, il serait correct d'enlever lelong long
,1
sont idiots ...la source
(i-i*i/x-i*i%x)||printf(...)
.x
eti
à la portée globale au lieu de dans lafor
boucle pour enregistrer quelques caractères.Mathematica
144154Tester
la source
Javascript 96
Production :
la source
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
python - 98
J'ai utilisé de jolies tranches de python pour raser quelques caractères.
la source
C # - 255 caractères.
x est le nombre de numéros Kaprekar que vous souhaitez que le code trouve. Cela a été testé dans la plage de 1 à 100, mais devrait prendre en charge beaucoup plus que cela. 100 numéros ont mis deux heures et quart pour revenir, bien que les 50 premiers aient seulement pris environ 1 seconde - les choses ont ralenti progressivement par la suite.
Production:
Disposé ce code est le suivant;
J'aimerais savoir si cela peut être encore raccourci.
la source
C,
907675 octetsla source
Python 2.7, 144 (y compris les nouvelles lignes)
Sortie pour c = 10:
Sortie pour u = 20:
la source
R, 99 caractères
Étant donné
i
que la moitié du nombre de chiffres estk^2
arrondie, l'évaluation de si k est un nombre de Kaprekar est effectuée ici en ajoutant le quotient et le reste de la division entière dek^2
par10^i
(le quotient étant la moitié gauche des chiffres arrondis vers le bas et le reste la moitié droite arrondie).la source
bash + sed, 75 caractères
Bash fait de l'arithmétique entière uniquement et représente les nombres sous forme de chaînes décimales; ces attributs sont utiles pour jouer à ce défi. Les variables non déclarées / non attribuées sont également supposées avoir une valeur de 0 lors de l'exécution de l'arithmétique.
Ça m'a énervé de mettre ça
10#
dedans, mais quelque chose comme ça est nécessaire si la deuxième moitié de la scission commence par un0
. Lorsque vous faites de l'arithmétique, bash traite ces nombres comme octaux, sauf si la base est explicitement indiquée.la source
Python 3.3 - 117 caractères
Chaque niveau d'indentation, et chaque nouvelle ligne sauf le dernier, comptent tous pour 1 caractère. Je pense que c'est juste pour le code Python. Le script attend de l'utilisateur qu'il saisisse le nombre de nombres Kaprekar à calculer.
la source
J - 64
Un peu moche, mais quand même. Il vérifie tous les nombres jusqu'à un million puis en prend
n
, il ne fonctionne donc que pour n <= 50.n
est où mettre l'entréela source