вступление
Последовательность переключения определяется следующим образом:
Начните с n
людей, стоящих в кругу ( 6
для этого примера).
1 2
6 3
5 4
Начиная с человека 1
, человек, который находится слева от «выбранного» человека, удаляется.
1
6 3
5 4
Удаленный человек может «переключить» метод удаления вверх:
- Если удаленный человек четный (что в данном случае), следующий удаленный будет справа от следующего «выбранного» человека.
- Если удаленный человек нечетный, следующий удаленный человек будет слева от следующего «выбранного» человека.
Следующий выбранный человек также зависит от ранее удаленного человека.
- Если удаленный человек четный, следующий выбранный человек будет справа от предыдущего выбранного человека.
- Если удаленный человек странный, см. Выше, но замените «правый» на «левый».
Таким образом, следующий выбранный человек тогда 6
.
Теперь мы удаляем человека справа 6
, который является 5
:
1
6 3
4
Потому 5
что странно, удаленный человек теперь слева. Новый выбранный человек есть 1
.
Теперь мы удалим 3
:
1
6
4
Мы продолжаем этот процесс до тех пор, пока у нас не останется 1 номер - в этом примере последний номер - 1
. Итак, поэтому S(6) = 1
.
Первые несколько чисел:
n | S(n)
---------
1 | 1
2 | 1
3 | 3
4 | 1
5 | 5
6 | 1
7 | 3
8 | 6
9 | 5
10 | 6
11 | 9
задача
Ваша задача - создать программу (или функцию), которая будет возвращать S(n)
(число n
th в последовательности переключения), когда дано n
, используя наименьшее количество байтов.
Пример входов и выходов:
1 -> 1
10 -> 6
13 -> 13
Вы гарантированно получите положительное целое число.
Это код-гольф , поэтому выигрывает самый короткий код в байтах!
Примечание: нет последовательности OEIS (что?), Чтобы избавить вас от необходимости поиска.
2
никогда не остается, но делает 7
?