Możemy zwinąć liczby naturalne w prostokątną spiralę:
17--16--15--14--13
| |
18 5---4---3 12
| | | |
19 6 1---2 11
| | |
20 7---8---9--10
|
21--22--23--24--25
Ale teraz, gdy mamy je na prostokątnej siatce, możemy rozwinąć spiralę w innej kolejności, np. Idąc zgodnie z ruchem wskazówek zegara, zaczynając na północ:
17 16--15--14--13
| | |
18 5 4---3 12
| | | | |
19 6 1 2 11
| | | |
20 7---8---9 10
| |
21--22--23--24--25
Wynikowa sekwencja jest wyraźnie permutacją liczb naturalnych:
1, 4, 3, 2, 9, 8, 7, 6, 5, 16, 15, 14, 13, 12, 11, 10, 25, 24, 23, 22, 21, 20, 19, 18, 17, ...
Twoim zadaniem jest obliczenie tej sekwencji. ( OEIS A020703 , ale ostrzeżenie spoilera: zawiera kolejną ciekawą definicję i kilka formuł, które możesz chcieć samemu wymyślić).
Ciekawostka: wszystkie 8 możliwych zamówień odwijania ma własny wpis OEIS.
Wyzwanie
Biorąc pod uwagę dodatnią liczbę całkowitą n
, zwróć n
element th powyższej sekwencji.
Możesz napisać program lub funkcję, pobierając dane wejściowe przez STDIN (lub najbliższą alternatywę), argument wiersza poleceń lub argument funkcji i wypisując wynik przez STDOUT (lub najbliższą alternatywę), wartość zwracaną funkcji lub parametr funkcji (wyjściowej).
Obowiązują standardowe zasady gry w golfa .
Przypadki testowe
1 1
2 4
3 3
4 2
5 9
6 8
7 7
8 6
9 5
100 82
111 111
633 669
1000 986
5000 4942
9802 10000
10000 9802
Aby uzyskać pełną listę, włącznie n = 11131
z plikiem b na OEIS .
źródło
jelly.py
i dowiedzieć się, które łańcuchy są obsługiwane.Japt,
201916 bajtówPrzetestuj online!
Na podstawie obserwacji, że
A raczej to
Nie wiem, czy to wyjaśnienie znajduje się na stronie OEIS, ponieważ jeszcze go nie przeglądałem.
źródło
Julia, 28 bajtów
Jest to funkcja lambda, która przyjmuje liczbę całkowitą i zwraca liczbę całkowitą. Aby go wywołać, przypisz go do zmiennej.
Definiujemy m jako największą liczbę całkowitą taką, że m 2 ≤ n -1, tj. Liczba całkowita pierwiastek kwadratowy z n -1 (
isqrt
). Następnie możemy uprościć wyrażenie OEIS 2 ( m + 1) m - n + 2 do po prostu 2 ( m 2 + m + 1) - n .Wypróbuj online
źródło
CJam, 14 bajtów
Korzystanie z podejścia Alexa:
2*(m^2+m+1)-n
gdziem = isqrt(n-1)
.źródło
ES7,
312826 bajtówNiezależnie odkryłem formułę Alexa, ale nie mogę tego udowodnić, ponieważ nie byłem wtedy w pobliżu komputera.
Edycja: Zapisano 3 bajty częściowo dzięki produktom @ETH. Zapisano kolejne 2 bajty.
źródło
n=>((m=--n**.5|0)+m*m)*2-n+1
działałoby, tak myślę.--n
...Pyth, 21 bajtów
Wypróbuj online!
Nie dzieje się nic szczególnego. Ta sama metoda, co w odpowiedzi JAPT.
źródło
MATL ,
1613 bajtówOparte na Lynn na CJam .
Wypróbuj online! (
Y[
został zastąpiony przezk
zgodnie ze zmianami języka)Wykorzystuje to inne podejście niż inne odpowiedzi ( 16 bajtów ):
Wyraźnie generuje dwie macierze spiralne (w rzeczywistości ich odwrócone w pionie wersje, ale to nie wpływa na wynik). Pierwszy to
a drugi śledzi zmodyfikowaną ścieżkę:
Aby znaleźć
n
-ty numer sekwencji, wystarczy znaleźćn
w drugiej macierzy i wybrać odpowiednią liczbę w pierwszej. Matryce muszą być wystarczająco duże, aby sięn
pojawiały i powinny mieć nieparzyste rozmiar, aby początek (liczba1
) w tym samym miejscu w obu.Wypróbuj też online ! (
6Y3
został przeniesiony zgodnie ze zmianami języka)źródło
Brachylog , 20 bajtów
Wykorzystuje tę samą technikę, co prawie wszystkie inne odpowiedzi.
Wyjaśnienie
Średnio interesującym faktem na temat tej odpowiedzi jest to, że łatwiej i krócej jest używać
=
niż nawiasów.źródło