Erstellen wir ein Zahlensystem, bei dem die größte Ziffer im Wert der n-ten Stelle (von rechts nach links) einer Zahlenlänge m immer gleich m - n + 1 ist. Um ein Beispiel zu geben, die größte 5-stellige Zahl, die in diesem System ausgedrückt werden kann wird 12345 geschrieben. Abgesehen von der Anzahl der verfügbaren Ziffern, die an einem bestimmten Ort verwendet werden können, ist jede andere Inkrementierung Standard. Wenn eine Ziffer ihre Zifferngrenze überschreiten soll, fügen wir der nächsten Ziffer eine hinzu.
So würde das Zählen in diesem System dargestellt:
1; 10; 11; 12; 100; 101; 102; 103; 110; 111; 112; 113; 120; 121; 122; 123; 1000; 1001 ...
Ihre Aufgabe ist es, eine Funktion zu schreiben, die eine Standard-Basis-10-Nummer verwendet und in mein Nummerierungssystem konvertiert.
Kürzerer Code ist vorzuziehen. Viel Glück!
** Wenn Sie nach 9 Ziffern benötigen (sollten Sie), können Sie Buchstaben verwenden oder eine zweistellige Zahl als Element einer Liste zurückgeben.
Testfälle
10 -> 111
20 -> 1003
30 -> 1023
50 -> 1123
100 -> 10035
23116 -> 1234567
21977356 -> 123456789A
Der letzte Fall kann je nach Implementierung unglaublich langsam ausgeführt werden. Sie müssen es nicht ausführen, wenn es zu lange dauert oder zu viel Speicher benötigt. Beachten Sie jedoch, dass es Möglichkeiten gibt, es schnell und mit wenig Speicher auszuführen.
quelle
100 -> 10035
eher als100 -> 10033
, können Sie überprüfen?Antworten:
Mathematica, 64 Bytes
Unbenannte Funktion, die ein positives Ganzzahlargument verwendet und eine Liste von Ganzzahlen zurückgibt.
Join[{{1}},Array[Range,#-1,3]-1]
Gibt die verschachtelte Liste zurück{ {1}, {0,1,2}, {0,1,2,3}, ..., {0,1,...,#} }
. DannTuples
kehrt der (sortiert) Menge aller Tupel , deren erstes Element liegt in{1}
, dessen zweites Element liegt in{0,1,2}
, und so weiter; Dies sind die#
-stelligen Zahlen in diesem Nummerierungssystem.Join@@Array[...,#]
Gibt ein Array aller Zahlen in diesem Nummerierungssystem mit höchstens#
Ziffern zurück undPart[...,#]
extrahiert die#
th-Zahl.Das ist hoffnungslos langsam! Es läuft gut für die Eingabe von bis zu 9. Bei größeren Eingang Test durch das Ende ersetzt
,#],#]&
mit,Ceiling[0.9Log[#]]],#]&
; Dies begrenzt die Anzahl der Stellen realistischer, die erforderlich sind, um im Nummerierungssystem weit genug zu gehen, um die gewünschte zu finden.quelle
Mathematica, 93 Bytes
Reine Funktion mit erstem Argument
#
. Wenn eine nichtnegative Ganzzahl angegeben wird, wird die korrekte Liste der Ziffern ausgegeben (sogar0
korrekt behandelt!).Erläuterung
Nest[f,expr,n]
gibt das Ergebnis der Anwendungf
aufexpr
n
Zeiten. In diesem Fallexpr
ist dies die Liste{0}
undn
die Eingabe-Ganzzahl#
. Die Funktionf
ist kompliziert:quelle
y___,z_:0
, um die Länge der Liste zu erhöhen!Perl 6 , 38 Bytes
Nimmt eine positive Ganzzahl und gibt eine Liste von Ganzzahlen aus, die die Ziffern darstellen.
Erläuterung:
quelle
Pyth - 14 Bytes
Gibt einfach den
nth
Wert zurück, der zum "Wertmuster weniger als Platz" passt.Testsuite .
quelle
2018967
, bei der die letzte Ziffer gleich 10 ist?Haskell, 65 Bytes
i
erhöht die Zahlen im Zahlensystem mit den Ziffern in umgekehrter Reihenfolge.iterate
Erstellt die unendliche Liste all dieser Zahlen beginnend mit Null, dargestellt durch[]
. Dann müssen Sie nur noch!!
die gewünschte Nummer nehmen ( ) undreverse
es.Die letzte Zeile ist eine Funktion, keine Funktionsdefinition, daher kann sie nicht wie in einer Quellcodedatei angezeigt werden. Fügen Sie stattdessen nur die anderen Zeilen in den Quellcode ein und verwenden Sie die letzte Zeile beim Interpreter (oder binden Sie die Funktion an einen Namen, indem Sie
f=
der letzten Zeile voranstellen ).Anwendungsbeispiel:
(8 Bytes könnten gespeichert werden, wenn
[5,3,0,0,1]
das Ergebnis zulässig wäre.)quelle
Haskell, 49 Bytes
Die erste Zeile ist eine Hilfsdefinition, und die zweite Zeile ergibt eine Funktion. Es nimmt eine Ganzzahl und gibt eine Liste von Ganzzahlen zurück. Probieren Sie es online aus!
Erläuterung
Ich definiere
x
als die unendliche Liste von Darstellungen, die im Herausforderungstext erwähnt werden; Die Hauptfunktion dekrementiert nur ihr Argument und indiziert inx
. Die erste Zeile funktioniert folgendermaßen:Sie sehen, dass dies
x
in Bezug auf sich selbst definiert ist, aber Haskell ist faul, so dass dies kein Problem ist.quelle