Wejście:
Liczba całkowita, n
która jest >=0
lub >=1
( f(0)
jest opcjonalna)
Wynik:
n
-Tym liczba w poniższej sekwencji, lub sekwencję do i włącznie z n
-tym liczbę.
Sekwencja:
(0),1,-1,-3,0,5,-1,-7,0,9,-1,-11,0,13,-1,-15,0,17,-1,-19,0,21,-1,-23,0,25,-1,-27,0,29,-1,-31,0,33,-1,-35,0,37,-1,-39,0,41,-1,-43,0,45,-1,-47,0,49,-1,-51,0,53,-1,-55,0,57,-1,-59,0,61,-1,-63,0,65,-1,-67,0,69,-1,-71,0,73,-1,-75,0,77,-1,-79,0,81,-1,-83,0,85,-1,-87,0,89,-1,-91,0,93,-1,-95,0,97,-1,-99
Jak zbudowana jest ta sekwencja?
f(n=0) = 0
(opcjonalnie)
f(n=1) = f(0) + n
lub f(n=1) = 1
f(n=2) = f(1) - n
f(n=3) = f(2) * n
f(n=4) = f(3) / n
f(n=5) = f(4) + n
itp.
Lub w pseudokodzie:
function f(integer n){
Integer result = 0
Integer i = 1
Loop as long as i is smaller than or equal to n
{
if i modulo-4 is 1:
result = result plus i
if i modulo-4 is 2 instead:
result = result minus i
if i modulo-4 is 3 instead:
result = result multiplied with i
if i modulo-4 is 0 instead:
result = result integer/floor-divided with i
i = i plus 1
}
return result
}
Ale, jak mogłeś zauważyć, w sekwencji występują dwa wzorce:
0, ,-1, ,0, ,-1, ,0, ,-1, ,0, ,-1, ,0, ,-1, ,...
,1, ,-3, ,5, ,-7, ,9, ,-11, ,13, ,-15, ,17, ,-19,...
więc wszelkie inne podejścia prowadzące do tej samej sekwencji są oczywiście całkowicie w porządku.
Zasady konkursu:
- Wejścia indeksowane 0 i indeksowane 1 będą dawać ten sam wynik (dlatego
f(0)
jest opcjonalny dla wejść indeksowanych 0, jeśli chcesz je uwzględnić). - Możesz wypisać
n
dziesiąty numer tej sekwencji. Lub cała sekwencja w górę, włączając wn
to liczbę. (Więcf(5)
może dać albo5
albo0,1,-1,-3,0,5
.)- Jeśli zdecydujesz się wyprowadzić sekwencję do
n
liczby włącznie , format wyjściowy jest elastyczny. Może być łańcuchem ograniczającym listę / tablicę, przecinek / spację / znak nowej linii lub może być drukowany do STDOUT itp.
- Jeśli zdecydujesz się wyprowadzić sekwencję do
- Divide (
/
) to dzielenie liczby całkowitej / podłogi, które zaokrągla w kierunku 0 (nie w kierunku ujemnej nieskończoności, jak ma to miejsce w niektórych językach).
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki kod-golfowe 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. - Do odpowiedzi mają zastosowanie standardowe reguły , 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.
- W razie potrzeby dodaj również wyjaśnienie.
Dodatkowe przypadki testowe powyżej n=100
:
Input Output
1000 0
100000 0
123 -123
1234 -1
12345 12345
123456 0
Odpowiedzi:
JavaScript (ES6), 19 bajtów
Wypróbuj online!
Dowód
Załóżmy, że mamy następujące relacje dla kilku n wielokrotności 4. Te relacje są trywialnie weryfikowane dla pierwszych składników sekwencji.
I niech N = n + 4 . Następnie z definicji:
Co przez indukcję matematyczną dowodzi, że relacje zachodzą dla dowolnej N wielokrotności 4 .
źródło
n%4
później, aby działał z liczbami większymi niż 32-bit.05AB1E , 8 bajtów
Zwraca
nth
liczbęWypróbuj online!
05AB1E , 14 bajtów
Wysyła listę liczb do N przy użyciu wzorców w sekwencji
Wypróbuj online!
Wyjaśnienie
Przykład z użyciem N = 7
źródło
Python 2 , 25 bajtów
Odpowiedź Portu Arnaulda:
Wypróbuj online!
Naiwne rozwiązania:
Python 3 ,
5049 bajtówWypróbuj online!
Python 2 ,
78777658575352 bajtyWypróbuj online!
Użyłem kilku bajtów
int
, ponieważ podłoga python dzieli się, a nie w kierunku0
, jak w pytaniu.źródło
J , 12 bajtów
Odpowiedź Portu Arnaulda:
Wypróbuj online!
J , 28 bajtów
Naiwne rozwiązanie:
Zwraca n-tą liczbę
Wypróbuj online!
źródło
TIS
-n
2
1
, 123 bajtyZwraca
n
liczbę th dla0 <= n <= 999
. (Górny limit wynika z ograniczeń językowych).Wypróbuj online!
TIS
-n
2
1
, 124 bajtyZwraca
n
liczbę th dla0 <= n <= 999
. (Górny limit wynika z ograniczeń językowych).n
Można podać wiele , oddzielonych spacjami.Wypróbuj online!
TIS
-n
3
1
, 192 bajtyZwraca wartości
0..n
dla0 <= n <= 999
. (Górny limit wynika z ograniczeń językowych).Wypróbuj online!
Wszystkie używają numerycznych we / wy (
-n
flaga). Pierwsze dwa rozwiązania wykorzystują dwa węzły obliczeniowe, jeden umieszczony nad drugim. Trzeci ma stos trzech węzłów.W przypadku dwóch pierwszych rozwiązań górny węzeł odczytuje dane wejściowe, wysyła pierwotną liczbę, a następnie kilkakrotnie odejmuje 4, aż osiągniemy wartość ujemną, a następnie dodaje 5 do indeksu dla naszej tabeli skoków. Jest to równoważne z
(n % 4) + 1
.Trzecie rozwiązanie podzieliło to zadanie na dwa węzły; górny po prostu powtarza limit do końca czasu, a środkowy węzeł zlicza równolegle indeks (w porównaniu z tym limitem) i moduł jak wyżej.
Dolny węzeł wszystkich trzech rozwiązań jest taki sam; ma stół do skoków i tam właśnie dzieje się magia. Przechowujemy w oryginalny numer
ACC
, a następnieJRO
(prawdopodobnie J UMP R elativus O ffset) do przodu przez1
,2
,3
lub4
, w zależności od tego, co powyżej węzeł mówi.Praca wstecz:
4
będzie a )NEG
zjadłACC
, i b )ACC
zejść w dół do produkcji.3
umieści1
sięACC
, a następnie przeprowadzić etapy i b .4
4
2
przejdzie bezpośrednio do kroku4
b .1
będzieSUB
TractACC
od siebie (w praktyce zerowaniaACC
), a następnie do etapu2
, który przeskakuje do4
b .źródło
C (gcc) , 62 bajty
Wypróbuj online!
źródło
f(n){n=n%2>0?n*(2-n%4):n%4/-2;}
Dodałbym to jako drugą odpowiedź, ponieważ podoba mi się również twoje podejście rekurencyjne. :)Galaretka , 8 bajtów
Wypróbuj online!
-1 dzięki Lynn .
Obsługuje to, co robią inni (port rozwiązania Arnauld)
0
.Galaretka , 17 bajtów
Wypróbuj online!
0
nie jest wspierany.źródło
Java (JDK 10) , 25 bajtów
Wypróbuj online!
Krótszy niż algorytm rywala w innych językach z 28 bajtami
Wypróbuj online!
źródło
Siatkówka , 46 bajtów
Wypróbuj online! Wyjaśnienie:
Konwertuj na unary.
Konwertuj z powrotem na dziesiętne, ale pozostaw
n%4+1
podkreślenia.W przypadku, gdy jest to 4, wynik jest następujący
-n
.Przypadek 3:
-1
Przypadek 2:
n
Przypadek 1:
0
źródło
Haskell , 50 bajtów
Wypróbuj online!
Rozwiązanie Arnaulda przeniesione do Haskell ma 23 bajty:
źródło
APL (Dyalog Classic) ,
2212 bajtówOgromne 10 bajtów uratowanych dzięki uwagom Erika, Outgolfera. Dziękuję Ci!
Wypróbuj online!
Zwraca n-tą liczbę
Nie znam APL-a, po prostu starałem się, aby mój port J rozwiązania Arnaulda działał w Dyalog APL.
źródło
(0,⍵,¯1,-⍵)
z(0⍵¯1,-⍵)
. 2) Możesz usunąć1+
, zakładając, że⎕IO
zmienna systemowa jest przypisana do0
(tak, to dozwolone). 3) Zazwyczaj nie liczymy tejf←
części podczas przesyłania funkcji. 4) Możesz użyć tej⊃
funkcji zamiast[]
indeksowania. Wszyscy razem tworzą to:⎕IO←0
(nie licz tego){(4|⍵)⊃0⍵¯1,-⍵}
4∘|⊃0,⊢,¯1,-
.4∘|⊃0,⊢,¯1,-
jest dokładnie to, jak wyglądałoby moje rozwiązanie J4&|{0,],_1,-
w APL. Dzięki jeszcze raz!Cubix ,
2019 bajtówWypróbuj online!
Przenosi takie samo podejście do cubix.
Na sześcianie:
Pierwszy bit
^Iu:n>s1ns:u0s
buduje stos, a następnie3at
kopiuje odpowiedni element do TOS, a następnieO
wysyła i@
kończy program.źródło
Biała spacja,
8483 bajtówDodane litery
S
(spacja),T
(tab) iN
(nowa linia) tylko jako wyróżnienia.[..._some_action]
dodano tylko jako wyjaśnienie.Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).
Port odpowiedzi JavaScript na @Arnauld .
Objaśnienie (przykładowe dane wejściowe
n=7
):Zatrzymuje się z błędem: nie zdefiniowano wyjścia.
źródło