Oto pierwsze 100 liczb łatwej sekwencji:
0,1,0,2,1,4,3,7,6,11,10,16,15,22,21,29,28,37,36,46,45,56,55,67,66,79,78,92,91,106,105,121,120,137,136,154,153,172,171,191,190,211,210,232,231,254,253,277,276,301,300,326,325,352,351,379,378,407,406,436,435,466,465,497,496,529,528,562,561,596,595,631,630,667,666,704,703,742,741,781,780,821,820,862,861,904,903,947,946,991,990,1036,1035,1082,1081,1129,1128,1177,1176,1226
Jak działa ta sekwencja?
n: 0 1 2 3 4 5 6 7 8 9 10 11 12
0, 1-1=0, 2-1=1, 4-1=3, 7-1=6, 11-1=10, 16-1=15,
0+1=1, 0+2=2, 1+3=4, 3+4=7, 6+5=11, 10+6=16, 15+7=22
a(0) = 0
- Dla każdego nieparzystego
n
(indeksowanego 0) jesta(n-1) + X
(gdzieX=1
i rośnie o 1 za każdym razem, gdy jest uzyskiwany dostęp) - Dla każdego parzystego
n
(indeksowane 0) jesta(n-1) - 1
Wyzwanie:
Jeden z:
- Biorąc pod uwagę całkowitą liczbę wejściową
n
,n
wypisz liczbę w sekwencji. - Biorąc podaną liczbę całkowitą wejściową
n
, wypisz pierwszen
liczby sekwencji. - Wyprowadza sekwencję w nieskończoność bez wprowadzania danych wejściowych ( lub przyjmowania pustych nieużywanych danych wejściowych ).
Zasady konkursu:
- Dane wejściowe
n
mogą być indeksowane 0 lub 1. - Jeśli wypisujesz (część) sekwencji, możesz użyć listy / tablicy, wydrukować do STDOUT z dowolnym separatorem (spacja, przecinek, nowa linia itp.). Twoja decyzja.
- Podaj, której z trzech opcji użyłeś w swojej odpowiedzi.
- Będziesz musiał obsługiwać co najmniej pierwsze 10 000 numerów (10 000 to liczba
12,497,501
).
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Obowiązują standardowe zasadyDo odpowiedzi , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- Jeśli to możliwe, dodaj wyjaśnienie.
Przypadki testowe:
Wklejanie z pierwszymi 10,001 liczbami w sekwencji.Wybierz dowolne.
Niektóre wyższe liczby:
n (0-indexed) Output:
68,690 589,772,340
100,000 1,249,975,000
162,207 3,288,888,857
453,271 25,681,824,931
888,888 98,765,012,346
1,000,000 124,999,750,000
ÎGDN+D<
generuje sekwencję, ale chwytanie n-tego elementu wydaje się ... trudne w 3 bajtach.Oktawa , 32 bajty
Wypróbuj online!
Zwraca n-tą liczbę, indeksowaną przez 0. Używa tej samej formuły, co kilka innych odpowiedzi.
źródło
APL (Dyalog Unicode) ,
1612 bajtów SBCSAnonimowa ukryta funkcja prefiksu. 0-indeksowane.
Wypróbuj online!
+/
suma⊢↑
pierwszyn
elementy∘∊
z ϵ nlistowanych (spłaszczonych)¯1,¨⍨
negatyw-jeden-dołączony do każdego⍳
pierwszen
d ndices (od 0 don
–1źródło
Galaretka , 6 bajtów
Link monadyczny akceptuje (1-indeksowany),
n
który zwracaa(n)
.Wypróbuj online! Lub zobacz zestaw testowy
W jaki sposób?
źródło
PHP ,
7364555147 bajtówPierwsza metoda
Pierwsza odpowiedź na golfa!
Jestem pewien, że istnieją sztuczki PHP, które skracają czas, a matematykę można prawdopodobnie poprawić.
Bierze n jako pierwszy argument i zwraca n-tą liczbę w sekwencji.
Minus 9 bajtów poprzez usunięcie „$ x = 0;” i „$ i = 0”.
Minus 9 bajtów dzięki @Kevin Cruijssen poprawiając pętlę for i utratę tagu końcowego.
Minus 1 bajt przy użyciu bitowego lub „|” zamiast „(int)”
Minus 3 bajty dzięki @Dennis, ponieważ możesz usunąć tagi, uruchamiając go z wiersza polecenia z kodem „php -r” tutaj ”
Wypróbuj online!
Druga metoda
Dopasowałem moją poprzednią odpowiedź z zupełnie nową metodą!
Używanie XOR i operatora tenary do przełączania między sumami w pętli.
Edycja: To nie działa dla n = 0 i nie mam pojęcia, dlaczego. $ i nie jest przypisane, więc powinno mieć wartość 0, dlatego pętla
($i<$argv[1])
powinna zawieść jako(0<0==false)
, dlatego nieprzypisane $ x powinno być wyprowadzane jako 0, a nie 1.Wypróbuj online!
Trzecia metoda
Konwersja formuły excel @Wernisch utworzonej na PHP daje 47-bajtowe rozwiązanie
Wypróbuj online!
źródło
?>
. Usunięcie$x=0
i$i=0
rzeczywiście jest dozwolone (jeśli nie,$x=$i=0
byłoby również krótsze). Pętlę można również skrócićfor(;$i<$y+1;)$x+=$i++;
. Co łącznie wynosi -15 bajtów. Miłego pobytu! :)R , 35 bajtów
Wypróbuj online!
Myślałem, że to interesująca alternatywa dla odpowiedzi @ JayCe ponieważ nie jest zbyt dobrze przystosowana do języków bez wbudowanej obsługi matryc, a zdarza się, że jest równie golfowa.
1-indeksowany, zwraca pierwsze
n
elementy sekwencji.Jak to działa:
rbind(n<-1:scan(),-1)
konstruuje następującą macierz:Ponieważ R utrzymuje macierze w porządku głównym kolumny, gdybyśmy przekonwertowali to na a
vector
, otrzymalibyśmy wektorktóre, gdybyśmy wzięli łączną sumę, otrzymalibyśmy
która jest sekwencją, tylko bez prowadzenia
0
.diffinv
na szczęście dodaje wiodące zero, więc bierzemy pierwszen-1
wartości z macierzy idiffinv
je, uzyskując pierwszen
wartości sekwencji.źródło
diffinv
się mi!R ,
3534 bajtówWypróbuj online!
Pierwsza opcja wyjściowa. Taka sama formuła, jak wiele innych odpowiedzi (chciałbym wskazać pierwszą odpowiedź podającą formułę, nie wiem, która to jest).
Druga i trzecia opcja wyjścia poniżej:
R , 43 bajty
Wypróbuj online!
R , 51 bajtów
Wypróbuj online!
źródło
Matlab / Octave,
3126 bajtów5 bajtów zaoszczędzonych dzięki Luisowi Mendo!
źródło
fix
zamiastfloor
in/2+.5
zamiastceil(n/2)
fix()
i nie spodziewałem1:n/2+.5
się, że zadziała - tak wiele rzeczy może się nie udać, ale tak naprawdę nie :)Java (JDK 10) , 20 bajtów
Wypróbuj online!
Port of TFeld's anwser Python 2 , więc idź, daj im upvote! ;)
źródło
QBasic 1.1 , 49 bajtów
1-indeksowany.
źródło
QBasic 1.1 , 30 bajtów
Wykorzystuje algorytm TFeld. 0-indeksowane.
źródło
QBasic, 31 bajtów
Rozwiązanie „tylko zaimplementuj specyfikację” jest nieco dłuższe niż rozwiązanie Erika .
To daje wynik w nieskończoność. Na potrzeby uruchomienia polecam zmienić ostatnią linię na coś podobnego
LOOP WHILE INPUT$(1) <> "q"
, co będzie czekać na naciśnięcie klawisza po co drugim wpisie sekwencji i wyjdzie, jeśli klawisz jest wciśniętyq
.źródło
C # (.NET Core) , 56 bajtów
-2 bajty dzięki Kevin Crujssen
Wypróbuj online!
1 indeksowany. Zwroty
a(n)
Ungolf'd:
źródło
i=1;for(;i<n;i++)
może byći=0;for(;++i<n;)
ii%2==0
może byći%2<1
.do-while
sprawdzi po zakończeniu pierwszej iteracji. :)if
zfor
-loop. Na przykład:if(t>0)for(i=0;i<l;i++)
dofor(i=0;t>0&i<l;i++)
. Jednak prawie nigdy nie byłem w stanie użyć tego w moich odpowiedziach.Łuska ,
1198 bajtówZapisano bajt dzięki H.PWiz.
Wyprowadza jako nieskończoną listę.
Wypróbuj online!
Wyjaśnienie
źródło
Dodos , 69 bajtów
Wypróbuj online!
Jakoś to najdłuższa odpowiedź.
Wyjaśnienie.
źródło
Węgiel drzewny , 15 bajtów
Wypróbuj online! 0-indeksowane. Link jest do pełnej wersji kodu. Formuła byłaby prawdopodobnie krótsza, ale jaka jest w tym zabawa? Wyjaśnienie:
źródło
JavaScript,
494845 bajtówWypróbuj online!
Nie tak ładna jak odpowiedź @tsh, ale moja działa dla większej liczby.
A teraz dziękuję @tsh za
eval
rozwiązanie!źródło
<=x+1
może być<x+2
x=>eval('for(i=0,r=1;++i<x+2;)r+=i%2?-1:i/2')
powinien być krótszy.eval
zwraca ostatnią zmodyfikowaną wartość? Nadal nie do końca rozumiem, co może zrobić.do
instrukcji w późniejszej wersji).Befunge 93, 26 bajtów
Działa w nieskończoność
Wypróbuj w trybie online , chociaż dane wyjściowe stają się nieco niepewne i zmniejszają się po x = 256, prawdopodobnie TIO nie obsługuje znaków powyżej U + 256. Działa dobrze na https://www.bedroomlan.org/tools/befunge-playground (niestety tylko Chrome. W Firefoksie linie końcowe są usuwane w czasie wykonywania, z jakiegoś powodu ...)
źródło
J , 17 bajtów
Port rozwiązania APL firmy Adám.
Wypróbuj online!
źródło
Pyth , 8 bajtów
Zwraca
n
liczbę w sekwencji 0-indeksowaną. Wypróbuj onlineObjaśnienie, na przykład dla
n=5
:źródło
Perl 6 ,
3826 bajtówSpróbuj
Na podstawie odpowiedzi w Pythonie na inżynierię odwrotną TFeld .
Spróbuj
Rozszerzony
38 bajtów (generator sekwencji):
Zauważ, że ma to tę zaletę, że możesz przekazać,
*
aby uzyskać całą sekwencję, lub przekazać w zakresie, aby bardziej efektywnie wygenerować wiele wartości.26 bajtów (bezpośrednie obliczenie):
źródło
05AB1E , 8 bajtów
Wypróbuj online!
W oparciu o podejście Jelathana Jonathana Allana (które prawdopodobnie opierało się na edycji przez OP pytania z inną definicją sekwencji), więc 1-indeksowane.
źródło
I
zamiast¹
), ale ogólne podejście i liczba bajtów są dokładnie takie same:;<LO>IÉ-
Wypukły ,
109 bajtówWypróbuj online!
Na podstawie podejścia Jelathana Jonathana Allana (które prawdopodobnie opierało się na edycji przez OP pytania z inną definicją sekwencji). 1-indeksowany.
Wyjaśnienie:
źródło
Galaretka , 6 bajtów
Zwróć pierwsze
n
cyfry.Wypróbuj online!
źródło