Multiplikative Persistenz
- Multiplizieren Sie alle Ziffern einer Zahl
- Wiederholen, bis Sie eine einzelne Ziffer übrig haben
Wie von Numberphile erklärt :
- Numberphile "Was ist das Besondere an 277777788888899?"
- Numberphile "Multiplikative Persistenz (zusätzliches Filmmaterial)"
Beispiel
- 277777788888899 → 2x7x7x7x7x7x7x8x8x8x8x8x8x9x9 = 4996238671872
- 4996238671872 → 4x9x9x6x2x3x8x6x7x1x8x7x2 = 438939648
- 438939648 → 4x3x8x9x3x9x6x4x8 = 4478976
- 4478976 → 4x4x7x8x9x7x6 = 338688
- 338688 → 3x3x8x6x8x8 = 27648
- 27648 → 2x7x6x4x8 = 2688
- 2688 → 2x6x8x8 = 768
- 768 → 7 × 6 × 8 = 336
- 336 → 3 × 3 × 6 = 54
- 54 → 5x4 = 20
- 20 → 2x0 = 0
Dies ist übrigens der aktuelle Rekord: die kleinste Zahl mit der größten Anzahl von Schritten.
Golf
Ein Programm, das eine beliebige ganze Zahl als Eingabe annimmt und dann das Ergebnis jedes Schritts ausgibt, beginnend mit der Eingabe selbst, bis wir eine einzelne Ziffer treffen. Für 277777788888899 sollte die Ausgabe sein
277777788888899
4996238671872
438939648
4478976
338688
27648
2688
768
336
54
20
0
(Das Zählen der Anzahl der Schritte bleibt dem Benutzer als Übung überlassen.)
Mehr Beispiele
Von A003001 :
25
10
0
Auch ab A003001:
68889
27648
2688
768
336
54
20
0
Aus dem Numberphile- Video:
327
42
8
Es gab also eine Frage zur additiven Persistenz , aber dies ist die multiplikative Persistenz. Außerdem fragt diese Frage nach der Anzahl der Schritte als Ausgabe, während ich daran interessiert bin, die Zwischenergebnisse zu sehen.
Antworten:
Gelee , 4 Bytes
Probieren Sie es online!
Erläuterung
Als Bonus gibt es hier einen TIO, der die Zahlen mit der größten Anzahl von Schritten für einen bestimmten Ziffernbereich findet. Es lässt sich auch mit TIO gut skalieren.
quelle
TI-BASIC (TI-84),
303231 Byte-1 Byte Danke an @SolomonUcko!
Eingang ist in
Ans
.Die Ausgabe wird als Abfrageanforderung angezeigt. Das Trailing
Ans
wird benötigt, um den letzten Schritt auszudrucken.Ich gebe zu, ich habe selbst nicht an diese Formel gedacht, sondern sie hier gefunden und an die Herausforderung angepasst.
BEARBEITEN : Beim erneuten Lesen der Abfrage wurde mir klar, dass das Programm abgebrochen werden muss, wenn das Produkt eine Ziffer ist. Daher mussten 2 Bytes hinzugefügt werden, um dies zu berücksichtigen.
Beispiel:
Erläuterung:
Visual Model:
Ans
startet als125673
.Dieses Modell deckt nur die Logik zur Multiplikation der Ziffern ab. alles andere ist leichter zu verstehen.
Anmerkungen:
TI-BASIC ist eine Token-Sprache. Die Anzahl der Zeichen entspricht nicht der Anzahl der Bytes.
10^(
ist dieses Ein-Byte-Token .Dieses Programm liefert aufgrund der Einschränkungen der Dezimalgenauigkeit der TI-Rechner nicht die richtige Produktsequenz mit Ganzzahlen, die länger als 14 Stellen sind.
quelle
10^(
außen gehenseq(
und die schließende Klammer weglassen?K (ngn / k) , 9 Bytes
Probieren Sie es online!
{
}\
Wenden Sie die Funktion in geschweiften Klammern an, bis die Sequenz konvergiert$x
Formatieren Sie das Argument als String (Liste der Zeichen).'
bewerten sich gegenseitig (andere Dialekte von k erfordern einen Doppelpunkt.:'
)*/
Zeiten vorbei, dh Produktquelle
dzaima / APL ,
1411 BytesProbieren Sie es online!
quelle
R , 59 Bytes
Probieren Sie es online!
Da
print
invisibly
seine Eingabe zurückgegeben wird, können wirprint(n)
innerhalb derwhile
Schleife einedo-while
Schleife simulieren . Dies wird durch eine meiner inspirierte Tipps für die in R Golf spielen .Die Kopfzeile verhindert, dass große Zahlen in wissenschaftlicher Notation gedruckt werden.
quelle
05AB1E ,
74 BytesProbieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Wolfram-Sprache (Mathematica) , 47 Bytes
Probieren Sie es online!
quelle
Wolfram-Sprache (Mathematica) , 45 Bytes
Probieren Sie es online!
quelle
Echo
.Perl 6 , 23 Bytes
Probieren Sie es online!
quelle
Python 2 ,
4643 Bytes-3 dank xnor (verketteter Vergleich)
Probieren Sie es online!
quelle
>
anstelle von tunand
.PowerShell , 54 Byte
Probieren Sie es online!
Iterative Methode, die zuerst das Eingabeargument schreibt, es dann in eine Zeichenfolge konvertiert und in ein Zeichenarray umleitet. Dieses Array wird durch ein einzelnes Sternchen verbunden und als Befehl mit dem Aufrufausdruck-Alias ausgeführt. Da hiermit die Startnummer bis zur letzten Zahl größer als 0 (20 in dem gegebenen Testszenario) notiert wird, füge ich
$a
dem auszugebenden Ende ein Finale hinzu .quelle
C # (Visual C # Interactive Compiler) ,
797468 ByteIch versuche, mich aufgrund der Länge der Methodendeklaration von der Rekursion in C # fernzuhalten, aber in diesem Fall wird im Vergleich zu einer Schleife gespart.
Probieren Sie es online!
quelle
PHP , 63 Bytes
Iterative Version, Aufruf mit
php -nF
Eingabe vonSTDIN
.Probieren Sie es online!
PHP ,
7271 BytesProbieren Sie es online!
Rekursive Version als Funktion.
Eingabe: 277777788888899
Eingabe: 23
quelle
Python 2 ,
616259 BytesProbieren Sie es online!
-3 Bytes, danke an Jonathan Allan
quelle
int.__mul__
ist drei Bytes kleiner alslambda a,b:a*b
f(reduce(int.__mul__,map(int,`n`)))
zuf(eval('*'.join(`n`)))
, um 13 Byte zu speichern.Perl 5 (
-n
-M5.01
),323025 Bytes25 Bytes
30 Bytes
32 Bytes
quelle
-lpF//
-lpF//
aktualisierenMathGolf ,
910 BytesProbieren Sie es online!
Eingaben, die einstellig sind, werden nun korrekt verarbeitet. Nicht perfekt, aber immerhin stimmt es.
Erläuterung
quelle
Julia 0,7 ,
3633 BytesProbieren Sie es online!
Danke an H.PWiz für -3 Bytes.
quelle
[n;f(prod(digits(n)))]
JavaScript (ES6), 45 Byte
Gibt ein Array von Ganzzahlen zurück.
Probieren Sie es online!
quelle
PowerShell , 51 Byte
Probieren Sie es online!
quelle
APL (NARS), 19 Zeichen, 38 Byte
Prüfung:
quelle
Haskell, 45 Bytes
Probieren Sie es online!
quelle
J , 16 Bytes
Probieren Sie es online!
quelle
Ruby ,
383534 BytesProbieren Sie es online!
1 Byte gespeichert von von G.
quelle
Japt
-R
, 9 BytesSchrecklich ineffizient - versuchen Sie nicht einmal , den ersten Testfall auszuführen!
Versuch es
quelle
Brachylog , 7 Bytes
Probieren Sie es online!
Erläuterung
quelle
JavaScript (Babel Node) , 46 Byte
Probieren Sie es online!
JavaScript (Babel Node) , 44 Byte
Wenn die Eingabe als String übernommen werden kann
Probieren Sie es online!
quelle
Power ,
6459 BytesProbieren Sie es online!
Iterative Methode. Nimmt Eingaben auf und speichert sie in
$a
einerfor
Schleife, bis die Länge$a
zwei oder mehr beträgt (dh, sie ist größer als9
). Innerhalb der Schleife geben wir sie aus$a
und berechnen sie neu, indem wir siet
oCharArra konvertiereny
,join
zusammen mit*
und danniex
(kurz fürInvoke-Expression
und ähnlich wieeval
). Sobald wir die Schleife verlassen haben, müssen wir noch eine einzelne Ziffer drucken, damit wir sie wieder$a
in die Pipeline einfügen können.-5 Bytes dank KGlasier.
quelle
9-lt$a
verwenden$a.length-1
, um 5 Byte zu sparen. Und wenn man nicht die ganze Zeit auf Saiten basiert, kann man einen anständigen Teil abschneiden. Schau dir meinen PowerShell-Versuch an, wenn du willst!Kohle , 13 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Die Eingabe zum ersten Mal drucken.
Wiederholen Sie diesen Vorgang, solange die Länge der Eingabe nicht 1 beträgt.
Ersetzen Sie die Eingabe durch das digitale Produkt, das in Zeichenfolge umgewandelt wurde.
Geben Sie die Eingabe in einer neuen Zeile aus.
quelle
Retina , 24 Bytes
Probieren Sie es online! Erläuterung:
Geben Sie den aktuellen Wert zu Beginn jeder Schleife in einer eigenen Zeile aus, bis er sich nicht mehr ändert, und geben Sie den unveränderten Wert nicht zweimal aus. Werten Sie den aktuellen Wert am Ende jeder Schleife aus.
Fügen Sie
*
nach jeder Ziffer ein hinzu.Verwandeln Sie die Eingabe in einen Ausdruck, der das digitale Produkt ergibt.
Nur zur Veranschaulichung, Retina kann dies in einer Zeile (25 Bytes) tun:
quelle
C (gcc) , 58 Bytes
Probieren Sie es online!
Der iterative Ansatz ist 1 Byte kürzer.
C (GCC) ,
6159 Bytes (rekursiv)Probieren Sie es online!
Die Rekursion scheint sowohl für Druck als auch für Schritt kürzer als die Iteration zu sein ...quelle