Вступ
Послідовність комутації визначається так:
Почніть з 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
числом у послідовності комутації) при наданні n
, використовуючи найменшу кількість байтів.
Приклади входів і виходів:
1 -> 1
10 -> 6
13 -> 13
Ви гарантовано отримаєте додатне ціле число.
Це код-гольф , тому найкоротший код у байтах виграє!
Примітка. Немає послідовності OEIS (що?), Щоб заощадити проблеми пошуку.
2
ніколи не залишається, але чи так 7
?