Einführung
In einem privaten Chat ist ein Freund von mir anscheinend kürzlich auf ein Sicherheitssystem gestoßen, das die folgenden zwei Einschränkungen für seine gültigen Pins aufweist:
- Jede Ziffer muss eindeutig sein (dh "1" darf nur einmal vorkommen)
- Die Reihenfolge der Ziffern spielt keine Rolle ("1234" = "4321")
Um zu veranschaulichen, wie schlecht dieses Vorhängeschlosssystem ist, listen wir alle gültigen PINs auf!
Eingang
Ihre Eingabe besteht aus einer einzelnen positiven Ganzzahl, die die Länge der PIN angibt.
Ausgabe
Ihre Ausgabe besteht aus einer Liste nicht negativer Ganzzahlen oder Zeichenfolgen *, die alle gültigen PINs der angegebenen Länge auflisten.
* Genauer gesagt, etwas, mit dem ein Mensch alle Kombinationen ausprobieren kann, wenn Sie es für sie drucken würden. Dies bedeutet, dass ein Satz von Ziffernsätzen und Arrays von Ziffernarrays in Ordnung sind.
Wer gewinnt?
Das ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes! Standardregeln und Lücken gelten.
Eckkoffer
- Das Ausgabeverhalten ist undefiniert, wenn eine Ganzzahl größer als 10 eingegeben wird.
- Die Reihenfolge der Ziffern in jedem Ausgabeeintrag ist undefiniert, da Einträge mit einer Null tatsächlich diese Null enthalten. Das heißt, Sie dürfen nicht "0123" bis "123" streifen, sondern "1230", "1203" und "1023" sind alle gültig wie ist "0123".
Testfälle
1
[0,1,2,3,4,5,6,7,8,9]
2
[10,20,30,40,50,60,70,80,90,21,31,41,51,61,71,81,91,32,42,52,62,72,82,92,43,53,63,73,83,93,54,64,74,84,94,65,75,85,95,76,86,96,87,97,98]
3
[210,310,410,510,610,710,810,910,320,420,520,620,720,820,920,430,530,630,730,830,930,540,640,740,840,940,650,750,850,950,760,860,960,870,970,980,321,421,521,621,721,821,921,431,531,631,731,831,931,541,641,741,841,941,651,751,851,951,761,861,961,871,971,981,432,532,632,732,832,932,542,642,742,842,942,652,752,852,952,762,862,962,872,972,982,543,643,743,843,943,653,753,853,953,763,863,963,873,973,983,654,754,854,954,764,864,964,874,974,984,765,865,965,875,975,985,876,976,986,987]
4
[3210,4210,5210,6210,7210,8210,9210,4310,5310,6310,7310,8310,9310,5410,6410,7410,8410,9410,6510,7510,8510,9510,7610,8610,9610,8710,9710,9810,4320,5320,6320,7320,8320,9320,5420,6420,7420,8420,9420,6520,7520,8520,9520,7620,8620,9620,8720,9720,9820,5430,6430,7430,8430,9430,6530,7530,8530,9530,7630,8630,9630,8730,9730,9830,6540,7540,8540,9540,7640,8640,9640,8740,9740,9840,7650,8650,9650,8750,9750,9850,8760,9760,9860,9870,4321,5321,6321,7321,8321,9321,5421,6421,7421,8421,9421,6521,7521,8521,9521,7621,8621,9621,8721,9721,9821,5431,6431,7431,8431,9431,6531,7531,8531,9531,7631,8631,9631,8731,9731,9831,6541,7541,8541,9541,7641,8641,9641,8741,9741,9841,7651,8651,9651,8751,9751,9851,8761,9761,9861,9871,5432,6432,7432,8432,9432,6532,7532,8532,9532,7632,8632,9632,8732,9732,9832,6542,7542,8542,9542,7642,8642,9642,8742,9742,9842,7652,8652,9652,8752,9752,9852,8762,9762,9862,9872,6543,7543,8543,9543,7643,8643,9643,8743,9743,9843,7653,8653,9653,8753,9753,9853,8763,9763,9863,9873,7654,8654,9654,8754,9754,9854,8764,9764,9864,9874,8765,9765,9865,9875,9876]
quelle
Antworten:
Gelee , 4 Bytes
Probieren Sie es online!
Erläuterung
Verhalten für
n > 10
ist leere Liste.quelle
05AB1E , 5 Bytes
Probieren Sie es online!
Erläuterung
quelle
ù
war eine Sache. Ich bin mir ziemlich sicher, dass ich vorher Filter verwendet habe. Wie neu ist das?JavaScript (ES7), 89 Byte
Gibt eine Liste mit Ziffernlisten (als Zeichen) oder eine leere Liste zurück, wenn n> 10 ist .
Probieren Sie es online!
Wie?
Wir generieren zunächst eine Liste aller Dezimalstellen als Zeichen , indem wir 2 29 = 536870912 berechnen , die fehlende '4' hinzufügen und aufteilen :
Wir berechnen dann das Powerset:
Schließlich filtern wir die Ergebnisse nach ihrer Länge:
quelle
Python 3 , 57 Bytes
Probieren Sie es online!
Findet alle Kombinationen
0 .. 9
von Längenl
.Verhalten für
n > 10
ist leere Liste.quelle
Wolfram Language (Mathematica) , 22 Byte
Probieren Sie es online!
quelle
Python 2 , 62 Bytes
Gibt eine Reihe von Zeichenfolgen zurück.
Probieren Sie es online!
quelle
Pyth, 4 Bytes
Probieren Sie es hier aus
Erläuterung
quelle
R , 17 Bytes
Probieren Sie es online!
Fehler bei der Eingabe größer als
10
.Gibt a zurück,
matrix
wobei jede Spalte eine PIN ist.quelle
Ruby , 30 Bytes
Probieren Sie es online!
quelle
MATL , 6 Bytes
Probieren Sie es online!
Gibt nichts (leeres Array) für zurück
k>10
.quelle
Haskell ,
5650 Bytes-6 Bytes dank Hat Wizard .
Probieren Sie es online!
quelle
Java (JDK 10) , 105 Byte
Probieren Sie es online!
quelle
Haskell , 47 Bytes
Probieren Sie es online!
Erläuterung
Wenn die Anzahl der Ziffern Null ist, gibt es nur eine Kombination, nämlich die leere:
Wenn die Anzahl der Ziffern
n
undn/=0
die Kombinationen alle Möglichkeiten sind, Ziffern zu Kombinationen hinzuzufügen,f$n-1
so dass zu einer Kombination, die diese bereits enthält, keine Ziffer hinzugefügt wird.quelle
Gaia ,
43 BytesProbieren Sie es online!
Es ist schon eine Weile her, dass ich eine Antwort in Gaia gepostet habe! Vielen Dank an Herrn Xcoder für das Speichern eines Bytes!
quelle
@
.Netzhaut ,
5136 BytesProbieren Sie es online! Gibt nichts aus für
n>10
. Erläuterung:Ersetzen Sie den Eingang durch 10
_
s.Wiederholen Sie den Rest der Programmzeiten
n
.Stellen Sie jeder Zahl ein
_
Wiederholungszeichen entsprechend ihrer ersten Ziffer voran.Alle
_
s abgleichen, aber auch alle folgenden_
s in das Match aufnehmen, für die wir überlappende Matches aktivieren müssen.Stellen
_
Sie für jedes gefundene Zeichen der Zahl die Anzahl_
s links davon voran.Dies ist ein bisschen knifflig, daher wäre ein tatsächlicher Fall vielleicht besser. Angenommen, wir haben die Schleife bereits zweimal durchlaufen, sodass alle zweistelligen PINs generiert wurden, und wir arbeiten derzeit daran, dreistellige PINs zu erstellen. Wir werden uns ansehen, was passiert
36
: Die erste Ziffer ist3
, also drei_
s voranzustellen___36
. Dies erzeugt dann die folgenden Übereinstimmungen, die hier mit`'
s markiert sind :$%'
auswertet , um36
in allen drei Fällen in den 3-stelligen PINs resultierenden036
,136
und236
.Wenn wir dann fortfahren
036
würden, vierstellige PINs zu erstellen, hätten wir kein_
Präfix und würden daher in der endgültigen Ausgabe überhaupt keine Übereinstimmungen ergeben.quelle
^0
und¶
zu einem Preis von 5 Bytes.Proton , 43 Bytes
Probieren Sie es online!
Proton übertrifft schließlich Python: DI dachte, er
(import itertools)
würde den Wert zurückgeben, aber anscheinend bin ich dabei gescheitert. Auch das anschließende Importieren*
funktioniert nicht, da es sich nicht um ein Lambda handelt, sondern um einen Ausdruck der obersten Ebene.quelle
Japt, 5 Bytes
Gibt ein Array von Ziffern-Arrays aus. Gibt alle Kombinationen aus, wenn input
0
oder ein leeres Array ist, wenn input<0
oder ist>10
.Versuch es
Erläuterung
quelle
Stax , 4 Bytes
Probieren Sie es online!
Vd
ist"0123456789"
.,
schiebt die Eingabe in den Hauptstapel.S
Ruft Kombinationen der angegebenen Größe ab.In der tio Link,
m
in der Fußzeile zum Drucken der einzelnen Ausgaben verwendet.quelle
Standard ML ,
124122121 BytesProbieren Sie es online!Anwendungsbeispiel:
!2
Erträge[[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9],[1,0],[1,2],[1,3], ...]
.Ungolfed:
Einige Alternativen:
125123 BytesProbieren Sie es online! Definiert eine anonyme Funktion, an die gebunden ist
it
.127124 BytesProbieren Sie es online!
quelle
JavaScript (Node.js) , 53 Byte
Probieren Sie es online!
quelle
Oracle 18 SQL, 169 Byte
Keine Golfsprache, aber:
Erwartete, dass sich die Eingabe in einer Tabelle
i
mit Spalte befindeta
:Probieren Sie es online bei Oracle Live SQL (eine kostenlose Anmeldung ist erforderlich, dann kopieren Sie die Lösung in ein Arbeitsblatt) oder SQLFiddle (keine Anmeldung, erfordert jedoch +7 Bytes für die Arbeit mit der niedrigeren Oracle-Version).
quelle
CJam ,
1311 BytesProbieren Sie es online!
Läuft technisch nicht auf tio.run, da der Heap-Speicherplatz knapp wird. Es funktioniert jedoch ordnungsgemäß für bis zu 9-stellige Tastaturen und sollte mit mehr RAM problemlos funktionieren.
2 Bytes gespart dank Dennis
quelle
Bash ,
11399 BytesProbieren Sie es online!
quelle
r 0
funktioniert nichtr
ist die rekursive Funktion: Sie soll nicht mit nur einem Parameter gestartet werden.p 0
Verhalten ist in der Frage nicht spezifiziert.JavaScript (Firefox 30-57), 67 Byte
Port meiner Retina-Antwort, funktioniert aber
n=0
auch (Rückgabe einer Liste mit einer leeren Zeichenfolge im Gegensatz zu einer leeren Liste fürn>10
).quelle
Holzkohle , 21 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Schieben Sie die leere Zeichenfolge in die vordefinierte Liste.
Schleife über jede Ziffer.
Fügen Sie die Ziffer an jede Zeichenfolge in der Liste an.
Hänge das Ergebnis an die ursprüngliche Liste an.
Drucken Sie alle Zeichenfolgen mit der richtigen Anzahl von Ziffern.
quelle
Perl 6 , 20 Bytes
Probieren Sie es online!
Genau dafür gibt es
combinations
(als Unterprogramm oder.combinations
in einer Liste).https://docs.perl6.org/routine/combinations
quelle
J , 32 Bytes
.. frustrierend länger als Mathematica und R
f=:{[:(#@>"0]/.])[:<@I.@#:@i.2^]
TIOquelle