Dans un royaume lointain, une reine d'échecs fait une promenade quotidienne à travers un chemin en spirale, numéroté de 1 à n
, ne se souciant pas de suivre la spirale elle-même, mais faisant simplement les mouvements de la reine comme elle le ferait sur un échiquier. La reine est aimée de ses sujets, et ils notent chaque case qu'elle visite sur son chemin. Étant donné que la reine peut commencer sa marche sur n'importe quelle case et la terminer sur n'importe quelle case, quelle est la marche de la reine la plus courte qu'elle peut faire?
Le défi
Étant donné une spirale d'entiers sur une grille rectangulaire, écrivez une fonction qui renvoie l'une des plus courtes chemins possibles (compté par le nombre de cellules parcourues) entre deux nombres sur cette grille en spirale en utilisant les mouvements d'une reine d'échecs.
Par exemple, de 16
à 25
:
25 10 11 12 13
24 9 2 3 14
23 8 1 4 15
22 7 6 5 16
21 20 19 18 17
Certains chemins possibles incluent 16, 4, 2, 10, 25
et 16, 5, 1, 9, 25
.
Règles
- L'entrée sera constituée de deux entiers positifs.
- La sortie sera un chemin d'entiers (y compris les deux extrémités) à travers la spirale en utilisant uniquement des mouvements orthogonaux et diagonaux.
- La longueur d'un chemin est comptée par le nombre de cellules parcourues.
- Votre réponse peut être un programme ou une fonction.
- C'est le golf de code, donc le plus petit nombre d'octets gagne.
Comme toujours, si le problème n'est pas clair, faites-le moi savoir. Bonne chance et bon golf!
Cas de test
>>> queen_spiral(4, 5)
4, 5
>>> queen_spiral(13, 20)
13, 3, 1, 7, 20
>>> queen_spiral(14, 14)
14
>>> queen_spiral(10, 3)
10, 11, 3
>>> queen_spiral(16, 25)
16, 4, 2, 10, 25
>>> queen_spiral(80, 1)
80, 48, 24, 8, 1