Eine Kaprekar-Zahl ist eine n-stellige Zahl k . Wenn die ersten n oder n-1 Stellen von k ^ 2 zu den zweiten n Stellen von N ^ 2 addiert werden , ist das Ergebnis N.
Beispiele:
9^2 = 81. 8+1 = 9.
45^2 = 2025. 20+25 = 45.
297^2 = 88,209. 88+209 = 297
Die Kaprekar-Sequenz beginnt um 1.
Schreiben Sie ein Programm, das die ersten n Kaprekar-Zahlen berechnet und ausgibt , wobei n im Bereich von 1 bis 100 liegt, aber nicht darauf beschränkt ist. Jede Kaprekar-Zahl muss durch Leerzeichen und nichts anderes getrennt werden.
Weitere Kaprekar-Zahlen können hier gefunden werden , um Ihr Programm zu überprüfen. Diese Ressource darf jedoch NICHT zur Unterstützung der Berechnung verwendet werden - mit anderen Worten, keine Hardcodierung, kein Lesen aus dieser Quelle oder Verwendung in einem anderen Exploit Weise - alle Zahlen müssen von Ihrem Programm generiert werden.
Kürzester Code gewinnt.
n
Antworten:
Perl - 63 Bytes
Den Shebang als ein Byte zählen. Die Eingabe wird von übernommen
stdin
.Dies hat eine akzeptable Laufzeit für n ≤ 50 , danach wird es etwas langsam.
Beispielnutzung:
quelle
C
109106n
bis zu 17 wäre es ok das zu entfernenlong long
,1
sind albern ...quelle
(i-i*i/x-i*i%x)||printf(...)
.x
undi
im globalen Bereich statt in derfor
Schleife, um ein paar Zeichen zu speichern.Mathematica
144154Prüfung
quelle
Javascript 96
Ausgabe :
quelle
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
Ich habe ein paar nette Python-Schnitte benutzt, um ein paar Zeichen zu entfernen.
quelle
255 Zeichen.
x ist die Anzahl der Kaprekar-Nummern, die der Code finden soll. Dies wurde im Bereich von 1 bis 100 getestet, sollte aber viel mehr unterstützen. Die Rückkehr von 100 Nummern dauerte zweieinhalb Stunden, während die ersten 50 nur etwa eine Sekunde dauerten - danach verlangsamte sich die Geschwindigkeit allmählich.
Ausgabe:
Der Code sieht wie folgt aus:
Ich würde gerne wissen, ob dies weiter verkürzt werden kann.
quelle
C
907675 Bytesquelle
Python 2.7, 144 (einschließlich Newlines)
Ausgabe für c = 10:
Ausgabe für u = 20:
quelle
R, 99 Zeichen
Bei
i
der halben Anzahl vonk^2
aufgerundeten Stellen erfolgt die Bewertung von k als Kaprekar - Zahl hier durch Addition des Quotienten und des Restes der ganzzahligen Division vonk^2
durch10^i
(wobei der Quotient die linke Hälfte der abgerundeten Stellen und die Zahl ist) Rest die rechte Hälfte aufgerundet).quelle
Bash + Sed, 75 Zeichen
Bash führt nur Ganzzahlarithmetik durch und stellt Zahlen als Dezimalzeichenfolgen dar; Diese Attribute sind hilfreich, um diese Herausforderung zu meistern. Außerdem wird angenommen, dass nicht deklarierte / nicht zugewiesene Variablen beim Rechnen den Wert 0 haben.
Es ärgerte mich, das
10#
da rein zu legen , aber so etwas ist notwendig, wenn die zweite Hälfte des Split mit einem beginnt0
. Wenn Sie rechnen, schlagen Sie behandelt solche Zahlen als oktal, es sei denn, die Basis wird ausdrücklich angegeben.quelle
Python 3.3 - 117 Zeichen
Jede Einrückungsstufe und jede neue Zeile mit Ausnahme der letzten zählt für 1 Zeichen. Ich denke, das ist fair für Python-Code. Das Skript erwartet, dass der Benutzer die Anzahl der zu berechnenden Kaprekar-Zahlen eingibt.
quelle
J - 64
Etwas hässlich, aber trotzdem. Es prüft alle Zahlen bis zu einer Million und nimmt
n
sie dann auf, so dass es nur für n <= 50 funktioniert.n
ist der Ort, an dem die Eingabe erfolgen sollquelle