Vous avez verrouillé votre vélo avec une serrure à combinaison à 3 chiffres. Maintenant, vous voulez aller faire un tour et vous devez le déverrouiller à l'aide du programme suivant.
Contribution
1er paramètre
La combinaison de chiffres de votre verrou en état verrouillé . Il doit être différent du 2ème paramètre (= la combinaison de déverrouillé état ). (Sinon, votre vélo pourrait être volé!)
Plage 000.,999. Les zéros au début ne doivent pas être omis.
2ème paramètre
La combinaison de chiffres de votre verrou à l' état déverrouillé . Cette valeur est votre objectif.
Plage 000.,999. Les zéros au début ne doivent pas être omis.
Sortie
Une liste de chaque état de la serrure à combinaison après chaque "rotation", y compris l'état initial (qui est toujours le premier paramètre) et la dernière étape (qui est toujours le deuxième paramètre).
Algorithme
Vous commencez à "faire tourner" le premier chiffre un par un jusqu'à ce que vous obteniez le chiffre correct dans l' état déverrouillé . Mais comme vous connaissez le code de déverrouillage complet, vous faites pivoter le chiffre dans le sens dans lequel vous avez besoin du plus petit nombre de rotations pour atteindre le chiffre en état déverrouillé. . En cas d'égalité, vous pouvez choisir la direction que vous préférez.
Lorsque vous avez atteint le premier chiffre correct, vous démarrez la même procédure avec le 2e puis avec le 3e.
L'ordre des chiffres est à comprendre comme un cercle:
... 9 0 1 2 3 4 5 6 7 8 9 0 1 2 ...
Cela signifie que le plus petit nombre de rotations de 1 à 9 n’est pas
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
= 8
mais
1 -> 0 -> 9
= 2.
Remarques
- Vous pouvez compter sur les règles d'E / S par défaut
- Vous pouvez changer l'ordre des paramètres.
Exemples
Exemple 1, correct
Input: 999 001
Output:
999
099
009
000
001
Exemple 2, correct
Input: 000 292
Output:
000
100
200
290
291
292
Exemple 3, mauvaise sortie
Input: 999 121
Wrong output:
999
899 // Wrong because wrong rotation direction.
799
699
...
Correct output:
999
099
199
109
119
129
120
121
Exemple 4, mauvaise entrée
Input: 1 212 // Wrong because no leading zeros.
Ceci est le code-golf la réponse la plus courte gagne.
la source
Réponses:
Python 2 ,
1131071059995 octetsEssayez-le en ligne!
Prend les entrées sous forme de listes d'entiers
Enregistré:
la source
//
Gelée , 15 octets
Un lien dyadique acceptant le code de début à gauche et le code-cible à droite sous forme de listes d’entiers (en[ 0 , 9 ] , longueur égale mais arbitraire) qui produit une liste de listes de codes allant du code de début au code cible.
Essayez-le en ligne!
Comment?
la source
JavaScript (ES6),
73 7270 octets2 octets sauvés grâce à @tsh
Prend la saisie sous forme de 2 tableaux de chiffres en syntaxe curry
(a)(b)
. Retourne une chaîne.Essayez-le en ligne!
Commenté
la source
d/6&1^d>0||9
->d/5>5/d?9:1
Gelée , 25 octets
Essayez-le en ligne!
Programme complet.
la source
Python 2 ,
10197 octetsEssayez-le en ligne!
3 octets à Joël .
Prend les entrées sous forme de listes d'ints.
la source
//
c'est la même chose/
, donc il y a un octet supplémentaire gagné.for x,y,i in zip(a,c,[0,1,2])
si je me souviens ...Gelée , 30 octets
Essayez-le en ligne!
Un lien dyadique prenant comme argument de gauche le code de déverrouillage et à sa droite l'état de verrouillage actuel, les deux en tant que listes d'entiers.
Cela semble beaucoup trop long!
la source
PHP , 114 octets
Essayez-le en ligne!
Ma solution est probablement nulle, mais c'est le meilleur que je puisse penser pour le moment!
la source
Charbon de bois , 48 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
Imprimer la position initiale.
Modifiez la chaîne de position initiale en un tableau de chiffres numériques à des fins de calcul.
Boucle sur chaque chiffre à tour de rôle.
Calculez le nombre de rotations nécessaires pour déverrouiller ce chiffre. Il s’agit d’un nombre allant de
-5
à4
où-5
signifie 5 rotations vers le bas et4
4 rotations vers le haut.Boucle sur chaque rotation.
Mettez à jour le chiffre en fonction du signe de la rotation.
Affiche les chiffres sous forme de chaîne sur une nouvelle ligne.
la source
T-SQL 2008, 170 octets
J'ai ajouté des sauts de ligne pour le rendre lisible
Essayez-le en ligne
la source
C # (compilateur interactif Visual C #) , 101 octets
Essayez-le en ligne!
la source
J , 36 octets
Essayez-le en ligne!
Ajoutera une explication demain.
la source
MATLAB,
10089 octetsUne approche différente (utilisant le développement implicite pour créer une matrice de soustraction) réduit de 11 octets:
[Solution originale de 100 octets]
Appelés tous les deux en passant les entrées sous forme de tableaux à 3 éléments, par exemple
f([9 1 1], [2 3 2])
la source
Java (JDK) , 139 octets
Essayez-le en ligne!
Même algorithme que tout le monde, roulé différemment car Java
System.out.println
est assez cher!la source
C (clang) , 125 octets
Essayez-le en ligne!
la source
Kotlin , 162 octets
Essayez-le en ligne!
la source