Aufgabe:
Reduzieren Sie eine Ganzzahl im Dezimalzahlensystem wie folgt auf eine einzelne Dezimalstelle:
- Konvertieren Sie die Zahl in eine Liste mit Dezimalstellen.
- Suchen Sie die größte Ziffer, D
- Entfernen Sie D aus der Liste. Wenn es mehr als ein Vorkommen von D gibt, wählen Sie das erste von links (an der höchstwertigen Position), alle anderen sollten intakt bleiben.
- Wandle die resultierende Liste in eine Dezimalzahl um und multipliziere sie mit D.
- Wenn die Zahl größer als 9 ist (mehr als eine Dezimalstelle hat), wiederholen Sie den gesamten Vorgang und tragen Sie das Ergebnis ein. Stoppen Sie, wenn Sie ein einstelliges Ergebnis erhalten.
- Zeigen Sie das Ergebnis an.
Beispiel:
26364 ->
1. 2 6 3 6 4
2. The largest digit is 6, so D=6
3. There are two occurrences or 6: at positions 1 and 3 (0-based). We remove the left one,
at position 1 and get the list 2 3 6 4
4. we convert the list 2 3 6 4 to 2364 and multiply it by D:
2364 * 6 = 14184
5. 14184 is greater than 9 so we repeat the procedure, feeding 14184 into it.
Wir wiederholen den Vorgang für 14184 und so weiter und gehen die folgenden Zwischenergebnisse durch und erreichen schließlich 8:
11312
3336
1998
1782
1376
952
468
368
288
224
88
64
24
8
Das Ergebnis für 26364 ist also 8.
Eingabe: Eine Ganzzahl / ein String, der eine Ganzzahl darstellt
Ausgabe: Eine einzelne Ziffer, das Ergebnis der Reduzierung, die auf die Zahl angewendet wird.
Testfälle:
9 -> 9
27 -> 4
757 -> 5
1234 -> 8
26364 -> 8
432969 -> 0
1234584 -> 8
91273716 -> 6
Dies ist Codegolf , daher gewinnen die kürzesten Antworten in Bytes in jeder Sprache.
code-golf
arithmetic
integer
Galen Ivanov
quelle
quelle
10 -> 10
?Antworten:
05AB1E , 6 Bytes
Code:
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
Erläuterung
quelle
JavaScript (ES6), 49 Byte
Nimmt die Eingabe als Zeichenfolgendarstellung einer Ganzzahl wie
f("26364")
.Testfälle
Code-Snippet anzeigen
quelle
Jelly , 13 Bytes
Probieren Sie es online!
-1 Dank eines Tricks, den ich in Jonathan Allans Antwort gefunden habe .
Volles Programm.
quelle
Pyth , 16 Bytes
Übernimmt die Eingabe als String. Probieren Sie es hier aus! (Alternative:
.WtH`*s.-ZeSZseS
)Pyth , 18 Bytes
Übernimmt die Eingabe als Ganzzahl. Probieren Sie es hier aus!
Wie es funktioniert
16 Byte
18-byter
Sein so nah an Jelly bei dieser Art von Herausforderung IMO für Pyth sehr gut ist :-)
quelle
Schale ,
141312 BytesDanke Zgarb für das Speichern von 1 Byte.
Probieren Sie es online!
Erläuterung:
quelle
R ,
9995 BytesProbieren Sie es online!
Eine rekursive Funktion. Das Hinzufügen
f(number)
in der Fußzeile kann zum Testen auf andere Werte von verwendet werdennumber
. Einfache Implementierung,d
ist die Liste der Ziffern und10^(n:2-2)%*%d[-M]
berechnet die Zahl, bei der die größte Ziffer entfernt wurde.quelle
Python 2 , 72 Bytes
Probieren Sie es online!
quelle
432969
. "ValueError: ungültiges Literal für int () mit Basis 10: ''"n
dann 0n*(n<=9)
wäre, würde dies immer noch einen falschen Wert ergeben, 0, wodurch die Rekursion fortgesetzt und ein Fehler verursacht wird, wohingegen die Zeichenfolge'0'
ein wahrer Wert ist und daher die Rekursion angehalten wird.Ruby , 59 Bytes
Probieren Sie es online!
Rekursive Lambda-Funktion heißt wie
f[26364]
.quelle
Gelee , 15 Bytes
Probieren Sie es online! oder sehen Sie sich die Testsuite an .
Wie?
quelle
Haskell ,
706766 BytesGespeichert
34 Bytes dank nimi!Probieren Sie es online!
quelle
until
. Probieren Sie es online! ....span=<<(>).maximum...
.C # (.NET Core) , 126 Byte
Probieren Sie es online!
quelle
if(n<10)return n;...return F(...);
mit ternary-if wieint F(int n){var x=(n+"").ToList();var m=x.Max(d=>d);x.RemoveAt(x.IndexOf(m));return n<10?n:F(int.Parse(string.Concat(x))*(m-48));}
using System.Linq;
(18 Bytes) in den bytecount aufnehmen.APL (Dyalog) ,
363533 Bytes-1 aufgrund aktualisierter OP-Spezifikationen. -2 danke an ngn.
Anonyme implizite Präfixfunktion. Übernimmt eine Ganzzahl als Argument.
Probieren Sie es online!
{
…}
Eine Funktion, wo⍵
das Argument ist:⍵>9:
Wenn das Argument größer als 9 ist, gilt Folgendes:⍕⍵
Formatieren (Stringifizieren) Sie das Argument⍎¨
jedes ausführen (auswerten) (dies bringt uns die Ziffern als Zahlen)(
…)
Wenden auf diese die folgende implizite Funktion an⌈/
die größte Ziffer×
mal10⊥
die Base-10-Dekodierung von (sammelt Ziffern)⊂
alle ziffern⌷⍨¨
indiziert von jedem von⍳∘≢
die i ndices der Anzahl der Stellen≠
unterscheidet sich von⊢⍳⌈/
die größte Ziffer der i ndex in der gesamten Liste der Stellen∇
darauf zurückgreifen (dh sich selbst nennen)⋄
sonst⍵
Gibt das Argument unverändert zurückquelle
>10
sein>9
?>9
würde aber ein Byte sparen.Perl 6 ,
4541 BytesProbier es aus
Probier es aus
Erweitert:
quelle
Retina , 67 Bytes
Probieren Sie es online! Link enthält die Testfälle schnell genug, um Dennis 'Server nicht zu überraschen. Erläuterung:
Bei zweistelligen Nummern wird die Nummer mit einem
;
Trennzeichen dupliziert, wobei dem Duplikat eine 1 vorangestellt wird. Bei einstelligen Nummern wird diese1;
Nummer vorangestellt .Sortieren Sie die Ziffern des Duplikats. (Bei einstelligen Zahlen hat dies keine Auswirkung.)
Suchen Sie das erste Vorkommen der größten Ziffer und löschen Sie sie sowie die anderen Ziffern im Duplikat und die zusätzliche 1, die zuvor hinzugefügt wurde. (Bei einstelligen Zahlen schlägt die Übereinstimmung fehl, sodass dies nichts bewirkt.)
Multiplizieren Sie die Zahl mit der Ziffer. Für einstellige Nummern ergibt dies die ursprüngliche Nummer, und die Schleife wird beendet. Andernfalls wird das Programm solange wiederholt, bis eine einzelne Ziffer erreicht ist.
quelle
C # (.NET Core) ,
177164 + 18 Bytes13 Bytes gespart dank @raznagul!
Probieren Sie es online!
quelle
s.Length<2
zun<10
. Sie können auch den ternären Operator entfernen und erstreturn f(y)
am Ende, wie der Fallif
im nächsten Schritt der Rekursion behandelt wird.Java 8,
126104 Bytes-22 Bytes dank @ OlivierGrégoire .
Erläuterung:
Probieren Sie es hier aus.
quelle
n>9
und Bedingungen zurücksetzen stattn<10
).Jq 1,5 , 86 Bytes
Erweitert
Probieren Sie es online!
quelle
Perl 5 , 41 + 1 (
-p
) = 42 BytesProbieren Sie es online!
quelle
9
. :( aber ein wenig gebastelt und es geschafft, 41 Bytes mit einemLua,
137108 BytesVielen Dank an Jonathan S für die 29 Bytes.
Probieren Sie es online!
quelle
D ,
188186185 BytesProbieren Sie es online!
Ich hasse faul Auswertung, so sehr. Irgendwelche Tipps sind willkommen!
quelle
Lua, 154 Bytes
Ich sollte ein paar Möglichkeiten haben, dies herunter zu spielen. Ich experimentiere gerade.
Probieren Sie es online!
Erklärungen
quelle
PowerShell , 123 Byte
Probieren Sie es online!
Ooof. PowerShell-Arrays sind unveränderlich, daher müssen wir
[Collections.ArrayList]
hier das langwierige Casting verwenden, damit wir es.remove()
später aufrufen können .Übernimmt die Eingabe
$args
, konvertiert sie in einen String, dann einchar
-array und dann einArrayList
. Speichert das in$a
. Dannwhile
schleifen wir , bis wir an oder unter sind9
. Bei jeder Iteration rufen wir.remove
das größte Element von$a
(erledigt vonsort
und nimmt das letzte Element[-1]
) auf und speichern das größte Element in$b
. Dies funktioniert, weil die ASCII-Werte auf dieselbe Weise wie die Literalziffern sortiert werden.Als nächstes berechnen wir
$a
wieder alschar
-array (undArrayList
implizit), indem wir unser$b
(welches momentan a istchar
) in einen String, dann in ein int mit+
, umwandeln und dieses mit multiplizieren$a
-join
ed in eine Zeichenfolge (implizit in int umwandeln). Dies erfüllt den "Multiplizieren mit D" -Teil der Herausforderung.Sobald wir die Schleife verlassen haben, stellen wir uns
$a
auf die Pipeline und die Ausgabe ist implizit.quelle
Pip ,
2221 BytesÜbernimmt Eingaben als Befehlszeilenargument. Überprüfen Sie alle Testfälle: Probieren Sie es online!
Erläuterung
Ungolfed, mit Kommentaren:
In der Golfversion wird der Loop-Body zu einem einzigen Ausdruck zusammengefasst:
quelle
C
103,9590 BytesProbieren Sie es online!
quelle
Java 8: 115 Bytes
-10 Bytes dank Jo King
Leider kann man eine Lambda-Funktion nicht rekursiv aufrufen, so dass zusätzliche 11 Bytes für den Methodenkopf benötigt werden. Mir ist bewusst, dass es eine kürzere Java-Antwort gibt, die sich stattdessen in einer Schleife befindet, aber ich habe mich dazu entschlossen, diese selbst zu entwickeln.
Probieren Sie es online aus
quelle
-48
von der Karte an das Ende derm
Definition verschieben. Probieren Sie es online! Sie haben auch einige zusätzliche Leerzeichen in Ihrem TIO-LinkJ, 40 Bytes
Probieren Sie es online!
Erläuterung
quelle
PowerShell , 230 Byte
Probieren Sie es online!
Zu viel Zeit mit dem Typ Casting verschwendet.
quelle
PHP,
8277 + 1 BytesLaufen Sie als Pipe mit
-nR
oder probieren Sie es online aus .quelle
Gleichstrom ,
98-85BytesVielen Dank an diese Antwort für die Idee,
~
beim Extrahieren von Ziffern aus einer Zahl zwei gespeicherte Bytes gegenüber der Originalversion des Codes zu verwenden.Dies war eine ziemlich schwierige Aufgabe, die
dc
mit ihren nicht vorhandenen Manipulationsmöglichkeiten für Zeichenfolgen abgeschlossen werden musste.Probieren Sie es online!
quelle
Bash, 80 Bytes
Verwendet die Pakete Core Utilities (für
sort
undtail
) undgrep
.Wie funktioniert es?
quelle