вступление
Последовательность переключения определяется следующим образом:
Начните с 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
?Ответы:
Python 2,
18394 байта-4 байт благодаря Artyer (использование
input()
иprint
вместо того ,def
иreturn
)-1 байт благодаря FlipTack (использование
print-~p[0]
вместоprint p[0]+1
)repl.it
Это просто следует приведенным инструкциям, я заметил какой-то шаблон, может быть, его можно использовать?
Единственные изменения:
0
основанную индексацию (чтобы четные люди были нечетными и наоборот) - это экономит 5 байтов в логике игры в гольф и в конце исправляется+1
1
как влево, так и-1
вправо (использовать диапазон - так же, как все обращены наружу)pop
из списка, сделав индекс «указатель» уже первым шагом вправо в списке (или слева в исходной терминологии).Ungolfed:
источник
print-~p[0]
?