Pozwala określić sekwencję wskaźnik być jakakolwiek sekwencja, tak, że (n) = a ((n-1) - ((n-1))) forall n większa niż pewna liczba skończonych. Na przykład, jeśli nasza sekwencja się rozpoczęła
3 2 1
Nasz następny termin to 2
, ponieważ a (n-1) = 1 , (n-1) -1 = 1 , a (1) = 2 (ten przykład jest indeksem zerowym, jednak nie ma znaczenia, jakiego indeksu użyjesz do obliczeń zawsze bądź taki sam.). Jeśli powtórzymy proces, otrzymamy nieskończoną sekwencję
3 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2
Zadanie
Biorąc pod uwagę pewną początkową tablicę dodatnich liczb całkowitych, wyjściowa sekwencja wskaźnika zaczyna się od tej tablicy.
Typy wyjściowe
Wyjście ma być elastyczne, jeśli zdecydujesz się napisać funkcję jako swój program, może zwrócić: nieskończoną listę liczb całkowitych lub funkcję indeksującą sekwencję. Jeśli zdecydujesz się napisać pełny program, możesz wyświetlać terminy sekwencji w nieskończoność.
Możesz także wybrać dwa dane wejściowe, tablicę początkową i indeks. Jeśli zdecydujesz się to zrobić, musisz podać tylko ciąg sekwencji przy tym indeksie.
Nigdy nie otrzymasz sekwencji, która wymaga indeksowania przed rozpoczęciem sekwencji. Na przykład 3
nie jest poprawnym danymi wejściowymi, ponieważ potrzebne byłyby warunki przed 3
rozwiązaniem następnego terminu.
To jest golf golfowy, więc twój wynik będzie liczbą bajtów w twoim programie, przy czym niższy wynik będzie lepszy.
Przypadki testowe
przypadki testowe są obcinane dla uproszczenia
2 1 -> 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 ...
2 3 1 -> 2 3 1 3 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 ...
3 3 1 -> 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 3 3 1 3 ...
4 3 1 -> 4 3 1 3 4 4 3 3 4 4 4 3 4 4 4 4 3 4 4 4 4 3 4 4 4 4 3 4 ...
Odpowiedzi:
JavaScript (ES6), 25 bajtów
Anonimowa funkcja, która po wywołaniu tworzy funkcję,
f
która daje element o podanym indeksie w sekwencji.Daj mi znać, jeśli coś źle zrozumiem ...
źródło
f(n)
z wewnątrzf(n)
. Nie sądzę, że to się kiedyś skończy, ale nie znam JS.n
wystarczająco niski poziom,a[n]
zwróci prawdziwą wartość, więc||
spowoduje zwarcie i zapobiegnie nieskończonemu powtórzeniu się.n
nie obniża się przy każdym połączeniu. Jestem prawie pewien, żen
większa niż długośća
nigdy cię nie zatrzyma.--n
przypiszn
do niego,n-1
aby następne odniesienie do niego odnosiło się do zmniejszonegon
.--n
zmniejszan
, co oznacza, żef(--n-f(n))
jest to to samo cof((n-1)-f(n-1))
Łuska ,
76 bajtówZwraca nieskończoną listę. Wypróbuj online! Zauważ, że TIO może chwilę obciąć i wydrukować wynik.
Wyjaśnienie
Operator
¡
ma kilka znaczeń. Używam tutaj „konstruuj nieskończoną listę, iterując funkcję, która oblicza nowy element z listy istniejących”. Biorąc pod uwagę listę długości N , nowy element będzie miał indeks oparty na 1 N + 1 . Wszystko, co musimy zrobić, to zanegować ostatni element listy (który jest poprzednią wartością) i zindeksować listę za pomocą wyniku.źródło
Haskell , 36 bajtów
Pobiera listę i zwraca funkcję indeksującą sekwencję
Wypróbuj online!
Wyjaśnienie
Tutaj definiujemy funkcję,
!
która pobiera listęl
i indeksn
. Jeślin
jest mniejsza niż długośćl
indeksujemyl
wedługn
, w przeciwnym razie wracamyl!((n-1)-l!(n-1))
. Jest to zgodne z rekurencyjną definicją funkcji podanej w pytaniu.Oto ten sam program bez golfa.
Używam
e<-n-1
zamiast tego do zapisywania bajtów podczas przypisywania,n-1
abye
można było z nich później skorzystać.źródło
MATL ,
139 bajtówZwraca początkowe warunki, po których następuje n dodatkowych warunków (dozwolonych przez wyzwanie), gdzie n jest dodatnią liczbą całkowitą przyjętą jako dane wejściowe.
Wypróbuj online!
Wyjaśnienie
źródło
Mathematica, 63 bajty
pobiera dwa dane wejściowe
Wypróbuj online!
-3 bajty od Martina Endera
źródło
R , 55 bajtów
Wypróbuj online!
Zajmuje dwa wejścia.
źródło
Standardowy ML (MLton) , 58 bajtów
Wypróbuj online! Funkcja
a
pobiera początkową listę i indeks i zwraca element sekwencji pod tym indeksem. Przykładowe użycie:a [4,3,1] 5
daje4
.źródło
Galaretka , 6 bajtów
Bierze sekwencji S i to liczba całkowita K i dodaje k warunki do S .
Wypróbuj online!
Jak to działa
źródło
Python 2 , 48 bajtów
Wypróbuj online!
źródło
CJam, 10 bajtów
W przypadku CJam robi to bardzo dobrze (nawet bije 05ab1e!).
Jest to anonimowy blok, który oczekuje danych wejściowych w formie
i n
na stosie, gdziei
jest indeksem w sekwencji in
tablicą liczb początkowych.Powodem, dla którego działa to tak dobrze, jest
j
operator, który zapewnia zapamiętaną rekurencję z zestawu wartości początkowych.Wyjaśnienie:
źródło
Java (8), 60 bajtów
Pobiera dwa dane wejściowe (tablica
a
liczb całkowitych i liczba całkowitan
) i wysyłan
dziesiątą wartość sekwencji.Wyjaśnienie:
Wypróbuj tutaj.(Może to potrwać kilka sekund.)
źródło
Perl, 38 +3 (-anl) bajtów
Wypróbuj online
źródło
05AB1E , 20 bajtów
Oczekuje, że dane wejściowe będą rozdzielone spacjami, a dane wyjściowe będą przesyłane w nieskończoność; całkiem prosta implementacja
Przykładowy przebieg:
źródło
Java (OpenJDK 8) ,
95939190 bajtówWypróbuj online!
źródło
b[(j-1)-...]
równoważne zb[~-j-...]
?j>=a.length
abyj<a.length
zapisać bajt:j<a.length?a[j]:b[~-j-b[j-1]]
. Ciekawe też: dlaczego zdecydowałeś się na podejście pętlowe, skoro podejście rekurencyjne wyjaśnione w samym opisie wyzwania ma zaledwie 60 bajtów?Perl 5 ,
-a
30 bajtówWypróbuj online!
źródło