Я ищу хороший элегантный способ навигации по дискретным шагам круга.
Итак, представьте, что вы даете стрелке часов команду двигаться по часовой стрелке или против часовой стрелки на один шаг. Начиная с 1 и двигаясь по часовой стрелке, это легко - просто добавьте один. Но когда вы достигнете 12 и добавите единицу, алгоритму нужно сбросить обратно на 1, а не на 13. Аналогичным образом, в противном случае - когда вы двигаетесь против часовой стрелки от 1, алгоритм должен переместить вас на 12, а не на ноль.
Моя первоначальная идея - использовать модуль по модулю, так что представьте 12 приращений, функция может быть такой:
new_position = ((curr_position + 12) + increment) % 12
Но это явно не касается перехода от 12-> 1 или от 12 <-1. </p>
Я уверен, что есть хороший способ сделать это ...