Pomiń jak królik!

Erik the Outgolfer 08/26/2017. 30 answers, 2.887 views
code-golf array-manipulation

Biorąc pod uwagę listę nieujemnych liczb całkowitych w jakimkolwiek sensownym formacie, iteruj po niej, pomijając tak wiele elementów, jak każda liczba całkowita, o której mówisz.


Oto sprawdzony 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 

Inny działający przykład, a nie tak samo-równe-delty:

[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 obszarem:

[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) 

Reguły

  • Nie możesz używać żadnego nudnego cheata wśród tych , które sprawiają, że wyzwanie jest nudne i nieciekawe.
  • Powinieneś tylko zwrócić / wydrukować ostateczny wynik. Dane wyjściowe STDERR są ignorowane.
  • Możesz nie uzyskać danych wejściowych jako ciągu cyfr w dowolnej bazie (np. "0102513162" dla pierwszego przypadku).
  • Aby wprowadzić dane, musisz użyć kolejności od lewej do prawej.
  • Jak w przykładach pracy, jeśli wyjdziesz poza granice, wykonanie zostanie zakończone, jak gdyby było inaczej.
  • Powinieneś użyć 0 do pominięcia 0 elementów.
  • Biorąc pod uwagę pustą listę ( [] ) jako dane wejściowe, powinieneś zwró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 , więc najkrótsza odpowiedź wygrywa!

5 Comments
Erik the Outgolfer 07/28/2017
Sandbox (tylko użytkownicy 2k +)
3 Shaggy 07/28/2017
Tak, po prostu to zauważyłem. / zakłada okulary
2 Rod 07/28/2017
Prawdopodobnie krasnoludek ¯ \ _ (ツ) _ / ¯
1 Roman Gräf 07/28/2017
Czy w mojej tablicy można mieć końcowe zera? zaoszczędziłoby mi ~ 18 bajtów
1 Erik the Outgolfer 07/28/2017
@ RomanGräf Przepraszamy, ale nie, to byłoby zbyt niejednoznaczne, ponieważ istnieją przypadki, w których powinieneś mieć 0 s na końcu.

30 Answers


Rod 07/28/2017.

Python 2 , 36 bajtów

 f=lambda x:x and x[:1]+f(x[x[0]+1:]) 

Wypróbuj online!

4 comments
Mr. Xcoder 07/28/2017
Spodziewałem się, że zostanę pokonany, ale nie tak źle :)
Erik the Outgolfer 07/28/2017
Nie możesz zrobić x[0] zamiast x[:1] ?
Rod 07/28/2017
@EriktheOutgolfer tak, ale musi to być lista, więc byłaby to [x[0]]
Erik the Outgolfer 07/28/2017
@Rod Nie zapisujesz żadnych bajtów z x[:1] ... f=lambda x:x and[x[0]]+f(x[x[0]+1:])

Mr. Xcoder 08/19/2017.

Python 2 , 49 46 * 41 bajtów

