Das Szenario
Nach einem langen Arbeitstag im Büro und dem Durchstöbern von stackexchange.com gehe ich endlich um 16:58 Uhr aus der Tür, schon müde vom Tag. Da ich noch Praktikant bin, bin ich momentan mit dem Fahrrad unterwegs. Ich gehe zu meinem vertrauenswürdigen Peugeot Reynolds 501 , aber bevor ich davonsegeln kann, muss ich ihn entsperren. Das Schloss ist ein vierstelliges Standardkombinationsschloss (0-9) über den Rahmen und das Vorderrad. Während ich versuche, wach zu bleiben, ziehe ich meine Hand nach oben, um in die Kombination einzutreten.
Die Herausforderung
Weil meine Finger so müde sind, möchte ich das Schloss mit den wenigsten Bewegungen auf die richtige Kombination drehen. Eine Bewegung ist definiert als eine Drehung um eine Position (36 Grad), zum Beispiel gibt es eine Bewegung von 5737
bis 5738
. Ich bin jedoch in der Lage, bis zu drei aufeinanderfolgende Ringe gleichzeitig zu erfassen und sie als einen zu drehen , was nur als eine einzige Bewegung zählt. Zum Beispiel gibt es auch nur eine Bewegung von 5737
nach 6837
oder nach 5626
. Das Bewegen von 5737
nach 6838
ist nicht eine Bewegung, da sich die Ziffern 1, 2 und 4 in die gleiche Richtung bewegt haben, sondern unabhängig von Ziffer 3.
Daher kann ich für eine bestimmte Kombination auf dem Fahrradschloss (eine beliebige 4-stellige Ganzzahl) sehen, wie viele Bewegungen ich am wenigsten ausführen kann, um es zu entsperren, und ja, ich kann mich jederzeit in beide Richtungen drehen. Damit meine ich, dass ich einige Ziffern in die eine und andere Ziffern in die andere Richtung drehen kann: Nicht alle meine Bewegungen werden bei jedem Entsperren im oder gegen den Uhrzeigersinn ausgeführt.
Da ich faul bin, ist mein Freischaltcode 0000.
Dies ist Codegolf Ich kann nicht viel Code schreiben, so dass das kürzeste Programm in Anzahl von Bytes gewinnt.
Die Eingabe erfolgt von stdin, und Ihr Code sollte die Kombinationen ausgeben, die ich bei jedem Schritt nach jeder Bewegung sehen kann, einschließlich der 0000 am Ende. Jede der ausgegebenen Kombinationen sollte durch ein Leerzeichen / Zeilenumbruch / Komma / Punkt / Et-Zeichen getrennt werden.
Beispiele
Input: 1210
0100
0000
Input: 9871
9870
0980
0090
0000
Input: 5555
4445&3335&2225&1115&0005&0006&0007&0008&0009&0000
Input: 1234
0124 0013 0002 0001 0000
Ich habe versucht, dies auf http://bicycles.stackexchange.com zu posten , aber es hat ihnen nicht gefallen ...
Haftungsausschluss: Erstes Golfen, also alles was kaputt ist / fehlende Informationen lass es mich wissen! Außerdem habe ich alle Beispiele von Hand gemacht, sodass es Lösungen geben kann, die weniger Bewegungen erfordern!
BEARBEITEN: Für Antworten mit mehreren Lösungspfaden und gleicher Anzahl von Bewegungen (praktisch alle) gibt es keine bevorzugte Lösung.