Biorąc pod uwagę listę liczb całkowitych nieujemnych w dowolnym rozsądnym formacie, iteruj ją, pomijając tyle elementów, ile mówi każda liczba całkowita, na którą wkraczasz.
Oto działający przykład:
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | []
^ First element, always include it
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0]
^ Skip 0 elements
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1]
^ Skip 1 element
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1, 2]
^ Skip 2 elements
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1, 2, 3]
Skip 3 elements; you're done
Kolejny działający przykład, nie tak jednakowo-deltowy:
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | []
^ First element, always include it
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4]
^ Skip 4 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3]
^ Skip 3 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3, 3]
^ Skip 3 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3, 3, 4]
Skip 4 elements; you're done
Przykład poza zakresem:
[0, 2, 0, 2, 4, 1, 2] | []
^ First element, always include it
[0, 2, 0, 2, 4, 1, 2] | [0]
^ Skip 0 elements
[0, 2, 0, 2, 4, 1, 2] | [0, 2]
^ Skip 2 elements
[0, 2, 0, 2, 4, 1, 2] | [0, 2, 4]
Skip 4 elements; you're done (out of bounds)
Zasady
- Nie możesz używać nudnego oszustwa wśród tych , które sprawiają, że wyzwanie jest nudne i nieciekawe.
- Powinieneś tylko zwrócić / wydrukować wynik końcowy. Dane wyjściowe STDERR są ignorowane.
- Nie możesz otrzymać danych wejściowych jako ciąg cyfr w żadnej bazie (np. „0102513162” w pierwszym przypadku).
- Do wprowadzania danych należy stosować kolejność od lewej do prawej.
- Podobnie jak w sprawdzonych przykładach, jeśli wyjdziesz poza granice, wykonanie kończy się tak, jakby było inaczej.
- Powinieneś użyć
0
do pominięcia 0 elementów. - Biorąc pod uwagę pustą listę (
[]
) jako dane wejściowe, powinieneś powrócić[]
.
Przypadki testowe
[] => []
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] => [0, 1, 3, 7]
[5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0] => [5, 2, 1, 0]
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] => [0, 1, 2, 3]
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] => [4, 3, 3, 4]
[0, 2, 0, 2, 4, 1, 2] => [0, 2, 4]
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź!
code-golf
array-manipulation
Erik the Outgolfer
źródło
źródło
""
s?0
s na wyjściu.Odpowiedzi:
Python 2 , 36 bajtów
Wypróbuj online!
źródło
x[0]
tego zrobić zamiastx[:1]
?[x[0]]
x[:1]
...f=lambda x:x and[x[0]]+f(x[x[0]+1:])
Python 2 ,
49 44 *41 bajtówPrzekreślone 44 jest nadal regularne 44 :(
* -3 dzięki tylko @ ASCII .
Wypróbuj online!
Drukuje wyniki oddzielone znakiem nowej linii, ponieważ OP jest dozwolony na czacie. Nie sądzę, że może stać się krótszy jako nierekurencyjny pełny program .
Jak to działa?
l=input()
- Czyta listę ze standardowego wejścia.while l:
- Nadużywa faktu, że puste listy są w Pythonie fałszywe, zapętla się, dopóki lista nie będzie pusta.print l[0];
- Drukuje pierwszy element listy.l=l[l[0]+1:]
- „Pomija jak królik” - przycina pierwszyl[0]+1
z listy.Weźmy przykład
Biorąc pod uwagę listę
[5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0]
jako wejściowych, wykonuje kod następujący (zgodnie z wyjaśnieniem powyżej) - Drukuje pierwszy element tablicy:5
, wykończenia pierwszych 6:[2, 1, 2, 1, 0, 0]
. Następnie wydrukować2
i wykończenia pierwszy 3:[1,0,0]
. Podobnie, produkujemy1
, przycinamy pierwsze 2 i otrzymujemy[0]
. Oczywiście0
jest drukowany i program się kończy.źródło
Haskell,
29 2726 bajtówZaoszczędzony 1 bajt dzięki Zgarbowi.
Wypróbuj online.
źródło
f x=x
w drugiej linii zapisuje bajt.JavaScript (ES6),
423935 bajtówStare rozwiązanie 39 bajtów
-3 bajty dzięki @ThePirateBay
źródło
a=>a.map(n=>i--||r.push(i=n),r=i=[])&&r
05AB1E ,
109 bajtówWykorzystuje kodowanie 05AB1E . Wypróbuj online!
źródło
Mathematica,
4644 bajtówAlternatywy:
źródło
C #, 68 bajtów
Wypróbuj online!
Wersja pełna / sformatowana:
Zwracanie listy jest dłuższe i wynosi 107 bajtów.
źródło
Łuska ,
86 bajtówWypróbuj online!
-2 bajty (i zupełnie nowy pomysł na rozwiązanie) dzięki Leo!
Wyjaśnienie
Używam funkcji dopasowania wzorca listy
Γ
. Zajmuje funkcjif
oraz listę z głowąx
i ogonemxs
, i odnosi sięf
dox
axs
. Jeśli lista jest pusta,Γ
zwraca wartość domyślną zgodną z jej typem, w tym przypadku pustą listą. Uważamyf
się za↓
, który odrzucax
elementyxs
. Ta funkcja jest następnie iterowana, a powstałe elementy są gromadzone na liście.źródło
Python 2 ,
5955 bajtówWypróbuj online!
źródło
l[i:i+l[i-1]]=[]
zamiastdel l[i:i+l[i-1]]
zapisać bajtPyth, 22 bajtów
Usunięto bezużyteczny bajt
źródło
Python 2 ,
604241 bajtów-18 bajtów dzięki Luis Mendo
-1 bajtów dzięki Jonathan Frech
Wypróbuj online!
źródło
i-=~x[i]
jest o jeden bajt krótszy niżi+=1+x[i]
.Siatkówka , 36 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Wejścia i wyjścia są oddzielone od linii za pomocą końcowego linii.
Wypróbuj online! (Używa przecinków zamiast linii, aby umożliwić wygodne zestawy testów).
źródło
Brain-Flak , 64 bajty
Wypróbuj online!
źródło
({}[()]<{}>)
vs,({}<{}>[()])
były takie same! Co za zbieg okoliczności!Mathematica,
6450 bajtówźródło
C # (.NET Core) , 68 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako tablicę liczb całkowitych, zwraca ciąg zawierający wartości, które nie zostały pominięte.
źródło
using System.Linq;
normalną pętlą.R, 58 bajtów
Funkcja rekurencyjna. Bierze wektor
x
jako argument i intiuje wskaźnikp
. Spowoduje to wydrukowanie odpowiedniego wpisux
, sprawdzenie, czyp+x[p]
wyjdzie poza granice, a jeśli nie, wywołuje funkcję nowego wskaźnika.Jest to porównywalne rozwiązanie, które zwraca prawidłowy wektor zamiast drukowania cyfr.
źródło
numeric(0)
? aka pusta tablica.Java (OpenJDK 8) , 53 bajty
Dzięki @ PunPun1000 i @TheLethalCoder
Wypróbuj online!
źródło
n
do pętli?(a[n+=1+a[n]]
. Funkcja generuje również błąd po wypisaniu poprawnej wartości, nie wiem, czy jest to dozwolone, czy nie (pytanie mówi, że standardowy błąd jest ignorowany). Jeśli taka była intencja, możesz usunąćn<a.length
pętlę for. Wreszcie kod TIO nie działa tak, jak jest, nawet w przypadku paren. Funkcja powinna byćConsumer<int[]>
afunc.accept(test)
Alice , 15 bajtów
Wypróbuj online!
Wprowadź i wyodrębnij rozdzielone wierszem listy liczb całkowitych dziesiętnych.
Wyjaśnienie
Zapisanie liczby całkowitej n w kolejce iteratora powoduje, że następne polecenie zostanie wykonane n razy. Lustra takie jak
/
nie są poleceniami, więc następnym poleceniem będzieI
. Dlatego jeśli po prostu odczytamy i wydrukujemy wartość x , odczytamy wartości x + 1 podczas następnej iteracji, a ostatnia z nich znajdzie się na górze stosu. Pomija to wymagane elementy listy numerów.źródło
Mathematica , 37 (30?)
Dalsza gra w golfa według metody użytkownika user202729.
Reguły nie wydają się wyraźnie określać formatu wyjściowego, więc może:
Dane wyjściowe dla drugiej funkcji wyglądają następująco:
0.2.4.{}
- zwłaszcza{}
jest zwracane dla pustego zestawu, zgodnie z ostateczną regułą.źródło
±Drop[{x},a]
może być,±{x}~Drop~a
ponieważ±
ma niższy priorytet niżInfix
.Common Lisp, 51 bajtów
Wypróbuj online!
źródło
Brain-Flak ,
6460 bajtów4 bajty oszczędzasz na podstawie pomysłu od 0 '
Wypróbuj online!
Adnotacja
źródło
Ruby,
36 3331Wypróbuj online.
źródło
f=
jako element nagłówka.Python 2.4, 85 bajtów
Nie ma szans na wygraną w pythonie, ale uwielbiam onelinerów, a ten może być interesujący dla innych.
Okazuje się, że istnieje fantastyczna magiczna sztuczka, aby uzyskać dostęp do listy budynków wewnątrz zrozumienia, ale działa tylko w wersji 2.4, a przy niektórych zmianach w <= 2.3
locals()['_[1]']
tak jest. Python tworzy tajną nazwę_[1]
dla listy podczas jej tworzenia i zapisywanialocals
. Również nazwy_[2]
,_[3]
... są używane dla list zagnieżdżonych.Liczy więc liczbę już dodanych elementów plus ich sumę. Wynik jest indeksem następnego pożądanego elementu.
Myślę, że powinien istnieć sposób na uniknięcie wyliczenia. Jak dostęp do tablicy wejściowej bezpośrednio przez indeks:
[ n[len(locals()['_[1]'])+sum(locals()['_[1]'])] for ... ]
. Ale nie mogę wymyślić kompaktowego sposobu, aby zabezpieczyć go przed indeksowaniem poza zasięgiem (zachowując go oneliner)źródło
Szybki, 63 bajty
To jest mój pierwszy wpis, więc nie jestem w 100% pewien zasad, ale mam nadzieję, że ta odpowiedź wystarczy. Nie jestem pewien zasad dotyczących wprowadzania danych wejściowych do systemu. Mam krótszą odpowiedź, jeśli pozwolono mi przyjąć funkcję, która może zwrócić dane wejściowe.
źródło
Perl 6 , 31 bajtów
Sprawdź to
Rozszerzony:
Aby pomóc zrozumieć, jak działa kod, bez
[*;0]
tego wygenerowałby sekwencję podobną do następującej:źródło
Galaretka , 8 bajtów
Pełny program drukujący wyniki, po którym następuje nowa linia (pusta lista nie generuje danych wyjściowych).
Wypróbuj online!
W jaki sposób?
źródło
Python 3 , 35 bajtów
Wypróbuj online!
Uruchom z tym,
f(*l)
gdziel
jest twój wkład. Prawdopodobnie rozciąga reguły wprowadzania, ale uwielbiam zaawansowane rozpakowywanie.źródło
APL (Dyalog Unicode) , 20 bajtów SBCS
Wypróbuj online!
źródło
Perl 5 ,
3630 + 1 (-a) = 31 bajtówWypróbuj online!
Pobiera dane wejściowe jako listę liczb oddzieloną spacjami.
źródło
PowerShell , 25 bajtów
Wypróbuj online!
źródło