Przekreślony 4 jest nadal regularny 4 :(

* -3 thanks to @ASCII-only .

 l=input()
while l:print l[0];l=l[l[0]+1:] 

Wypróbuj online!

Drukuje wyniki oddzielone znakiem nowej linii, gdy OP jest dozwolony na czacie. Nie sądzę, że może być krótszy jako non-recursive full program .


Jak to działa?

  • l=input() - odczytuje listę ze standardowego wejścia.

  • while l: - Nadużywa faktu, że puste listy są falsy w Pythonie, pętle, dopóki lista nie jest pusta.

  • print l[0]; - Drukuje pierwszy element listy.

  • l=l[l[0]+1:] - "Pomija jak królik" - przycina pierwszy l[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 dane wejściowe, kod wykonuje następujące czynności (zgodnie z wyjaśnieniem powyżej) - Drukuje pierwszy element array: 5 , przycinaj pierwsze 6: [2, 1, 2, 1, 0, 0] . Następnie drukujemy 2 i przycinamy pierwsze 3: [1,0,0] . Podobnie, wyprowadzamy 1 , przycinamy pierwsze 2, a otrzymujemy [0] . Oczywiście drukowane jest 0 i program się kończy.

1 comments

w0lf 07/28/2017.

Haskell, 29 27 26 bajtów

 j(x:y)=x:j(drop x y)
j x=x 

Zapisany 1 bajt dzięki Zgarbowi.

Wypróbuj online.

2 comments
Zgarb 07/28/2017
f x=x w drugiej linii zapisuje bajt.
w0lf 07/28/2017
@Zgarb Fajnie, dzięki!

Adnan 07/28/2017.

05AB1E , 10 9 bajtów

[¬Dg>#=ƒ¦ 

Używa kodowania 05AB1E . Wypróbuj online!

1 comments
Magic Octopus Urn 07/28/2017
Tak, to jest o wiele lepsze niż to, co myślałem.

Martin Ender 07/28/2017.

Mathematica, 46 44 bajty

SequenceCases[#,NO 

Alternatywy:

SequenceCases[#,NO 
1 comments
Mr.Wizard 07/28/2017
Wow to świetnie!

Johan Karlsson 07/28/2017.

JavaScript (ES6), 42 39 35 bajtów

a=>a.map((n,i)=>a.splice(i+1,n))&&a 

 let f = 
a=>a.map((n,i)=>a.splice(i+1,n))&&a

console.log(f([]))                                                     // => []
console.log(f([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))                     // => [0, 1, 3, 7]
console.log(f([5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0]))                   // => [5, 2, 1, 0]
console.log(f([0, 1, 0, 2, 5, 1, 3, 1, 6, 2]))                         // => [0, 1, 2, 3]
console.log(f([4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2])) // => [4, 3, 3, 4]
console.log(f([0, 2, 0, 2, 4, 1, 2]))                                  // => [0, 2, 4] 

Stare rozwiązanie 39 bajtów

a=>a.map(n=>i--||r.push(i=n),r=i=[])&&r 

-3 bytes thanks to @ThePirateBay

1 comments
ThePirateBay 07/28/2017
39 bajtów a=>a.map(n=>i--||r.push(i=n),r=i=[])&&r

TheLethalCoder 07/28/2017.

C #, 68 bajtów

 a=>{for(int i=0;i 

Wypróbuj online!

Wersja pełna / sformatowana:

 namespace System
{
    class P
    {
        static void Main()
        {
            Action> f = a =>            {
                for (int i = 0; i < a.Count; i += a[i] + 1)
                    System.Console.Write(a[i] + " ");
            };

            f(new Collections.Generic.List() { });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });Console.WriteLine();
            f(new Collections.Generic.List() { 5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 0, 2, 5, 1, 3, 1, 6, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 2, 0, 2, 4, 1, 2 });Console.WriteLine();

            Console.ReadLine();
        }
    }
} 

Zwracanie listy jest dłuższe i wynosi 107 bajtów.

 a=>{var l=new System.Collections.Generic.List();for(int i=0;i 
3 comments
2 TheLethalCoder 07/28/2017
Dlaczego ktoś to zarzucił?
Thomas Ayoub 07/31/2017
Aby zaokrąglić swój wynik i zrobić idealny 5k?
TheLethalCoder 07/31/2017
@ThomasAyoub Możemy tylko założyć, że był to ktoś z OCD tak.

Zgarb 07/28/2017.

Łuska , 8 6 bajtów

←TU¡Γ↓ 

Wypróbuj online!

-2 bajty (i całkowicie nowy pomysł na rozwiązanie) dzięki Leo!

Wyjaśnienie

Używam funkcji dopasowania wzorca list Γ . Zajmuje funkcję f oraz listę z głową x ogonem xs i stosuje f do x i xs . Jeśli lista jest pusta, Γ zwraca wartość domyślną zgodną z jej typem, w tym przypadku pustą listą. Przyjmujemy, że f to , co powoduje usunięcie x elementów z xs . Ta funkcja jest następnie iterowana, a wynikowe elementy są gromadzone na liście.

←TU¡Γ↓  Implicit input, e.g. [0,2,0,2,4,1,2]
    Γ↓  Pattern match using drop
   ¡    iterated infinitely: [[0,2,0,2,4,1,2],[2,0,2,4,1,2],[4,1,2],[],[],[],...
  U     Cut at first repeated value: [[0,2,0,2,4,1,2],[2,0,2,4,1,2],[4,1,2],[]]
 T      Transpose: [[0,2,4],[2,0,1],[0,2,2],[2,4],[4,1],[1,2],[2]]
←       First element: [0,2,4] 
5 comments
Leo 07/28/2017
Możesz zrezygnować z domyślnej wartości ø, a wszystko będzie nadal działać magicznie :)
Leo 07/28/2017
Zgarb 07/28/2017
@Leo Oh wow, to sprytnie!
Erik the Outgolfer 07/28/2017
Dlaczego to zrobiłeś?
Zgarb 07/28/2017
@ErikTheOutgolfer To był błąd (jestem na moim telefonie i najwyraźniej pchnął coś przez przypadek). Próbuję to cofnąć ...

Ruud 07/28/2017.

Python 2 , 59 55 bajtów

 l=input()
i=0
while l[i:]:i+=1;l[i:i+l[i-1]]=[]
print l 

Wypróbuj online!

2 comments
1 Rod 07/28/2017
Możesz użyć l[i:i+l[i-1]]=[] zamiast del l[i:i+l[i-1]] aby zapisać bajt

Dave 07/28/2017.

Pyth, 22 bajtów

VQ aY.(Q0VeY .x.(Q0 ;Y 

Usunięto niepotrzebny bajt

4 comments
Erik the Outgolfer 07/28/2017
Widzę tam 23 bajty.
Dave 07/28/2017
Typo :) przepraszam ...
3 Wheat Wizard 07/28/2017
Nie wiem, dlaczego głosujesz w dół. Istnieje możliwość, że podczas edytowania poprawek odpowiedź wywołała "automatyczny głos w dół". Przyczyny tego automatycznego odrzucenia są mylące i straszne, ale dzieje się tak, jeśli system uzna twoją odpowiedź za "niską jakość" na podstawie heurystyki. Możliwe też, że ktoś nie polubił twojej odpowiedzi, ale w tej chwili nie widzę w tym nic złego, więc nie jestem pewien, dlaczego tak się stało.
isaacg 07/31/2017
Cieszę się, że używasz Pyth!

Rod 07/28/2017.

Python 2 , 60 42 bajty

-18 bajtów dzięki Luisowi Mendo

 x=input()
i=0
while 1:print x[i];i+=1+x[i] 

Wypróbuj online!


Martin Ender 07/28/2017.

Retina , 36 bajtów

Liczba bajtów zakłada kodowanie ISO 8859-1.

.+
$*
((1)*¶)(?<-2>1*¶)*
$1
%M`.
0$ 

Dane wejściowe i wyjściowe są oddzielone od podajnika liniowego z końcowym podawaniem linii.

Wypróbuj online! (Używa przecinków zamiast linii, aby umożliwić wygodne zestawy testów.)


Riley 07/28/2017.

Brain-Flak , 64 bajty

([]){{}(({})<>)<>{({}[()]<{}>)}{}([])}{}<>([]){{}({}<>)<>([])}<> 

Wypróbuj online!

([]){{}                          ([])}{}                         # Until the stack is empty
       (({})<>)<>                                                # Copy TOS to off stack
                 {({}[()]<{}>)}{}                                # Pop TOS times
                                        <>([]){{}({}<>)<>([])}<> # Reverse off stack 
2 comments
6 DJMcMayhem 07/28/2017
O kurczę! Napisałem rozwiązanie, a następnie przewinąłem w dół, aby go opublikować, ale okazało się, że napisaliśmy exact sam bajt na rozwiązanie bajtu! Nawet drobne szczegóły, takie jak ({}[()]<{}>) vs ({}<{}>[()]) były takie same! Co za zbieg okoliczności!
2EZ 4RTZ 07/28/2017
@DJMcMayhem kradnąc całą sławę XD

user202729 07/28/2017.

Mathematica, 64 50 bajtów

±x_List:=Prepend[±Drop[x,1+#&@@x],#&@@x]
±_=±{}={} 
1 comments
Mr.Wizard 07/28/2017
Nie mogłem się oprzeć dalszemu zagrywaniu w golfa tego zgrabnego kodu; moja odpowiedź jest poniżej.

jkelm 07/28/2017.

C # (.NET Core) , 68 bajtów

 n=>{var t="";for(int i=0;i 

Wypróbuj online!

Wprowadza dane wejściowe jako tablicę liczb całkowitych, zwraca ciąg znaków zawierający nie pominięte wartości.

3 comments
TheLethalCoder 07/28/2017
Niezły sposób na zrobienie tego i dołączenie w takim samym stopniu, jak drukowanie.
jkelm 07/28/2017
Uwielbiam proste rozwiązania. Wciąż jednak muszę uczyć się LINQ, jak widziałem, skracam tyle cheraksów ...
TheLethalCoder 07/28/2017
Skraca go, ponieważ możesz nieodwołalnie powrócić przez większość czasu. Chociaż jest to rzut pomiędzy niejawnym powrotem z using System.Linq; i normalna pętla.

Jarko Dubbeldam 07/28/2017.

R, 58 bajtów

f=function(x,p=1)NO 

Funkcja rekursywna. Pobiera wektor x jako argument i wstawia wskaźnik p . Spowoduje to wydrukowanie odpowiedniego wpisu x , sprawdzenie, czy p+x[p] wychodzi poza granice, a jeśli nie, wywołuje funkcję dla nowego wskaźnika.

f=function(x,p=1,s=x[1])`if`((z<-x[p]+p+1)>sum(x|1),s,f(x,z,c(s,x[z]))) 

Jest to porównywalne rozwiązanie, które zwraca odpowiedni wektor zamiast drukować cyfry.

3 comments
Giuseppe 07/28/2017
a co z wprowadzeniem numeric(0) ? aka pusta tablica.
Jarko Dubbeldam 07/28/2017
@Giuseppe Popatrzę na to, gdy będę za moim komputerem
Giuseppe 08/24/2017
57 bajtów! i obsługuje także pustą obudowę.

Roman Gräf 07/28/2017.

Java (OpenJDK 8) , 53 bajty

Dzięki @ PunPun1000 i @TheLethalCoder

 a->{for(int n=0;;n+=1+a[n])System.out.println(a[n]);} 

Wypróbuj online!

5 comments
TheLethalCoder 07/28/2017
Czy wydrukowanie wyników, podobnie jak w mojej C # odpowiedzi, uratowałoby ci cokolwiek?
Roman Gräf 07/28/2017
@ TheLethalCoder Ill try
TheLethalCoder 07/28/2017
Czy możesz zapisać bajt, przenosząc n do pętli?
TheLethalCoder 07/28/2017
A na razie to nie działa.
PunPun1000 07/28/2017
Tęsknisz za parenem po (a[n+=1+a[n]] . Funkcja również zgłasza błąd po wyprowadzeniu poprawnej wartości, nie wiem, czy jest to dozwolone, czy też nie (pytanie powiedzenie czegokolwiek do standardowego błędu jest ignorowane) .Jeśli to była intencja, możesz usunąć n w pętli for n koniec kod TIO nie działa tak jak jest, nawet z paren. Consumer i użyj func.accept(test)

Martin Ender 07/28/2017.

Alicja , 15 bajtów

/$.. \h&
\I@nO/ 

Wypróbuj online!

Wprowadzanie i wyprowadzanie rozdzielonych linią list dziesiętnych liczb całkowitych.

Wyjaśnienie

/   Switch to Ordinal mode.
I   Read a line.
.   Duplicate it.
n   Logical NOT (gives truthy if we're at EOF).
/   Switch to Cardinal.
    The IP wraps around to the left.
\   Switch to Ordinal.
$@  Terminate the program if we're at EOF.
.   Duplicate the input line again.
O   Print it.
\   Switch to Cardinal.
h   Increment the value.
&   Store the result in the iterator queue.
    The program wraps around to the beginning. 

Przechowywanie 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ędzie I Dlatego jeśli po prostu odczytamy i wydrukujemy wartość x , odczytamy wartości x+1 w następnej iteracji, z ostatnią z nich kończącą się na szczycie stosu. Pominie to wymagane elementy listy numerów.


Mr.Wizard 07/28/2017.

Mathematica , 37 (30?)

Dalszy golf z dobrą metodą użytkownika202729.

±NO 

Reguły nie wydają się wyraźnie określać formatu wyjściowego, więc może:

±NO 

Wyjście dla drugiej funkcji wygląda następująco: 0.2.4.{} - szczególnie {} jest nadal zwracane dla pustego zestawu, zgodnego z ostateczną regułą.

2 comments
1 JungHwan Min 07/28/2017
±Drop[NO może być ±NO ponieważ ± ma niższy priorytet niż Infix .
Mr.Wizard 07/28/2017
@JungHwanMin Tęskniłem za tym; dzięki!

Jenny_mathy 07/28/2017.

Mathematica, 65 bajtów

(s=#;t=1;w={};While[t<=Length@s,AppendTo[w,k=s[[t]]];t=t+k+1];w)& 

Wypróbuj online!


w0lf 07/28/2017.

Ruby, 36 33 31

f=->l{a,*l=l;a&&f[l.drop(p a)]} 

Wypróbuj online.

4 comments
sethrin 07/30/2017
Możesz odjąć f= jako element nagłówka.
w0lf 07/30/2017
@sethrin Nawet jeśli muszę go wywoływać rekurencyjnie?
sethrin 07/30/2017
Hmm, dobre pytanie. Myślę że nie. Tak przy okazji, bardzo podobało mi się to w twoim rozwiązaniu.
w0lf 07/30/2017
@sethrin Dzięki! :)

AnonymousReality 07/28/2017.

Swift, 63 bajty

func a(d:[Int]){var i=0;while i 

To jest moje pierwsze zgłoszenie, więc nie jestem w 100% pewny co do zasad, ale mam nadzieję, że ta odpowiedź wystarcza. Nie mam pewności, w jaki sposób uzyskać dane wejściowe do systemu. Mam krótszą odpowiedź, jeśli mogę przyjąć funkcję, która może zwrócić dane wejściowe.

2 comments
Stephen 07/28/2017
Witamy w PPCG! Domyślne reguły to to, że możesz mieć kod, który działa jako pełny program, więc wprowadź (zwykle) w STDIN i wyjdź (zwykle) do STDOUT or funkcji, więc wejdź (zwykle) z parametrów funkcji i wyjścia (zwykle) z powrót funkcji.
AnonymousReality 07/28/2017
@StepHen - dzięki! Myślę, że to sprawia, że ​​moja druga wersja jest nieważna. Nie możemy się doczekać, aby wnieść więcej!

Perl 6 , 31 bajtów

 {(@_,{.[1+.[0]..*]}...^0)[*;0]} 

Sprawdź to

Rozszerzony:

 {  # bare block lambda with implicit parameter 「@_」
  (
    # generate a sequence

    @_,

    {
      .[ # index into previous value in the sequence
        1 + .[0]  # start by skipping one plus the first element
                  # of the previous value in the sequence
        ..  *     # use that to create a Range with no end
      ]
    }

    ...^  # keep doing that until: (and throw away last value)
    0     # it generates an empty list

  )[ *; 0 ]  # from every value in the sequence, get the first element
} 

Aby pomóc zrozumieć, jak działa kod, bez [*;0] wygenerowałoby to sekwencję podobną do następującej:

 [0, 1, 0, 2, 5, 1, 3, 1, 6, 2],
   (1, 0, 2, 5, 1, 3, 1, 6, 2),
         (2, 5, 1, 3, 1, 6, 2),
                  (3, 1, 6, 2) 

Renzo 07/29/2017.

Common Lisp, 51 bajtów

(do((x(read)(nthcdr(1+(print(car x)))x)))((not x))) 

Wypróbuj online!


C ++ (gcc), 172 bajty

#includeint main(){std::istream& i=std::cin;char c;int a,b;while(i>>c&&i>>a){std::cout<>c&&i>>b);}std::cout< 

Wypróbuj online

The straszny (c/91?"":" ") Służy do prawidłowego odstępu na wyjściu. Bez niego (-15 bajtów) wyjście ma formę: [0,2,4] , kiedy zmienię go na " " (-9 bajtów), wyjście jest jak [ 0, 2, 4] (dodatkowe miejsce na początku) .

<<(c/93?"":"]") na końcu jest tylko do obsługi [] pustego narożnika wejściowego

Drukuje bez końcowej linii końcowej.

1 comments
Erik the Outgolfer 07/30/2017
Możesz również wydrukować liczby oddzielone separatorem bez cyfry, bez potrzeby [] i możesz mieć puste wyjście dla tego przypadku krawędzi i bez potrzeby (c/91?"":" ") . Nie musisz dopasowywać formatu przykładów do wyzwania.

Jonathan Allan 07/29/2017.

Galaretka , 8 bajtów

ḢṄ‘ṫ@µL¿ 

Pełny program drukujący wyniki, po których następuje znak nowej linii (pusta lista nie generuje żadnych wyników).

Try it online!

W jaki sposób?

ḢṄ‘ṫ@µL¿ - Main link: list of non-negative integers  e.g. [2,5,4,0,1,2,0]
       ¿ - while:           Iteration:  1                  2             3          4        5
      L  -   length (0 is falsey)       7                  4             3          1        0
     µ   - ...do:                                                                            stop
Ḣ        -   head (pop & modify)        2 ([5,4,0,1,2,0])  0 ([1,2,0])   1 ([2,0])  0 ([0])
 Ṅ       -   print it (and yield it)   "2\n"              "0\n"         "1\n"      "0\n"
  ‘      -   increment                  3                  1             2          1
   ṫ@    -   tail from index            [0,1,2,0]          [1,2,0]      [0]         []
         -
         -                       i.e. a resulting in the printing of: '''2
                                                                         0
                                                                         1
                                                                         0
                                                                         ''' 
2 comments
Erik the Outgolfer 07/30/2017
Wreszcie odpowiedź na galaretkę! BTW mogę to zrobić w 7 bajtów.
Erik the Outgolfer 07/30/2017
Mam również funkcję zwracającą listę w 18 bajtach.

Evpok 07/30/2017.

Python 3 , 35 bajtów

 f=lambda h=0,*t:t and[h,*f(*t[h:])] 

Wypróbuj online!

Uruchom go za pomocą f(*l) gdzie l jest twoim wejściem. Prawdopodobnie rozciągając zasady wprowadzania, ale uwielbiam zaawansowane rozpakowywanie.


cliffroot 07/28/2017.

Clojure, 67 bajtów

#(nth(reduce(fn[[z k]b](if(= z 0)[b(conj k b)][(- z 1)k]))[0[]]%)1) 

Rozpoczyna się od parametrów początkowych [0 []] , gdzie 0 to licznik, a wynikiem jest [] . Jeśli pierwszy element na tej liście ma wartość 0 dołącza element n z argumentu do wyniku i przekazuje dalej tę listę [n [... n]] przeciwnym razie zmniejsza pierwszy element. (to wytłumaczenie wydaje mi się okropne)

Zobacz online


Dead Possum 07/28/2017.

Python 2.4, 85 bajtów

Nie ma szans na wygraną w Pythonie, ale uwielbiam onelinerki i ten może być interesujący dla innych.
Okazuje się, że istnieje fantazyjna magiczna sztuczka, aby uzyskać dostęp do listy budynków w rozumieniu, ale działa tylko w wersji 2.4 i z pewnymi zmianami w <= 2.3
locals()['_[1]'] to jest. Python tworzy tajną nazwę _[1] dla listy, podczas gdy jest tworzona i zapisuje ją w języku locals . Również nazwy _[2] , _[3] ... są używane dla list zagnieżdżonych.

lambda n:[j for i,j in enumerate(n)if i==len(locals()['_[1]'])+sum(locals()['_[1]'])] 

Zlicza więc liczbę już dodanych elementów oraz ich sumę. Wynik jest indeksem następnego pożądanego elementu.
Myślę, że powinien istnieć sposób uniknięcia wyliczenia. Podobnie jak dostęp do tablicy wejściowej bezpośrednio przez indeks: [ n[len(locals()['_[1]'])+sum(locals()['_[1]'])] for ... ] . Ale nie potrafię wymyślić kompaktowego sposobu ochrony przed indeksowaniem poza zasięgiem (przy zachowaniu go oneliner)

wprowadź opis obrazu tutaj


Neil 07/28/2017.

Partia, 69 bajtów

:l
@if not "%1"=="" echo %1&(for /l %%i in (0,1,%1)do @shift)&goto l 

(Potrzebuję () s () dookoła, for inaczej dzieje się w pętli.)

Related questions

Hot questions

Language

Popular Tags