Biorąc pod uwagę N, wypisz N-ty składnik tej nieskończonej sekwencji:
-1 2 -2 1 -3 4 -4 3 -5 6 -6 5 -7 8 -8 7 -9 10 -10 9 -11 12 -12 11 ... etc.
N może być 0-indeksowany lub 1-indeksowany, jak chcesz.
Na przykład, jeśli 0 indeksowane następnie wejść 0
, 1
, 2
, 3
, 4
powinien wywoływać odpowiednie wyjścia -1
, 2
, -2
, 1
, -3
.
Jeśli jeden indeksowane następnie wejść 1
, 2
, 3
, 4
, 5
powinien wywoływać odpowiednie wyjścia -1
, 2
, -2
, 1
, -3
.
Aby być jasnym, sekwencję tę generuje się, biorąc sekwencję dodatnich liczb całkowitych powtórzonych dwukrotnie
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 ...
i przestawienie każdej pary liczb nieparzystych tak, aby otaczały liczby parzyste tuż nad nią
1 2 2 1 3 4 4 3 5 6 6 5 7 8 8 7 9 10 10 9 11 12 12 11 ...
i wreszcie negując każdy inny termin, zaczynając od pierwszego
-1 2 -2 1 -3 4 -4 3 -5 6 -6 5 -7 8 -8 7 -9 10 -10 9 -11 12 -12 11 ...
Najkrótszy kod w bajtach wygrywa.
1,1,2,2,3,3,4,4,...
ale oto jest1,2,2,1,3,4,4,3,...
.Odpowiedzi:
Python 2 , 23 bajty
Dziwne dane wejściowe dają z grubsza
n/2
, nawet te z grubsza-n/2
. Zacząłem więc od tego-n/2+n%2*n
i poprawiałem.Wypróbuj online!
źródło
Mathematica, 29 bajtów
Czysta funkcja pobierająca 1-indeksowany sygnał wejściowy. Oprócz znaków naprzemiennych podwójna
(-1)^#
sekwencja jest zbliżona do wejścia, przy czym różnice wynoszą 1, 2, 1, -2 cyklicznie. Fajnie, że#~GCD~4
największy wspólny dzielnik wejścia i4
wynosi 1, 2, 1, 4 cyklicznie; więc po prostu ręcznie zastępujemy4->-2
i nazywamy to dniem. Podoba mi się to podejście, ponieważ pozwala uniknąć większości wieloznakowych poleceń Mathematica.źródło
Pip ,
2422 bajtyPobiera dane wejściowe, indeksowane 1, jako argument wiersza polecenia. Wypróbuj online lub sprawdź 1-20 .
Wyjaśnienie
Zauważ, że sekwencję można uzyskać, łącząc trzy inne sekwencje, jedną indeksowaną zerowo, a drugą indeksowaną:
0 0 0 0 2 2 2 2 4 4 4 4
=a//4*2
(indeksowane 0);1 2 2 1 1 2 2 1 1 2 2 1
=aBA2|1
, gdzieBA
jest bitowe ORAZ i|
jest logiczne LUB (indeksowane 1);-1 1 -1 1 -1 1 -1 1 -1 1 -1 1
=(-1)**a
(indeksowane 1).Jeśli zaczniemy od
a
1-indeksowanego, możemy najpierw obliczyć 1-indeksowane części (czytając wyrażenie od lewej do prawej), a następnie zmniejszyća
dla części 0-indeksowanej. Używając wbudowanej zmiennejv=-1
, otrzymujemyAby ogolić jeszcze dwa bajty, musimy zastosować pewne sztuczki polegające na manipulowaniu priorytetami. Możemy wyeliminować wewnętrzne nawiasy, zastępując
+
je+:
(odpowiednik+=
w wielu językach). Każdy operator obliczania i przypisywania ma bardzo niski priorytet, więcaBA2|1+:--a//4*2
jest równoważny z(aBA2|1)+:(--a//4*2)
. Pip wyśle ostrzeżenie o przypisaniu do czegoś, co nie jest zmienną, ale tylko jeśli mamy włączone ostrzeżenia.Jedyną rzeczą, która jest niższy priorytet niż
:
aktualnie się znajdujeY
, operator Yank * Przypisuje wartość jego operand jest do.y
Zmiennej i przekazuje ją poprzez niezmienione; więc możemy wyeliminować zewnętrzne nawiasy, jak również przez szarpiąc wartość aniżeli parenthesizing go:YaBA2|1+:--a//4*2
.*
P
rint iO
utput mają taki sam priorytet jakY
ank, ale tutaj nie są przydatne.źródło
Galaretka ,
87 bajtówWykorzystuje algorytm z mojej odpowiedzi w Pythonie , który został znacznie ulepszony przez @GB .
Wypróbuj online!
Jak to działa
źródło
¡
)Java 8, 19 bajtów
Java 7,
4737 bajtówPierwszy raz Java (8) faktycznie konkuruje i jest krótsza niż niektóre inne odpowiedzi. Nadal nie mogę pokonać prawdziwych języków golfowych, takich jak Jelly i podobne (duhuh .. co za niespodzianka ..>.>; P)
0-indeksowany
port z odpowiedzi @Xnor na Python 2 .
-10 bajtów dzięki @GB
Wypróbuj tutaj.
źródło
Galaretka ,
151211 bajtówWypróbuj online!
Jak to działa
źródło
RProgN 2 ,
312522 bajtówWyjaśnił
Wypróbuj online!
źródło
Rubin,
26 2318 bajtówW oparciu o 0
-3 bajty kradnące pomysł -1 ^ n od Grega Martina , Dennisa i może kogoś innego, a następnie -5 bajty kradnące pomysł n | 2 od xnor .
źródło
Skumulowane ,
3028 bajtówWypróbuj online! Zwraca funkcję, która zgodnie z meta consensus. . Pobiera dane wejściowe z góry stosu.
Stosując to samo podejście, co odpowiedź RProgN 2 .
Alternatywnie 46 bajtów. Wypróbuj online! :
Ten generuje zakres, a następnie odpowiednio wybiera i neguje element członkowski.
źródło
Python 2 ,
443327 bajtówDzięki @GB za grę w golfa z 6 bajtów!
Wypróbuj online!
źródło
05AB1E, 8 bajtów
Wypróbuj online
Wyjaśnienie
źródło
¹F(
wydaje się kosztowne dla „jeśli dziwne, neguj”.n
, potęgi1/n
.Galaretka ,
98 bajtówWypróbuj online!
-1 dzięki Dennisowi . Konwersje typu float.
Wykorzystuje podejście Python 2 @ xnor.
EDYCJA : > _>
źródło
|2×Ḃ+H~$
zapisuje bajt. tio.run/nexus/jelly#AR0A4v//fDLDl@G4gitIfiT/…CJam , 16 bajtów
1 wejście.
Wypróbuj online!
Wyjaśnienie
Oto podział kodu z wartościami na stosie dla każdego wejścia od
1
do4
. Kilka pierwszych poleceń wpływa tylko na dwa najmniej znaczące bity,n-1
więc po4
prostu powtarzają się cyklicznie, a wyniki są zwiększane o 2, ze względu na połowę.źródło
Perl 6 ,
55 27 2422 bajtów(Zainspirowany
zipWith
odpowiedzią Haskell )Spróbuj
(Zainspirowany kilkoma odpowiedziami)
Spróbuj
Spróbuj
Spróbuj
Rozszerzony:
(Wszystkie są oparte na 0)
źródło
Haskell ,
3736 bajtówWypróbuj online! Jest to anonimowa funkcja, która przyjmuje jedną liczbę
n
jako argument i zwraca indeksowany jako 0n
element th sekwencji.źródło
Haskell, 56 bajtów
0-indeksowane
źródło
Perl 5 47 + 1 (dla flagi) = 48 bajtów
Stare zgłoszenie 82 bajtów
Uruchom tak:
źródło
print +((
i usuwając końcowy)
. I jeszcze dwa za pomocąsay
i-E
. I jeszcze jeden, wykonując($_%4&1||-1)
zamiast trójskładnikowego.JavaScript (ES7), 28 bajtów
1-indeksowany. Nie szukałem jeszcze żadnych odpowiedzi, więc nie wiem, czy to najlepszy algorytm, ale podejrzewam, że nie.
źródło
JavaScript,
2822 bajtówDzięki @ETHproductions za grę w golfa przy 6 bajtach
Wypróbuj online!
źródło
f=x=>x%2?~x>>1:x/2+x%4-1
działałoby?dc , 98 bajtów
Ojej, tutaj jest najdłuższa odpowiedź, głównie dlatego, że poszedłem ścieżką generowania wartości bezwzględnej każdego elementu sekwencji jeden po drugim w oparciu o następującą rekurencyjną formułę:
następnie generowanie
(-1)^n * a_n
, zamiast bezpośredniego obliczanian
tego elementu. W każdym razie jest to1
indeksowane.Wypróbuj online!
źródło
R, 38 bajtów
Wyjaśnienie
źródło
TI-Basic (TI-84 Plus CE), 31 bajtów
TI-Basic jest tokenizowanym językiem, a każdy token tutaj użyty ma jeden bajt, z wyjątkiem
remainder(
dwóch.To używa wersji z 1 indeksowaniem.
Wyjaśnienie:
Istnieje wzorzec, który powtarza się co cztery cyfry. W wersji 1-indeksowanej jest to: - (x + 1) / 2, (x + 1) / 2, - (x + 1) / 2, (x-1) / 2 dla wartości wejściowej x. Można to przedstawić jako funkcję zdefiniowaną w części.
f (x) = - (x + 1) / 2, jeżeli x ≡ 1 mod 4; (x + 1) / 2, jeśli x ≡ 2 mod 4; - (x + 1) / 2, jeżeli x ≡ 3 mod 4; (x-1) / 2, jeśli x ≡ 0 mod 4
Ponieważ części „x ≡ 1 mod 4” i „x ≡ 3 mod 4” są takie same, możemy połączyć je w „x ≡ 1 mod 2”.
Teraz są podzielone na funkcje:
f (x) = - (x + 1) / 2, jeżeli x ≡ 1 mod 2; (x + 2) / 2, jeśli x ≡ 2 mod 4; (x-2) / 2, jeśli x ≡ 0 mod 4
W tym miejscu zaczynam dzielić je na rzeczywiste polecenia. Ponieważ wartość jest dodatnia dla indeksów parzystych i ujemna dla indeksów nieparzystych, możemy użyć (-1) ^ x. Jednak w TI-Basic
i^(2X
(5 bajtów) jest krótszy niż(-1)^Ans
(6 bajtów). Pamiętaj, że nawiasy są wymagane ze względu na kolejność operacji.Teraz, gdy mamy sposób na zanegowanie nieparzystych danych wejściowych, przechodzimy do modów (dodając negację później). Ustawiłem przypadek nieparzystego wejścia jako domyślny, więc zaczynamy od
.5(Ans+1)
.Aby naprawić przypadek parzystego wprowadzania, po prostu dodaj jeden do liczby w nawiasach, ale tylko wtedy, gdy x ≡ 0 mod 2. Może to być reprezentowane jako
.5(Ans+1+remainder(Ans+1,2))
lub.5(Ans+1+not(remainder(Ans,2)))
, ale mają taką samą liczbę bajtów, więc nie ma znaczenia, który.Aby naprawić przypadek wejścia wielokrotnego z 4, musimy odjąć 3 od liczby w nawiasach, ale także kolejny 1, ponieważ wszystkie wielokrotności 4 są parzyste, co dodałoby jeden z naszego poprzedniego kroku, więc teraz mamy
.5(Ans+1+remainder(Ans+1,2)-4not(remainder(Ans,4)))
.Teraz wystarczy przyłożyć część oznaczającą znak do końca, aby uzyskać pełny program.
źródło
Befunge 93, 25 bajtów
Zero indeksowane
Wypróbuj online!
Numer ten podaje
((2(n / 4) + 1) + !!((n % 4) % 3)) * (2(n % 2) - 1)
źródło
QBIC , 53 bajty
Wyjaśnienie:
źródło
Mądry , 19 bajtów
Wypróbuj online!
To tylko część odpowiedzi Jelly @Dennis na Wise.
źródło
Q, 52 bajty
0 indeksowane rozwiązanie.
źródło