Montag Minigolf: Eine Reihe von kurzen Code-Golf- Fragen, die (hoffentlich!) Jeden Montag gestellt werden.
(Tut mir leid, ich bin wieder zu spät. Ich war gestern und heute im Grunde nur von meinem Computer entfernt.)
Wir Programmierer (insbesondere die Code-Golfer) lieben mit Sicherheit beliebige Ganzzahlsequenzen. Wir haben sogar eine ganze Website, die sich diesen Sequenzen widmet und derzeit rund 200.000 Einträge enthält. In dieser Herausforderung werden wir einen weiteren Satz dieser Sequenzen implementieren.
Herausforderung
Ihre Herausforderung besteht darin, ein Programm oder eine Funktion zu schreiben, die eine Ganzzahl N enthält und eine Folge von Ganzzahlen zur Basis 10 ausgibt, wobei jede nächste Ganzzahl folgendermaßen bestimmt wird:
- Beginnen Sie bei 1.
Für jede Ziffer D in der Darstellung zur Basis 10 der vorherigen Ganzzahl:
- Wenn D 0 ist, addieren Sie eins zur aktuellen Ganzzahl.
- Andernfalls wird die aktuelle ganze Zahl von multiplizieren D .
Einzelheiten
- Sie können annehmen, dass 0 < N <2 31 .
- Sie müssen jede Ganzzahl in der Sequenz ausgeben, beginnend mit der eingegebenen Nummer, bis eine Zahl unter 10 erreicht ist.
- Die Ausgabe kann ein Array oder eine durch Leerzeichen, Kommas, Zeilenumbrüche oder eine Kombination davon getrennte Zeichenfolge sein.
- Ein abschließendes Leerzeichen und / oder eine neue Zeile ist zulässig, jedoch kein abschließendes Komma.
- Es sollte niemals führende Nullen geben.
Beispiele
Beispiel 1: 77
Dieses Beispiel ist ziemlich einfach:
77 = 1*7*7 = 49
49 = 1*4*9 = 36
36 = 1*3*6 = 18
18 = 1*1*8 = 8
Somit ist die richtige Ausgabe 77 49 36 18 8
.
Beispiel 2: 90
Hier haben wir:
90 = 1*9+1 = 10
10 = 1*1+1 = 2
So wäre die Ausgabe 90 10 2
.
Beispiel 3: 806
Lesen Sie die Gleichungen von links nach rechts:
806 = 1*8+1*6 = 54 (((1*8)+1)*6)
54 = 1*5*4 = 20
20 = 1*2+1 = 3
Ausgabe sollte sein 806 54 20 3
.
Testfälle
Die erste Zahl in jeder Zeile ist die Eingabe, und die vollständige Zeile ist die erwartete Ausgabe.
77 49 36 18 8
90 10 2
249 72 14 4
806 54 20 3
1337 63 18 8
9999 6561 180 9
10000 5
8675309 45369 3240 25 10 2
9999999 4782969 217728 1568 240 9
1234567890 362881 2304 28 16 6
Als Referenz sind hier die richtigen nächsten ganzen Zahlen von 10 bis 100:
Current | Next
--------+-----
10 | 2
11 | 1
12 | 2
13 | 3
14 | 4
15 | 5
16 | 6
17 | 7
18 | 8
19 | 9
20 | 3
21 | 2
22 | 4
23 | 6
24 | 8
25 | 10
26 | 12
27 | 14
28 | 16
29 | 18
30 | 4
31 | 3
32 | 6
33 | 9
34 | 12
35 | 15
36 | 18
37 | 21
38 | 24
39 | 27
40 | 5
41 | 4
42 | 8
43 | 12
44 | 16
45 | 20
46 | 24
47 | 28
48 | 32
49 | 36
50 | 6
51 | 5
52 | 10
53 | 15
54 | 20
55 | 25
56 | 30
57 | 35
58 | 40
59 | 45
60 | 7
61 | 6
62 | 12
63 | 18
64 | 24
65 | 30
66 | 36
67 | 42
68 | 48
69 | 54
70 | 8
71 | 7
72 | 14
73 | 21
74 | 28
75 | 35
76 | 42
77 | 49
78 | 56
79 | 63
80 | 9
81 | 8
82 | 16
83 | 24
84 | 32
85 | 40
86 | 48
87 | 56
88 | 64
89 | 72
90 | 10
91 | 9
92 | 18
93 | 27
94 | 36
95 | 45
96 | 54
97 | 63
98 | 72
99 | 81
100 | 3
Sie können diese Liste zu 10000 erweitert finden hier .
Wertung
Das ist Code-Golf , also gewinnt der kürzeste gültige Code in Bytes. Tiebreaker geht zu einer Übermittlung über, die als erste ihre letzte Byteanzahl erreicht hat. Der Gewinner wird am kommenden Montag, den 19. Oktober, ermittelt. Viel Glück!
Bearbeiten: Herzlichen Glückwunsch an Ihren Gewinner, @isaacg , der Pyth noch einmal für 14 Bytes verwendet !
|*GHhG
Speichert ein Byte über?H*GHhG
.PowerShell,
9291908887 Bytequelle
(...)
um die automatische Ausgabe zu nutzen ... Ich werde mich in Zukunft daran erinnern müssen.Pip ,
282523 BytesNimmt eine Zahl als Befehlszeilenargument und gibt die Sequenz in aufeinanderfolgenden Zeilen aus.
Erläuterung:
Jetzt bin ich froh, dass ich vor
P
einigen Überarbeitungen von einer Anweisung zu einem Operator gewechselt habe.Pa
ist ein Ausdruck, dera
den Wert auswertet, ihn aber auch ausgibt, sodass ich mit druckena
und gleichzeitig testen kann, ob er weniger als zehn beträgtt>Pa
.quelle
CJam,
26252422 Bytesoder
Probieren Sie es online aus.
Wie es funktioniert
Beide Programme machen im Wesentlichen dasselbe; Der erste Ansatz ist rekursiv, der zweite iterativ. Ich erkläre das erste, was ich für interessanter halte.
quelle
Minkolang 0,7 ,
5246 BytesWoohoo verschachtelte Loops!
Erläuterung
quelle
Mathematica, 66 Bytes
quelle
Python 3, 74,
76BytesEs gab hier bereits eine Python-Antwort mit "Reduzieren", also wollte ich eine ohne diese Antwort machen. Es sollte mit einem int aufgerufen werden.
quelle
Python,
85 bis80 BytesDies druckt nun korrekt die gesamte Liste aus, anstatt nur den ersten Wert.
quelle
g=
.K5 , 24 Bytes
Genau das
\
erledigt der Scan-Operator, wenn er eine Liste von Elementen erstellt, während er zu einem festgelegten Punkt iteriert . Bei jeder Iteration habe ich zuerst die Zahl in eine Zeichenfolge umgewandelt und dann jedes Zeichen (.:'$:
) ausgewertet , wobei die Zahl in ihre Ziffern zerlegt wurde. Dann führe ich eine Reduktion (/
) durch, die mit 1 beginnt und das Lambda verwendet{(x*y;x+1)@~y}
. In diesem Fallx
ist der reduzierende Wert undy
ist jeder aufeinanderfolgende Term der Sequenz.In Aktion:
quelle
Julia,
938988868377 BytesDadurch wird eine rekursive Funktion erstellt
f
, die die Sequenzelemente in separaten Zeilen druckt.Ungolfed:
Probieren Sie es online aus
6 Bytes gespart dank Dennis!
quelle
n>9
dem zweiten Beispiel entsprechen. Auchf(n)=(println(n);if(d=n>9)for i=reverse(digits(n)) i<1?d+=1:d*=i end;f(d)end)
ist ein bisschen kürzer.Ruby
83, 72 BytesOriginal als Funktion deklariert:
Ich habe versucht, zu verwenden,
Enumerator.new
aber es verwendet so viele Bytes :-(Verbessert mit Rekursion:
quelle
C # & LINQ,
165146 Bytesj (für Jarvis) ist die rekursive Funktion. r ist die Liste von int des Ergebnisses.
in LINQPAD getestet:
quelle
int n = 1
könnenint n=1
usw.Haskell, 71 Bytes
Verwendung:
g 8675309
->[8675309,45369,3240,25,10,2]
.quelle
Matlab, 108
quelle
Java 8, 148 Bytes
formatiert
quelle
Gelee , 9 Bytes
Probieren Sie es online!
quelle