Le scénario
Après une longue journée de travail au bureau et à parcourir le site stackexchange.com , j’ai finalement franchi la porte à 16h58, déjà fatiguée par la journée. Comme je ne suis encore qu’un stagiaire, mon moyen de transport actuel est le vélo. Je me dirige vers mon fidèle Peugeot Reynolds 501 , mais avant de pouvoir naviguer au-dessus, je dois le déverrouiller. La serrure est une serrure à combinaison à quatre chiffres standard (0-9) traversant le cadre et la roue avant. Alors que j'essaie de rester éveillé, je lève la main pour entrer dans la combinaison.
Le défi
Parce que mes doigts sont si fatigués, je veux que la serrure soit correctement assortie du moins possible de mouvements. Un mouvement est défini comme une rotation d'une position (36 degrés). Par exemple, il y a un mouvement de 5737
à 5738
. Cependant, je suis capable de saisir jusqu'à trois sonneries consécutives à la fois et de les faire tourner comme un seul , ce qui ne compte que pour un seul mouvement. Par exemple , il y a aussi un seul mouvement de 5737
la 6837
ou 5626
. Aller de 5737
à 6838
n'est pas un mouvement, car les chiffres 1, 2 et 4 ont évolué dans le même sens, mais indépendamment du chiffre 3.
Par conséquent, pour une combinaison donnée, je peux voir sur le cadenas du vélo (tout nombre entier à 4 chiffres), quel est le plus petit nombre de mouvements que je peux faire pour le déverrouiller, et oui, je peux effectuer une rotation dans n'importe quelle direction à tout moment. J'entends par là que je peux tourner certains chiffres dans une direction et d'autres chiffres dans l'autre direction: tous mes mouvements ne seront pas dans le sens contraire des aiguilles d'une montre ou dans le sens des aiguilles d'une montre pour chaque déverrouillage.
Parce que je suis paresseux, mon code de déverrouillage est 0000.
C’est du code golf, je ne me dérange pas pour écrire beaucoup de code, donc le programme le plus court en nombre d’octets gagne.
L'entrée est à partir de stdin, et votre code doit générer les combinaisons que je peux voir à chaque étape après chaque mouvement, y compris le 0000 à la fin. Chaque sortie des combinaisons doit être séparée par un espace / nouvelle ligne / virgule / période / esperluette.
Exemples
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
J'ai essayé de poster ceci sur http://bicycles.stackexchange.com , mais ils ne l'ont pas aimé ...
Clause de non-responsabilité: Premier golf, donc tout ce qui est brisé / toute information manquante faites le moi savoir! De plus, j'ai fait tous les exemples à la main, il peut donc y avoir des solutions qui impliquent moins de mouvements!
EDIT: Pour les réponses qui ont plusieurs chemins de solution avec un nombre égal de mouvements (pratiquement tous), il n'y a pas de solution préférée.