Der kürzeste Code, der alle Möglichkeiten erfüllt, gewinnt.
In der Mathematik misst die Persistenz einer Zahl , wie oft eine bestimmte Operation auf ihre Ziffern angewendet werden muss, bis eine bestimmte feste Bedingung erreicht ist. Sie können die additive Persistenz einer positiven Ganzzahl bestimmen, indem Sie die Ziffern der Ganzzahl addieren und wiederholen. Sie würden die Ziffern der Summe so lange addieren, bis eine einzelne Ziffer gefunden wird. Die Anzahl der Wiederholungen, die erforderlich waren, um diese einstellige Zahl zu erreichen, ist die additive Persistenz dieser Zahl.
Beispiel mit 84523:
84523
8 + 4 + 5 + 2 + 3 = 22
2 + 2 = 4
It took two repetitions to find the single digit number.
So the additive persistence of 84523 is 2.
Sie erhalten eine Folge positiver Ganzzahlen, deren additive Persistenz Sie berechnen müssen. Jede Zeile enthält eine andere zu verarbeitende Ganzzahl. Die Eingabe kann in beliebigen Standard-E / A-Methoden erfolgen .
Für jede Ganzzahl müssen Sie die Ganzzahl gefolgt von einem einzelnen Leerzeichen und der additiven Persistenz ausgeben. Jede verarbeitete Ganzzahl muss in einer eigenen Zeile stehen.
Testfälle
Input-Output
99999999999 3
10 1
8 0
19999999999999999999999 4
6234 2
74621 2
39 2
2677889 3
0 0
quelle
Antworten:
K - 29 Zeichen
Die Eingabe ist ein Dateiname, der als Argument übergeben wird, 29 Zeichen ohne Dateiname.
quelle
-1+#
=>#1_
Python 84 Zeichen
quelle
06234
.. Ergebnis erfolgreiche Herausforderung :-)Haskell, 100 Zeichen
quelle
read.pure
statt(-48+).fromEnum
, versuchen Sie es online!Python (93 Bytes)
quelle
9
und irren ...and
input()
anstelle vonint(raw_input())
....06234
.Schale ,
1015 Bytes+5 Byte für schreckliche E / A-Anforderungen
Probieren Sie es online!
Erläuterung
Um mehrere Eingaben zu unterstützen, müssen wir verwenden
m(₁r)¶
(wo₁
ist die Funktion, die die interessante Berechnung durchführt):Die Funktion
₁
führt Folgendes aus:quelle
Bash, 105 Zeichen
Eigentlich kaum Golfspielen, aber ich weiß nicht, wie ich es verbessern kann.
quelle
Haskell - 114
quelle
pure
über(:[])
und definieren einen Operator statts
, versuchen Sie es online!Rubin, 85 Zeichen
Ich musste mir die Idee "sum-size * 48" von Alex ausleihen, weil sie einfach zu ordentlich ist, um sie zu verpassen (zumindest in Ruby).
quelle
Golfscript, 40 Zeichen
quelle
J - 45 Zeichen
Liest von stdin
quelle
^:a:
mich selbst zu benutzen , konnte aber keine ordnungsgemäße Dokumentation finden ... irgendwelche Hinweise?a:
durch den^:a:
Trick in der J Reference Card [PDF]^:a:
, den ich kannte: D^:(<'')
(wahrscheinlich für Kaprekar), bis ich sie auf der Karte entdeckte und etwas darüber erfuhra:
.c - 519
(oder 137, wenn Sie mir den Rahmen zuschreiben ...)
Anstatt nur diese eine Operation zu lösen, habe ich beschlossen, ein Framework für die Lösung aller Persistenzprobleme zu erstellen .
Nur die zwei Zeilen, die mit beginnen,
char*b
sind für dieses Problem eindeutig.Der Eingang wird als Zeichenfolge behandelt, dh führende "0" werden nicht vor der Ausgangsstufe entfernt.
Kommentare, Fehlerüberprüfungen und Berichte sowie das Lesen von Dateien (Eingaben müssen von der Standardeingabe stammen) wurden entfernt aus:
Ein bisschen mehr könnte gespart werden, wenn wir bereit wären, Speicher wie ein Sieb zu verlieren. Ebenso durch
#define
Rückkehr und dergleichen, aber an diesem Punkt ist es mir egal, es hässlicher zu machen.quelle
J 74 Zeichen
Bearbeitungen
[:
zu Ats@
0".
um".
die Dinge zu vereinfachenZ.B
quelle
Ich denke, das ist ungefähr das Beste, was ich mir einfallen lassen kann.
Ruby 101 Zeichen
quelle
PARI / GP 101 Zeichen
Leider gibt es keine Eingabefunktion für GP, daher fehlt hier wohl der IO-Teil. :(Behoben: Danke Eelvex! :)quelle
input()
:)Javascript - 95
EDIT: Whoops nicht die Multi-Lines
quelle
J 78
Rekursive Lösung. Liest von stdin. Schreibt auf stdout , also hör auf damit - es sind zusätzliche 18-stellige Zeichen erforderlich.
quelle
Perl - 77 Zeichen
quelle
JavaScript ,
5747 Bytes-10 Bytes dank @ l4m2!
Probieren Sie es online!
quelle
f=(s,c=0)=>s>9?f([...s+""].reduce((x,y)=>x*1+y*1),++c):c
f=(s,c=0)=>s>9?f([...s+""].reduce((x,y)=>x- -y),++c):c
f=(s,c=0)=>s>9?f(eval([...s+""].join`+`)),++c):c
s>9
undeval
waren tolle Ideen. Ich glaube, du hattest ein zusätzliches Paren, was insgesamt 10 Bytes ergibt, die du mir gerettet hast :-)05AB1E , 13 Bytes
Eingabe als Liste von Ganzzahlen.
Probieren Sie es online aus.
Erläuterung:
quelle
MathGolf , 11 Bytes
Probieren Sie es online!
Unglaublich ineffizient, aber das interessiert uns nicht. Grundsätzlich wird die Tatsache zugrunde gelegt, dass die additive Persistenz einer Zahl kleiner oder gleich der Zahl selbst ist.Verwendet die Tatsache, dass die additive Persistenz kleiner oder gleich der Anzahl der Ziffern der Zahl ist. Besteht jetzt mühelos alle Testfälle.
Das Eingabeformat ist zwar für einige Sprachen nicht optimal, es ist jedoch die Standardmethode, um mehrere Testfälle als Eingabe in MathGolf zu verwenden. Jede Zeile der Eingabe wird als eigene Programmausführung verarbeitet, und die Ausgabe wird für jede Ausführung durch eine einzelne neue Zeile getrennt.
Erklärung (mit
n = 6234
)quelle
K (ngn / k) , 16 Bytes
Lösung:
Probieren Sie es online!
Erläuterung:
quelle
Stax ,
811 BytesFühren Sie es aus und debuggen Sie es
+3 Bytes dank @Khuldraeseth (die erste Antwort hatte keine konforme Ausgabe)
quelle
i
anstelle vonu
. Bei Einhaltung der drakonischen E / A-Spezifikationen werden dies 11 Byte .Scala 173:
quelle
Perl 5 , 65 Bytes
Probieren Sie es online!
quelle
Java (OpenJDK 8) , 79 Byte
Probieren Sie es online!
Es besteht wahrscheinlich das Potenzial, weiter Golf zu spielen, aber ich werde das in Zukunft untersuchen, aber im Moment bin ich ziemlich zufrieden mit diesem kleinen Ergebnis.
quelle
Python 3 , 82 Bytes
quelle
Tcl , 95 Bytes
Probieren Sie es online!
quelle
Japt , 28 Bytes
Probieren Sie es online!
quelle
PHP, 72 + 1 Bytes
+1 für
-R
Flagge.Als Rohr mit laufen lassen
-R
.$i
muss initialisiert werden.(Außerdem würde es
0
ohne die Initialisierung nichts statt für einzelne Ziffern ausgeben.)quelle
Bash + Coreutils, 83 Bytes
Probieren Sie es online!
Sollte in einem Skript gespeichert werden, das aufgerufen
a
und im System abgelegt wirdPATH
, da es sich selbst rekursiv aufruft. Nimmt Eingaben von der Kommandozeile wiea 1999
. Rückgabe per Exit-Code.TIO hat einige Einschränkungen, was Sie mit einem Skript machen können. Es gibt also einen Boilerplate-Code, mit dem dies im Header ausgeführt werden kann.
Gibt einen Fehler
stderr
für Eingaben aus, die größer sind als die Bash-Ganzzahlen, die verarbeitet werden können. Da die eigentliche Berechnung jedoch mit Zeichenfolgen erfolgt, wird trotzdem das richtige Ergebnis erzielt.quelle