В далеком королевстве шахматная королева совершает ежедневную прогулку по спиральной дорожке, пронумерованной от 1 до n
, не заботясь о том, чтобы следовать самой спирали, а просто делает движения королевы, как она делает это на шахматной доске. Королева любима своими подданными, и они записывают каждый квадрат, который она посещает на своем пути. Учитывая, что королева может начать свою прогулку на любом квадрате и заканчивать его на любом квадрате, какой самый короткий путь королевы она может пройти?
Соревнование
Получив спираль целых чисел на прямоугольной сетке, напишите функцию, которая возвращает один из кратчайших возможных путей (подсчитанных по количеству пройденных ячеек) между двумя числами в этой спиральной сетке, используя ходы шахматной королевы.
Например, от 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
Некоторые возможные пути включают в себя 16, 4, 2, 10, 25
и 16, 5, 1, 9, 25
.
правила
- На входе будут любые два натуральных числа.
- Выходными данными будет путь целых чисел (включая обе конечные точки) по спирали с использованием только ортогональных и диагональных перемещений.
- Длина пути подсчитывается по количеству пройденных клеток.
- Ваш ответ может быть программой или функцией.
- Это код гольф, поэтому выигрывает наименьшее количество байтов.
Как всегда, если проблема неясна, пожалуйста, дайте мне знать. Удачи и хорошего гольфа!
Контрольные примеры
>>> 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