Wprowadzenie
Oczywiście mamy wiele wyzwań sekwencyjnych , więc oto kolejne.
Sekwencja Kimberling ( A007063 ) wygląda następująco:
1, 3, 5, 4, 10, 7, 15, 8, 20, 9, 18, 24, 31, 14, 28, 22, ...
Powstaje to przez tasowanie normalnej iteracji:
[1] 2 3 4 5 6 7 8
Pierwszy termin sekwencji to 1
. Następnie przetasujemy sekwencję, aż zostaną użyte wszystkie terminy po lewej stronie. Tasowanie ma wzór right - left - right - left - ...
. Ponieważ po lewej stronie nie ma żadnych terminów 1
, nie ma tasowania. Otrzymujemy następujące:
2 [3] 4 5 6 7 8 9
Na í th iteracji możemy odrzucić í th element i umieścić, że w naszym sekwencji. Jest to druga iteracja, więc odrzucamy drugi element. Sekwencja postać: 1, 3
. W naszej następnej iteracji pomieszamy bieżącą iterację z powyższym wzorem. Bierzemy pierwszy nieużywany przedmiot po prawej stronie i- tego przedmiotu. Tak się dzieje 4
. Dołączymy to do naszej nowej iteracji:
4
Teraz weźmiemy pierwszy nieużywany przedmiot po lewej stronie i- tego przedmiotu. Jest 2
. Dołączymy to do naszej nowej iteracji:
4 2
Ponieważ po lewej stronie i- tego elementu nie pozostały żadne elementy , dodamy resztę sekwencji do nowej iteracji:
4 2 [5] 6 7 8 9 10 11 ...
To jest nasza trzecia iteracja, więc odrzucimy trzeci przedmiot, którym jest 5
. To jest trzeci element w naszej sekwencji:
1, 3, 5
Aby uzyskać następną iterację, po prostu powtórz proces. Zrobiłem gif, jeśli nie jest jasne:
Gif zajął mi więcej czasu niż napisanie prawdziwego posta
Zadanie
- Biorąc pod uwagę nieujemną liczbę całkowitą n , wypisz pierwsze n składników sekwencji
- Możesz podać funkcję lub program
- To jest golf golfowy , więc wygrywanie z najmniejszą ilością bajtów wygrywa!
Przypadki testowe:
Input: 4
Output: 1, 3, 5, 4
Input: 8
Output: 1, 3, 5, 4, 10, 7, 15, 8
Input: 15
Output: 1, 3, 5, 4, 10, 7, 15, 8, 20, 9, 18, 24, 31, 14, 28
Uwaga: Przecinki na wyjściu nie są konieczne. Możesz na przykład użyć znaku nowej linii lub wydrukować listę itp.