Schreiben Sie ein Programm oder eine Funktion, die eine positive Ganzzahl N akzeptiert. Geben Sie eine Liste aller eindeutigen Dezimalzahlen aus, die mit Ziffern ( 0123456789
), Dezimalpunkten ( .
) und negativen Vorzeichen ( -
) in genau N Zeichen geschrieben werden können .
Zum Beispiel sind einige Zahlen , die in der N = 4 Ausgabeliste sein würden , sind 1337
, 3.14
, .999
, -789
, -2.7
, und -.09
.
Die Zahlen sind wie gewohnt, aber so kurz wie möglich zu schreiben . Das heisst:
Der Dezimalpunkt sollte nur eingefügt werden, wenn die Zahl keine Ganzzahl ist.
- zB
45.0
und45.
sollte als klar geschrieben werden45
-45.00
sollte geschrieben werden als-45
- zB
Vor dem Dezimalpunkt dürfen keine führenden Nullen stehen.
03
und003
sollte so geschrieben werden3
, aber30
und300
sind in Ordnung, wie sie sind0.3
und00.3
sollte als gerecht geschrieben werden.3
-03
sollte geschrieben werden als-3
-0.3
sollte geschrieben werden als-.3
Nach dem Komma dürfen keine nachgestellten Nullen stehen
.50
und.500
sollte geschrieben werden als.5
900.090
sollte geschrieben werden als900.09
Die Ausnahme zu den beiden letzten Regeln ist die Null selbst, die immer als einfach geschrieben werden sollte
0
.Positive Zeichen (
+
) sollten nicht verwendet werden, da sie die Zahl unnötig verlängern.
Beachten Sie auch, dass das negative Vorzeichen ( -
) nicht als Subtraktionszeichen verwendet werden darf. Es sollte nur als erstes Zeichen von Zahlen kleiner als Null erscheinen.
Formatierung
Die Reihenfolge der ausgegebenen Nummernliste spielt keine Rolle. Es kann aufsteigend, absteigend oder völlig durcheinander sein. Es kommt nur darauf an, dass alle eindeutigen Zahlen, die in N Zeichen geschrieben werden können, vorhanden sind.
Die Liste kann in angemessener Weise mit Leerzeichen, Zeilenumbrüchen, Kommas oder anderen Zeichen zwischen den Zahlen formatiert werden, sofern die Dinge konsistent sind. Führende und nachfolgende Klammern (oder ähnliches) sind in Ordnung, Anführungszeichen um Zahlen jedoch nicht. (dh verwechseln Sie Strings und Ints / Floats nicht sichtbar in der Ausgabe.)
Wenn beispielsweise N = 1 ist, sind einige gültige Ausgaben:
0 1 2 3 4 5 6 7 8 9
[1, 2, 3, 4, 5, 6, 7, 9, 0]
ans = { 5 8 9 1 3 2 0 3 4 7 6 }
Das wäre aber ungültig:
[0, 1, 2, 3, 4, "5", "6", "7", "8", "9"]
Beispiele
N = 1 -> 0 1 2 3 4 5 6 7 8 9
N = 2 -> -9 -8 -7 -6 -5 -4 -3 -2 -1 .1 .2 .3 .4 .5 .6 .7 .8 .9 10 11 12 ... 97 98 99
N = 3 -> -99 -98 ... -11 -10 -.9 -.8 ... -.2 -.1 .01 .02 ... .98 .99 1.1 1.2 ... 1.9 2.1 2.2 ... 2.9 3.1 ...... 9.9 100 101 ... 998 999
Die Listen sind in aufsteigender Reihenfolge und an einigen Stellen zum besseren Lesen mit Auslassungspunkten versehen.
Wertung
Der kürzeste Code in Bytes gewinnt. Bei Stimmengleichheit gewinnt die höher gewählte Antwort
-0
eine gültige Ausgabe sein?Also note that the negative sign (-) should not be used as a subtraction sign. It should only appear as the first character of numbers less than zero.
0
".Antworten:
Pyth,
4745 BytesVielen Dank an FryAmTheEggman für die Feststellung, dass die Bestellung keine Rolle spielt.
Probieren Sie es online aus.
Die Laufzeit ist schrecklich, im Grunde genommen O (12 n ), aber ich habe es
n
auf meinem Computer auf = 6 getestet (was 2 Minuten gedauert hat). Laufenn
≥ 5 wird Online - Zeit aus.Aufgrund der Art und Weise, wie ich die Zeichen generiere, erfolgt
0123456789.-
die Ausgabe in einer wirklich seltsamen Reihenfolge.Man könnte das
{
nahe Ende technisch entfernen , aber es würde zu einer Komplexität von O (19 n ) führen. (Es würde auch viele Duplikate produzieren, aber das ist erlaubt.)Erläuterung
Der Hauptteil des Codes ist
".- \..*\. ^-?0. [.-]0*$"
, der die regulären Ausdrücke enthält, mit denen eine Ausgabe nicht übereinstimmen darf .quelle
Pyth, 57 Bytes
Probieren Sie es mit dem Online-Dolmetscher aus .
Viel zu lang und mit schrecklicher Laufzeit (dauert mehrere Sekunden für N = 4, die Ausführung mit N = 5 wird nicht empfohlen).
Regex Erklärung:
quelle
*Q
Permutation machen, vor das stellen,+
so dass es nur die Ziffern beeinflusst, dies sollte die Leistung ein wenig verbessern. Es könnte sogar helfen, einige Bytes im regulären Ausdruck zu speichern?Julia,
126117 BytesDies ist eine Lambda-Funktion, die eine Ganzzahl akzeptiert und ein Array von Zeichenfolgen zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu. Der Ansatz hier ist der gleiche wie bei Doorknobs Pyth- Antwort .
Ungolfed:
quelle
MATL , 60 Bytes
Probieren Sie es online!
Dies verwendet Super-Brute-Force (über kartesische Potenz), gefolgt von Filterung (über einen regulären Ausdruck). Ich werde später eine Erklärung hinzufügen.
Die Ergebnisse werden am Ende des Programms angezeigt. Das kann eine Weile dauern. Wenn Sie die Ergebnisse sehen möchten, während sie generiert werden, fügen Sie
D
am Ende Folgendes hinzu :quelle