Sie haben Ihr Fahrrad mit einem 3-stelligen Zahlenschloss gesperrt. Jetzt möchten Sie eine Fahrt machen und müssen diese mit Hilfe des folgenden Programms entsperren.
Eingang
1. Parameter
Die Ziffernkombination Ihres Schlosses im gesperrten Zustand. Es muss sich vom 2. Parameter unterscheiden (= die Kombination des entsperrten Zustands). (Sonst könnte dein Fahrrad gestohlen werden!)
Bereich 000..999. Führende Nullen dürfen nicht weggelassen werden.
2. Parameter
Die Ziffernkombination Ihres Schlosses im entsperrten Zustand. Dieser Wert ist Ihr Ziel.
Bereich 000..999. Führende Nullen dürfen nicht weggelassen werden.
Ausgabe
Eine Liste aller Zustände des Zahlenschlosses nach jeder "Drehung", einschließlich des Anfangszustands (der immer der 1. Parameter ist) und des letzten Schritts (der immer der 2. Parameter ist).
Algorithmus
Sie beginnen, die erste Ziffer einzeln zu "drehen", bis Sie im entsperrten Zustand die richtige Ziffer erreicht haben . Da Sie jedoch den gesamten Entsperrcode kennen, drehen Sie die Ziffer in die Richtung, in der Sie die geringste Anzahl von Umdrehungen benötigen, um die Ziffer im entsperrten Zustand zu erreichen . Bei einem Unentschieden können Sie die Richtung wählen, die Sie bevorzugen.
Wenn Sie die richtige erste Ziffer erreicht haben, beginnen Sie den gleichen Vorgang mit der 2. und dann mit der 3. Ziffer.
Die Reihenfolge der Ziffern ist als Kreis zu verstehen:
... 9 0 1 2 3 4 5 6 7 8 9 0 1 2 ...
Dies bedeutet, dass die kleinste Anzahl von Umdrehungen von 1 bis 9 nicht ist
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
= 8
aber
1 -> 0 -> 9
= 2.
Anmerkungen
- Sie können sich auf Standard-E / A-Regeln verlassen
- Sie können die Reihenfolge der Parameter ändern.
Beispiele
Beispiel 1, richtig
Input: 999 001
Output:
999
099
009
000
001
Beispiel 2, richtig
Input: 000 292
Output:
000
100
200
290
291
292
Beispiel 3, falsche Ausgabe
Input: 999 121
Wrong output:
999
899 // Wrong because wrong rotation direction.
799
699
...
Correct output:
999
099
199
109
119
129
120
121
Beispiel 4, falsche Eingabe
Input: 1 212 // Wrong because no leading zeros.
Dies ist Code-Golf, die kürzeste Antwort gewinnt.
quelle
Antworten:
Python 2 ,
1131071059995 BytesProbieren Sie es online!
Übernimmt Eingaben als Listen von ganzen Zahlen
Gerettet:
quelle
//
Gelee , 15 Bytes
Probieren Sie es online!
Wie?
quelle
JavaScript (ES6),
73 7270 Byte2 Bytes dank @tsh gespeichert
Nimmt die Eingabe als 2 Ziffernfelder in Curry-Syntax an
(a)(b)
. Gibt eine Zeichenfolge zurück.Probieren Sie es online!
Kommentiert
quelle
d/6&1^d>0||9
->d/5>5/d?9:1
Gelee , 25 Bytes
Probieren Sie es online!
Volles Programm.
quelle
Python 2 ,
10197 BytesProbieren Sie es online!
3 Bytes Danke an Joel .
Nimmt Eingaben als Listen von Ints entgegen.
quelle
//
ist es dasselbe wie/
, sodass ein zusätzliches Byte gewonnen wird.for x,y,i in zip(a,c,[0,1,2])
wenn ich mich erinnere ...Gelee , 30 Bytes
Probieren Sie es online!
Ein dyadischer Link, der als linkes Argument den Entsperrcode und als rechtes den aktuellen gesperrten Zustand verwendet, beide als Listen von ganzen Zahlen.
Das fühlt sich viel zu lang an!
quelle
PHP , 114 Bytes
Probieren Sie es online!
Meine Lösung ist wahrscheinlich zum Kotzen, aber das ist das Beste, was ich mir vorstellen kann!
quelle
Kohle , 48 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Drucken Sie die Ausgangsposition.
Ändern Sie die anfängliche Positionszeichenfolge zu Berechnungszwecken in ein Array aus numerischen Ziffern.
Jede Ziffer der Reihe nach durchlaufen.
Berechnen Sie die Anzahl der Umdrehungen, die zum Entsperren dieser Ziffer erforderlich sind. Dies ist eine Zahl von
-5
bis,4
wobei-5
5 Abwärtsdrehungen und4
4 Aufwärtsdrehungen gemeint sind.Schleife über jede Umdrehung.
Aktualisieren Sie die Ziffer entsprechend dem Vorzeichen der Drehung.
Geben Sie die Ziffern als Zeichenfolge in einer neuen Zeile aus.
quelle
T-SQL 2008, 170 Byte
Ich habe einige Zeilenumbrüche hinzugefügt, um die Anzeige lesbar zu machen
Probieren Sie es online aus
quelle
C # (Visual C # Interactive Compiler) , 101 Byte
Probieren Sie es online!
quelle
J , 36 Bytes
Probieren Sie es online!
Werde morgen eine Erklärung hinzufügen.
quelle
MATLAB,
10089 BytesEin anderer Ansatz (implizite Erweiterung zum Erstellen einer Subtraktionsmatrix) reduziert 11 Bytes:
[Ursprüngliche 100-Byte-Lösung]
Beide werden durch Übergabe der Eingänge als 3-Element-Arrays aufgerufen, z
f([9 1 1], [2 3 2])
quelle
Java (JDK) , 139 Byte
Probieren Sie es online!
Gleicher Algorithmus wie alle anderen, anders gerollt, weil Javas
System.out.println
ziemlich teuer ist!quelle
C (clang) , 125 Bytes
Probieren Sie es online!
quelle
Kotlin , 162 Bytes
Probieren Sie es online!
quelle