Sekwencja plus-minus
Sekwencja plus-minus to taka, która zaczyna się od dwóch nasion a(0)
i b(0)
. Każda iteracja tej sekwencji jest dodawaniem i odejmowaniem poprzednich dwóch elementów sekwencji. To znaczy a(N) = a(N-1) + b(N-1)
i b(N) = a(N-1) - b(N-1)
.
Cel Wykonaj sekwencję plus-minus, w nieskończoności lub w podanych pierwszych K
krokach K
. Możesz to zrobić za pomocą nieskończonego programu wyjściowego, generatora lub funkcji / programu, który daje pierwsze K
kroki. Kolejność wyjściowa nie ma znaczenia, o ile jest spójna. (Tj. b(K) a(K)
Lub a(K) b(K)
z separatorem nieliczbowym, nie będącym znakiem nowej linii pomiędzy nimi.) Wyjście musi zaczynać się od wejścia.
Przypadki testowe
W przypadku danych wejściowych 10 2
(z a(0) b(0)
jest to możliwe wyjście dla pierwszego podejścia K (lub podsekcji podejścia nieskończonego):
10 2
12 8
20 4
24 16
40 8
48 32
80 16
96 64
160 32
192 128
320 64
384 256
640 128
768 512
1280 256
1536 1024
2560 512
3072 2048
5120 1024
6144 4096
10240 2048
12288 8192
20480 4096
24576 16384
40960 8192
49152 32768
81920 16384
98304 65536
Dla wejść 2 20 10
( a(0) b(0) k
):
2 20
22 -18
4 40
44 -36
8 80
88 -72
16 160
176 -144
32 320
352 -288
To jest golf golfowy , więc wygrywa najkrótszy program w bajtach.
a
i możeb
być znakiem nowej linii?Odpowiedzi:
Galaretka , 5 bajtów
To jest podejście rekurencyjne. Ze względu na optymalizację wywołania ogonowego jedynym ograniczeniem jest możliwość dopasowania obu liczb całkowitych do pamięci. Dane wyjściowe to jedna lista w wierszu.
Wypróbuj online!
Jak to działa
źródło
Main link
właściwie znaczy?¶
i linie można stosować zamiennie. Możesz używać obu w trybie UTF-8, ale istnieje tylko\x7f
ich reprezentacja na stronie kodowej Jelly.Python 2, 31 bajtów
Drukuje na zawsze. Cóż, w końcu przekroczysz limit rekurencji, ale jest to ograniczenie systemowe.
źródło
sys.setrecursionlimit
while
pętla zachowuje się inaczej niż to, co robisz.f=lambda a,b:print(a,b)or f(a+b,a-b)
)MATL , 10 bajtów
Ta wersja wyświetli nieskończoną liczbę elementów w sekwencji plus-minus.
Wypróbuj online! (zatrzymaj go po uruchomieniu z powodu nieskończonej pętli)
Wyjaśnienie
źródło
Haskell, 19 bajtów
Tworzy nieskończoną sekwencję liczb. Przykład użycia:
źródło
Pyth,
109 bajtówDzięki @isaacg za 1 bajt.
Drukuje nieskończoną sekwencję par.
źródło
Q
s można usunąć - Pyth wypełni je domyślnie.C, 81 bajtów
źródło
05AB1E , 7 bajtów
Używa metody first-k . Wprowadź następujące dane dla:
Kod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
źródło
k, 12
.
Można również nazwać w formie
źródło
APL, 37 znaków
Może być używany jako
lub
źródło
MathGolf , 8 bajtów
Wypróbuj online!
Pobiera dane wejściowe w odwrotnej kolejności, ale po prostu dlatego, że są one wypychane na stos. W przeciwnym razie byłby o 1 bajt dłuższy. 2-3 bajty pochodzą z wyjścia. Bez potrzeby drukowania jednej pary w wierszu program mógłby być
æ`‼+-∟
(wypełnia stos elementami sekwencji w nieskończoność) lubÉ‼+-∟
(drukuje wszystkie elementy sekwencji oprócz pierwszej do debugowania, o ile-d
flaga jest aktywna) .Wyjaśnienie
źródło
ABC
,stdin = StdIn(line)
'ABC'
lub"ABC"
. Wewnętrznieast.literal_eval
służy do analizowania danych wejściowych. Istnieje jeszcze kilka dziwactw, które muszą być eliminowane, ale powinieneś być w stanie zrobić to .ABCDEF
Do[AB, CD, EF]
?2ô_2<\1>]
(na stałe zakodowane na długości wejściowej 6 i podzielone na części wielkości 2, ponieważ tego właśnie potrzebowałem, ale prawdopodobnie powinienem być modyfikowalne do pracy dla ogólnych rozmiarów wejściowych i częściowych)./
Python 3.5,
5543 bajtów:Drukuje prawidłową sekwencję pozornie na zawsze. Byłem w stanie pozwolić temu trwać przez około 30 minut bez zgłaszania żadnego błędu, a program wydrukował 2301 cyfr dla pierwszego numeru i 1150 cyfr dla drugiego! W oparciu o to, zgaduję, że przy zapewnieniu wystarczającego sprzętu do działania, może to trwać DŁUGO i wydrukować DOWOLNIE więcej cyfr, a także teoretycznie nie ma limitu rekurencji, dzięki
while
pętli!źródło
a
ib
dopasowanie pytania.while
i rekurencyjne połączenie ...Reng v.3.2, 9 bajtów (samo-odpowiedź, niekonkurujący)
Pobiera dwa wejścia (
a b
) i wyjściab a
. Wypróbuj tutaj!i
pobiera dane wejściowe dwa razy,¤
duplikuje stos,æ
drukuje liczbę i spację (i robi to dwa razy, są dwa),ö
drukuje nowy wiersz,±
robi to, czego można się spodziewać, i2.
pomija kolejne dwa znaki, owijając się wokół danych wejściowych, uzyskując znaki.źródło
Python 2.7,
56, 42 bajtów:Prosta pętla, która drukuje na zawsze (ish).
źródło
a,b=input()
, możesz usunąć wcięcie.Partia, 54 bajty
Zauważ, że CMD.EXE jest ograniczony do 32-bitowych liczb całkowitych ze znakiem, więc szybko przepełni i wydrukuje śmieci i komunikaty o błędach.
źródło
Julia, 25 bajtów
Maksymalne nadużycie składni. Julia jest dziwna . Wypróbuj online!
Alternatywna wersja, 29 bajtów
Należy pamiętać, że wyjście będzie ostatecznie przepełnienia chyba zadzwonić
<|
na BigInt . Niestety w tym przypadkushow
poprzedza każdą tablicęBigInt
. Kosztem kolejnych czterech bajtów możemy wygenerować wyjście oddzielone spacjami dla wszystkich typów liczbowych.Wypróbuj online!
Jak to działa
Definiujemy operatora binarnego
<|
dla naszych celów. Nie jest zdefiniowany w najnowszych wersjach Julii, ale nadal jest rozpoznawany przez parser jako operator. Chociaż\
(nie zdefiniowany wyraźnie dla liczb całkowitych) jest o jeden bajt krótszy, jego wysoki priorytet wymagałby zastąpieniaa+b<|a-b
go(a+b)\(a-b)
(+3 bajtami) lub\(a+b,a-b)
(+2 bajtami).Kiedy
a<|b
jest wykonywany, zaczyna się od wywołaniashow
drukowania [ab] do STDOUT. Następniea+b<|a-b
rekurencyjnie wywołuje<|
sumę lub różnicę.Ponieważ rekurencja jest (powinna być) nieskończona, porównanie
<
nigdy nie jest wykonywane; jego jedynym celem jest połączenie dwóch części kodu. To oszczędza dwa bajty w stosunku do prostszej alternatywy([a b]|>show;a+b<|a-b)
.źródło
Perl 6 , 23 bajtów (nieskończony)
Edycja: dzięki JoKing wersja sekwencji jest teraz najkrótsza (również usunięta
.say
zgodnie z wyjaśnieniem z OP:TIO: InfiniteSeq
Stara funkcjonalna odpowiedź
TIO: InfiniteFunc
Zauważ, że Perl 6 nie ma limitu rekurencji jako taki, opiera się wyłącznie na dostępnej pamięci, więc dotrze do milionów przed bombardowaniem.
źródło
Współczynnik, 62 bajty
recursive
, inaczej wyczekiwanie skończy się zbyt szybko.źródło
Rubin, 25 bajtów
Oparty na rozwiązaniu Python firmy xnor . Być może zrobię generator w innej odpowiedzi, ale to wydrukuje
a
, potemb
nowea
, potem noweb
, ad infinitum.źródło
Python 3, 42 bajty
Chciałem napisać generator dla tej funkcji i tak też zrobiłem.
W Pythonie 3 sekwencja jest generowana w następujący sposób:
źródło
Common Lisp, 57
Wykorzystuje
psetf
, co wpływa na wartości zmiennych równolegle, i prostąloop
składnię.źródło
bash + GNU coreutils, 75 bajtów
Wezwanie:
źródło
CP / M 8080, 47 bajtów
Z80 mnemoniki, ale nic, czego 8080 nie ma, źródło skomentowało, gdy zdecydowałem się policzyć dane wyjściowe, a nie dane wejściowe, ale nazwy funkcji zwięzłe zostały zachowane, ręcznie zmontowane, więc wybacz 'xx', w których znam liczbę bajtów, ale jeszcze się nie udało adresy wyjściowe lub przesunięcia:
źródło
Clojure, 44 bajty
Funkcja, która tworzy nieskończoną leniwą sekwencję.
źródło
Perl 5, 40 bajtów
wymaga
-E
(za darmo)lub (ta sama długość)(Przekreśliłem ten ostatni, ponieważ powinien on zawierać błędy zaokrąglania dla niektórych iteracji).
Czapka z daszkiem.
Ale podejrzewam, że musi istnieć krótsze rozwiązanie Perl 5.
źródło
ZWROT , 21 bajtów
Try it here.
Operator rekurencyjny-lambda. Stosowanie:
Wyjaśnienie
źródło
> <> , 26 bajtów
Zadzwoń z
a
,b
,n
na stosie, gdzien
jest liczba obrotów lub wartość ujemną na wyjściu nieskończonej. Wyjściaa
ib
oddzielone spacją.Jako wyjaśnienie, oto jak ewoluuje stos podczas działania:
Możesz go wypróbować na interprecie online z pozytywną liczbą obrotów, ale będziesz musiał użyć oficjalnego interpretera Pythona, aby przetestować tryb nieskończoności.
źródło
Rozmyte Octo Guacamole ,
1716 bajtów(niekonkurencyjny, wykorzystuje funkcje później niż wyzwanie)
Było to trudne ze względu na błędy po stronie klienta. Ale mam to!
Przewodnik:
źródło
:
na początek pętli i wyeliminować potrzebę dwukrotnego drukowania?Poważnie, 12 bajtów
Wysyła nieskończony strumień, format to
b(n) a(n)
jedna para wyjść na linię.Brak linku online, ponieważ TryItOnline nie radzi sobie tak dobrze z nieskończonymi pętlami.
Wyjaśnienie:
źródło
J,
1612 bajtówGeneruje tylko pierwsze wartości k dla sekwencji na podstawie podanych nasion.
Zaoszczędzono 4 bajty, używając sztuczki (lub cukru syntaktycznego) pokazanego przez @randomra w tym komentarzu .
Stosowanie
źródło
C #, 50 bajtów
Pełne źródło, w tym przypadek testowy:
Używany jest typ danych BigInteger, więc liczby nie przepełniają się i stają się 0. Jednak ponieważ jest to rozwiązanie rekurencyjne, należy spodziewać się przepełnienia stosu.
źródło