Eine Reihe von Programmiersprachen erstellen große Ganzzahlen, indem sie die Ziffer bis zum Ende der vorhandenen Zahl "verketten". Zum Beispiel Labyrinth oder Adapt . Mit Verketten der Ziffer bis zum Ende meine ich, dass, wenn die vorhandene Nummer ist und die Ziffer die Ergebniszahl 457 lautet .
Eine konstruierte Zahl ist eine Zahl, die auf diese Weise unter Verwendung der Vielfachen einstelliger Zahlen erstellt werden kann: AKA Ein Element in einer dieser 9 Folgen:
Um ein Beispiel dafür zu geben, wie die Sequenzen aufgebaut sind, sehen Sie, wie die Sequenz für aufgebaut ist:
und enthalten, um zu demonstrieren, wenn . EineMengevon Stellen punktiert fürWeltraum aus.
Es ist möglicherweise immer noch nicht klar, wie diese Sequenzen aufgebaut sind. Sie können sie also auf zwei verschiedene Arten verstehen:
Jede Sequenz beginnt mit der einzelnen Ziffer. Der nächste Term wird gefunden, indem das nächste Vielfache dieser Ziffer genommen, der vorherige Term mit multipliziert und das Vielfache addiert wird. In der Reihenfolge ausgedrückt:
wobei eine einzelne Ziffer ist ( bis )
Jedes der Elemente an einem beliebigen Punkt in der Folge ( zum Beispiel ) sind die Vielfachen von von bis , wobei durch
Die ersten Werte sind also , die zweiten sind , die dritten usw.
Ihre Aufgabe ist es, eine konstruierte Zahl als Eingabe zu nehmen und die Anfangsziffer auszugeben, mit der sie konstruiert wurde. Sie können davon ausgehen, dass die Eingabe immer eine konstruierte Zahl ist und größer als . Es kann sich um eine einzelne Ziffer handeln, die auf sich selbst zurückgeht.
Sie können Eingaben auf jede vernünftige Weise vornehmen, einschließlich als Ziffernliste, als Zeichenfolge usw. Es ist akzeptabel (obwohl nicht empfohlen), Eingaben in unary oder einer anderen Basis Ihrer Wahl vorzunehmen.
Dies ist ein Code-Golf, also gewinnt der kürzeste Code!
Testfälle
u_n => a
37035 => 3
6172839506165 => 5
5 => 5
246913580244 => 2
987654312 => 8
61728395061720 => 5
1111104 => 9
11111103 => 9
111111102 => 9
2469134 => 2
98760 => 8
8641975308641962 => 7
oder als zwei Listen:
[37035, 6172839506165, 5, 246913580244, 987654312, 61728395061720, 1111104, 11111103, 111111102, 2469134, 98760, 8641975308641962]
[3, 5, 5, 2, 8, 5, 9, 9, 9, 2, 8, 7]
Als ich diese Herausforderung gepostet habe, war mir nicht klar, dass sie durch die in Grimys Antwort verwendete Methode so stark vereinfacht werden könnte, und ich wäre daher sehr an Antworten interessiert, die einen mathematischeren Ansatz zur Lösung dieser Aufgabe verfolgen , anstatt eine 'Ziffer'. Trick (Offensichtlich sind alle gültigen Antworten gleichermaßen gültig, genau das, woran ich interessiert wäre).
Antworten:
05AB1E ,
754 BytesProbieren Sie es online!
quelle
a * (((10**n - 1) / 9 - n) / 9)
. Multiplizieren Sie das mit 9 und addieren Siea*n
, und Sie erhaltena * ((10**n - 1) / 9)
, auch bekannt als die Ziffer, die n-mal wiederholt wird. Es stellt sich heraus, dassa*n
für n = 1 9 anstelle von funktioniert, und für größere n ist die konstante Differenz neben dem exponentiellen Wachstum vernachlässigbar.MathGolf , 6 Bytes
Probieren Sie es online!
Leider gibt es
head
in MathGolf keine Operation, daher muss ich mich damit begnügen,▒├Þ
in einen String zu konvertieren, von links zu springen und alle bis auf den oberen Teil des Stapels zu verwerfen.quelle
Gelee , 5 Bytes
Probieren Sie es online!
Mit Grimys Ansatz .
quelle
Stax , 5 Bytes
Führen Sie es aus und debuggen Sie es
quelle
Japt
-g
,765 Bytes-1 Byte dank Shaggy
Übernimmt die Eingabe als Zeichenfolge
Versuchen Sie es | Testen Sie mehrere Eingänge
quelle
Kohle , 7 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. @ Grimys Methode natürlich. Hier ist ein mathematischer Ansatz von 27 Byte:
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Abstürze bei ungültigen Eingaben. Erläuterung:
Geben Sie die konstruierte Zahl ein.
Interpretieren Sie die Liste als Zahl in Basis 10, multiplizieren Sie sie mit allen Zahlen von
0
bis9
und prüfen Sie, ob die konstruierte Zahl angezeigt wird.Schieben Sie die Länge der Liste auf sich. Die Liste wird also von der Form
[0, 1, 2, ..., n]
.Erstellen Sie die erstellten Zahlen neu, aber suchen Sie diesmal den Index, an dem die eingegebene Zahl erschien, und geben Sie ihn aus.
quelle
Labyrinth ,
28 2220 BytesWendet die von Grimy beschriebene ziffernbasierte Methode durch wiederholte ganzzahlige Division durch zehn an, bis Null gefunden wird.
Probieren Sie es online!
quelle
Leerzeichen , 108 Bytes
Buchstaben
S
(Leerzeichen),T
(Tabulator) und (Zeilenvorschub) werdenN
nur als Hervorhebungen hinzugefügt.[..._some_action]
nur als Erklärung hinzugefügt.Port von @Grimys 05AB1E-Antwort , außer dass ich keinen eingebauten Code habe, um die erste Ziffer zu erhalten. ;)
Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Erklärung im Pseudocode:
quelle
Python 3 , 22 Bytes
Probieren Sie es online!
Hafen von Grimy ‚s 05AB1E Antwort
Python 3 , 74 Bytes
Probieren Sie es online!
Erläuterung
Rekursive Funktion. Durchläuft die Sequenz für jede Ziffer
l
, beginnend mit1
. Wenn die Eingabei
der aktuellen Iteration entsprichtj
, wird die entsprechende Zifferl
zurückgegeben. Wenn der aktuelle Wertj
in der Sequenz den Eingabewert überschreiteti
, wird die Ziffer erhöhtl
und neu gestartet. Das Argumentk
wird verwendet, um den Multiplikationsfaktor zu erhöhen.quelle
JavaScript (ES6),
1615 BytesVielen Dank an @Grimy für das Aufheben der 32-Bit-Einschränkung, die ich mit der vorherigen Version hatte.
Mit Grimys magischer Beschwörung . Übernimmt die Eingabe als Zeichenfolge.
Probieren Sie es online!
JavaScript (ES6), 53 Byte
Naiver Brute-Force-Ansatz.
Probieren Sie es online!
quelle
-~n*9
kann seinn*9+9
, das ist das gleiche bytecount aber sollte die 32-Bit-Beschränkung loswerden, wenn ich richtig verstanden habe.14808
n=>n
für alle Eingaben.Java 8, 23 Bytes
Port von @Grimys 05AB1E Antwort , also stelle sicher, dass du ihn positiv bewertest!
Probieren Sie es online aus.
Aber weil ich mich für @cairdCoinheringaahing irgendwie schlecht fühle , hier ein Brute-Force-Ansatz mit etwas mehr Geld ( 83 Bytes ):
Probieren Sie es online aus.
Erläuterung:
quelle
PHP , 20 Bytes
Probieren Sie es online!
Noch ein Grimy's Antwortport !
quelle
Gelee , 8 Bytes
Probieren Sie es online!
Ein vollständiges Programm, das eine Ganzzahl annimmt und die Startziffer ausgibt. Verwendet nicht Grimys clevere Methode! Schrecklich ineffizient für größere Eingaben. Die folgende Version verarbeitet alle Testfälle, ist jedoch ein Byte länger:
Gelee , 9 Bytes
Probieren Sie es online!
quelle
Hy , 44 Bytes
Verwendet die Methode von Grimy
Probieren Sie es online!
quelle
Fass
-rr
, 4 BytesProbieren Sie es online!
Verwendet natürlich den gleichen Ansatz wie die 05AB1E-Antwort. Verwendet auch das neue
-rr
Flag (reverse und print raw).Transpiles zu:
quelle
Zaunkönig , 30 Bytes
Nur eine Anlaufstelle für die meisten Antworten.
Probieren Sie es online!
quelle