introduction
Le défi d'aujourd'hui concerne les dents. Plus précisément, combien de temps il faut pour passer d'une dent à l'autre. Votre défi est, étant donné l'emplacement des deux dents, de produire le moins de temps possible pour brosser de la première à la seconde.
Défi
Pour ce défi, nous utiliserons une disposition d'une bouche humaine adulte moyenne:
Ce diagramme montre le système de numérotation ISO largement utilisé . Le système divise la bouche en quatre parties et leur attribue un numéro à chacune: en haut à droite (1), en haut à gauche (2), en bas à gauche (3) et en bas à droite (4). Ils numérotent ensuite les dents de chaque section du milieu de la bouche de 1 à 8. Par conséquent, la quatrième dent du centre dans le coin supérieur droit (section 1) est la dent numéro 14.
Supposons que le brossage d'une dent prenne 1 unité de temps. Passer d'une dent à l'autre prend latéralement 0 unité de temps. Vous pouvez également passer d'une dent à la dent directement au-dessus ou en dessous, ce qui prend également 1 unité de temps. Combien de temps vous faut-il pour passer de la dent 14 à la dent 31? En regardant le diagramme ci-dessus, vous verrez que cela prend 7 unités de temps. Voici comment cela est calculé:
Action : Unit of time
Brushing tooth 14 : 1 unit
Brushing tooth 13 : 1 unit
Brushing tooth 12 : 1 unit
Brushing tooth 11 : 1 unit
Brushing tooth 21 : 1 unit
Cross to bottom of mouth : 1 unit
Brushing tooth 31 : 1 unit
------------------------------
Total: 7 units
Notez que ce n'est pas le seul itinéraire que nous aurions pu emprunter, mais il n'y a pas d'itinéraires plus courts.
Votre défi est donc:
- Vous écrirez un programme ou une fonction complète qui accepte deux arguments qui sont des nombres de dents, et génère (ou renvoie) le temps le plus court pour passer de l'un à l'autre.
- Vous effectuez la saisie sous forme de nombres ou de chaînes, et la sortie comme vous le souhaitez ( dans les méthodes acceptables ).
- Les failles standard sont interdites par défaut.
- Cette question est le code-golf , donc le bytecount le plus court gagne.
Voici quelques tests ( Merci Jonathan Allan ):
14, 21 => 5 14, 44 => 3 14, 14 => 1 33, 37 => 5
Bonne chance!
Réponses:
Gelée ,
2420 octetsUn lien monadique acceptant une liste de deux entiers (par exemple
[14,31]
pour l' exemple de 14 à 31) qui donne le temps de brossage.Essayez-le en ligne!
Les 24 octets précédents ont construit la bouche et utilisé la base 8, l'entrée était une liste de listes de chiffres:
la source
JavaScript (ES6), 65 octets
Prend l'entrée sous forme de chaînes.
la source
Python 2 , 91 octets
Essayez-le en ligne!
la source
JavaScript (ES6), 67 octets
Attend les entrées comme deux tableaux de chiffres à 2 éléments.
12
->[1, 2]
J'espère que c'est acceptable.Essayez-le en ligne!
On dirait un double proche de la réponse Python de @Chas Brown , donc je peux le supprimer si nécessaire (incertain des conventions ici).
Explication
la source
Python 2 ,
8078 octetsProbablement encore quelques opportunités de golf ici
Une fonction sans nom acceptant deux entiers,
s
ete
, qui renvoie le temps de brossage.Essayez-le en ligne!
la source
Nettoyer ,
134128126 octetsEssayez-le en ligne!
Définit la fonction
$ :: Int Int -> Int
, qui trouve simplement la distance entre les deux dents sous forme de coordonnées cartésiennes. Une solution assez ennuyeuse vraiment.la source