Kusnezows Sequenz
(I made the name up, don't bother with Wikipedia or Google)
Gegeben eine beliebige Zahl n > 0
, lassen Sie r
die Rückseite der Zahl darstellen n
. Iterieren Sie, bis das Endergebnis Null ist, und geben Sie das Ergebnis jeder Iteration mithilfe einer Rekursion oder einer Methode Ihrer Wahl in die Funktion zurück, indem Sie die folgende Operation ausführen:
- Wenn
r > n
für diese Iteration das Ergebnis istr % n
. - Wenn
n > r
für diese Iteration das Ergebnis istn % r
. - Wenn
n % r = 0
oderr % n = 0
, brechen Sie die Iteration ab.
Nehmen Sie das Zwischenergebnis jeder Ausführung und speichern Sie sie in einem Array für die endgültige Antwort. Die anfängliche Nummer n
ist weder Teil der Sequenz noch 0
; Die Beispiele sollten alles ein wenig offensichtlicher machen.
Gehen wir ein Beispiel durch, wo n=32452345
.
54325423 % 32452345 = 21873078 # r > n, uses r % n
87037812 % 21873078 = 21418578 # r > n, uses r % n
87581412 % 21418578 = 1907100 # r > n, uses r % n
1907100 % 17091 = 9999 # n > r, uses n % r
9999 % 9999 = 0 # r % n = n % r = 0, terminated
Result: [21873078, 21418578, 1907100, 9999]
Ein weiteres Beispiel n=12345678
:
87654321 % 12345678 = 1234575 # r > n, uses r % n
5754321 % 1234575 = 816021 # r > n, uses r % n
816021 % 120618 = 92313 # n > r, uses n % r
92313 % 31329 = 29655 # n > r, uses n % r
55692 % 29655 = 26037 # r > n, uses r % n
73062 % 26037 = 20988 # r > n, uses r % n
88902 % 20988 = 4950 # r > n, uses r % n
4950 % 594 = 198 # n > r, uses n % r
891 % 198 = 99 # r > n, uses r % n
99 % 99 = 0 # r % n = n % r = 0, terminated
Result: [1234575, 816021, 92313, 29655, 26037, 20988, 4950, 198, 99]
Ein letztes Beispiel n=11000
:
11000 % 11 = 0 # n % r = 0, terminated
Result: []
Dies ist Code-Golf mit der niedrigsten Anzahl an Bytes.
Antworten:
05AB1E , 11 Bytes
Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
PowerShell v2 +, 89 Byte
Iterative Lösung. Langwierig, da es keine einfache Möglichkeit gibt, ein Array umzukehren. Wir fassen es zusammen und indizieren es rückwärts, um es zu speichern
$r
. Dann ein Pseudoternär, um das entsprechende Modulo herauszuziehen und$n
für die nächste Runde neu zu speichern . Wenn das Ergebnis jedoch Null ist, bedeutet dies, dass der!($n...)
Wille ist$true
, also wirexit
statt$n
. Die ZahlenWrite-Output
verbleiben in der Pipeline und werden (implizit) als Array zurückgegeben. Ohne die Kapselung einer Pipeline oder das Speichern der Ergebnisse in einer Variablen wird jedoch standardmäßig eine neue Zeile dazwischen eingefügt.Probieren Sie es online! (Ja, todernst.)
PowerShell ist jetzt auf TIO! Du musst es geben ein oder zwei Sekunden, da Powershell ein Tier Startup ist, aber jetzt Sie, ja Sie können Powershell - Code direkt in Ihrem Browser überprüfen!
quelle
Perl,
4338 + 1 = 39 BytesLaufen Sie mit der
-n
FlaggeProbieren Sie es online! Enthält die beiden nicht leeren Beispiele.
Erklärungstabelle
-n
: Wickelt das gesamte Programm einwhile(<>){ ... ;}
. Dadurch wird der obige Code in die folgende Zeile:while(<>){say while$_=($;=reverse)>$_?$;%$_:$_%$;}
. Beachten Sie, dass am Ende ein Semikolon hinzugefügt wurde$
, sodass es jetzt zu einer Instanz der Variablen wird$;
. Liest im Zustand einerwhile
Schleife<>
automatisch eine Eingabezeile und speichert sie in der$_
Variablen. Schauen wir uns nun an, was der Interpreter in der äußerenwhile
Schleife liest :Originalcode, für die Nachwelt gespeichert: 43 + 1 = 44 Bytes
quelle
$%>$_?$%%$_:$_%$%
Haben Sie die$%
Variable absichtlich nur für diese Zeile ausgewählt?Pyth,
1312 BytesVielen Dank an @TheBikingViking.
Probieren Sie es online aus: Demonstration
Mein alter Code:
Probieren Sie es online aus: Demonstration
Erläuterung:
quelle
t.u|%F_S,s_<backtick>
. TestJelly ,
15 1413 BytesTryItOnline
Wie?
quelle
Jelly ,
13-12BytesDies ist eine monadische Verknüpfung / Funktion, die auf STDOUT gedruckt wird.
Probieren Sie es online!
Wie es funktioniert
quelle
Python 2,
9287817361 BytesRekursive Lösung:
Probieren Sie es online aus
Iterative Lösung: (auch 61 Bytes )
Probieren Sie es online aus
quelle
while n:
. Ansonsten können Sie es mit 61 Bytes tun .MATL , 16 Bytes
Probieren Sie es online!
Erläuterung
quelle
PHP, 78 Bytes
quelle
Batch, 140 Bytes
Übernimmt die Eingabe für STDIN und gibt die Sequenz in separaten Zeilen aus. Batch hat bedingte Anweisungen (die etwas weitschweifig sind) , jedoch keine bedingte Ausdrücke so ist es einfacher (trotz der zitieren
%
s) zu berechnenr%n%r
(die gleich ist ,r%n
wennn<r
oder Null , wennn>r
) undn%r%n
(was gleich ,n%r
obn>r
oder Null , wennn<r
) und Add Sie zusammen.quelle
Mathematica, 68 Bytes
Vielen Dank an Greg Martin, der vorgeschlagen hat, dass ich
FixedPointList
eher verwende alsNestWhileList
:Das kürzeste, mit dem ich meine ursprüngliche Lösung erhalten konnte,
FixedPointList
war 73 Byte:quelle
11000
). Sie können dies umgehen, indem Sie zu der in Ihrem letzten Absatz beschriebenen Technik wechseln. Aber ich verstehe nicht, wie ich es loswerden sollRest
oderMost
auf diese Weise. Auf der anderen Seite sindFixedPointList[ Mod[(r = IntegerReverse@#)~Max~#, r~Min~#] &, #][[2 ;; -4]] &
es nur 68 Bytes, sobald die Leerzeichen entfernt sind (wirft ein paar Fehler, nbd).{a,b,c,d}[[2;;-4]]
eher einen Fehler als eine leere Liste ergeben würden (ich habe wahrscheinlich eher ein Komma als ein Komma verwendet;;
). Etwas gelernt.Sort
:FixedPointList[-Mod@@Sort@-{#,IntegerReverse@#}&,#][[2;;-4]]&
JavaScript,
72-70ByteBearbeitet:
-2 Byte : Der Spread-Operator wartet auf die Verkettung der Zeichenfolgen.
quelle
R
126117 BytesLeider ist das Umkehren einer Zahl (
as.double(paste(rev(el(strsplit(c(x,""),""))),collapse="")))
) ziemlich wortreich. Ruhe ist ziemlich einfach. Verwendet,sort
um indirekt zu überprüfen, welche höher ist.Der Rest ist unkompliziert, läuft weiter bis
x=0
und druckt alle Schritte.quelle
C 87 Bytes
t
ist vorübergehend für die Umkehrung. Die innere Schleife verschiebt sichr
Stelle nach links und fügt die letzte Stelle hinzu,t
bis sie erschöpft ist. Die Ausgabe erfolgt nach der ersten Iteration und nur dann, wenn sie nicht Null ist, um zu verhindern, dass das erste und das letzte Element angezeigt werden.Ungolfed und Nutzung:
quelle
Mathematica, 64 Bytes
Der obige Code stellt eine reine Funktion dar, die eine einzelne Eingabe akzeptiert und die kuznetsovs-Sequenz zurückgibt. Das wirklich Schöne an Mathematica ist, dass man eine Ebene über eine Ebene reiner Funktionen legen kann ... Erlauben Sie mir, den Code zu erklären;)
Jeder Term in der Sequenz selbst wird mit der folgenden Funktion berechnet, die eine Eingabe annimmt und den nächsten Term zurückgibt.
Der Code
IntegerReverse@#
generiert nur r, den umgekehrten Wert. Der Code#2~If[#<=#2,Mod,#0]~#&
ist eine Funktion, die zwei Eingaben übernimmt und entweder die Mod-Operation ausführt oder die Eingaben umkehrt und sich selbst erneut aufruft. Eine andere Art zu schreiben istIf[#<=#2, Mod, #0][#2, #]&
, oder es könnte als reguläre Funktion wie folgt geschrieben werden:k[a_, b_] := If[a <= b, Mod, k][b, a]
quelle
Schläger 180 Bytes
Ungolfed:
Testen:
Ausgang:
quelle