Wprowadzenie
Sekwencja przełączania jest zdefiniowana w następujący sposób:
Zacznij od n
osób stojących w kręgu ( 6
w tym przykładzie).
1 2
6 3
5 4
Zaczynając od osoby 1
, osoba znajdująca się na lewo od „wybranej” osoby jest usuwana.
1
6 3
5 4
Osoba usunięta może „zmienić” metodę usuwania:
- Jeśli usunięta osoba jest parzysta (tak jest w tym przypadku), następna usunięta osoba będzie na prawo od następnej „wybranej” osoby.
- Jeśli usunięta osoba jest nieparzysta, następna usunięta osoba będzie na lewo od następnej „wybranej” osoby.
Kolejna wybrana osoba zależy również od poprzednio usuniętej osoby.
- Jeśli usunięta osoba jest parzysta, następna wybrana osoba będzie po prawej stronie poprzedniej wybranej osoby.
- Jeśli usunięta osoba jest nieparzysta, patrz wyżej, ale zamień „prawo” na „lewo”.
Zatem następna wybrana osoba jest 6
.
Teraz usuwamy osobę po prawej stronie 6
, czyli 5
:
1
6 3
4
Ponieważ 5
jest to dziwne, usunięta osoba jest teraz po lewej stronie. Nowa wybrana osoba to 1
.
Teraz usuwamy 3
:
1
6
4
Kontynuujemy ten proces, dopóki nie zostanie nam 1 liczba - w tym przykładzie ostatnia liczba to 1
. Tak więc S(6) = 1
.
Pierwsze kilka liczb to:
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
Zadanie
Twoim zadaniem jest stworzenie programu (lub funkcji), który zwraca S(n)
( n
numer th w sekwencji przełączania), gdy jest podany n
, przy użyciu najmniejszej ilości bajtów.
Przykładowe dane wejściowe i wyjściowe:
1 -> 1
10 -> 6
13 -> 13
Masz gwarancję uzyskania dodatniej liczby całkowitej.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach!
Uwaga: Nie ma sekwencji OEIS (co?), Aby zaoszczędzić ci kłopotu z wyszukiwaniem.
2
nigdy nie pozostaje, ale czy tak7
?Odpowiedzi:
Python 2,
18394 bajty-4 bajty dzięki Artyerowi (użyj
input()
iprint
zamiastdef
ireturn
)-1 bajt dzięki FlipTack (użyj
print-~p[0]
zamiastprint p[0]+1
)repl.it
To po prostu zgodnie z podanymi instrukcjami, zauważyłem jakiś wzorzec, może może być wykorzystany?
Jedyne zmiany to:
0
indeksowania opartego na (więc nawet ludzie są nieparzyści i odwrotnie) - pozwala to zaoszczędzić 5 bajtów w logice gry w golfa i na końcu jest poprawiane za pomocą+1
1
jako lewy i-1
prawy (aby użyć zasięgu - tak jak wszyscy zamiast tego są skierowani na zewnątrz)pop
tworzeniu listy, czyniąc indeks „wskaźnika” już krokiem w prawo na liście (lub w lewo w oryginalnej terminologii).Nie golfowany:
źródło
print-~p[0]
?