Lewati seperti kelinci!

41

Diberikan daftar bilangan bulat non-negatif dalam format wajar apa pun, lakukan iterate di atasnya, lompati elemen sebanyak yang setiap bilangan bulat yang Anda tuju mengatakan.


Berikut ini contoh yang berhasil:

[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

Contoh lain yang berhasil, tidak semua delta sama dengan:

[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

Contoh di luar batas:

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

Aturan

  • Anda tidak boleh menggunakan cheat yang membosankan di antara yang ini , itu membuat tantangan menjadi membosankan dan tidak menarik.
  • Anda hanya harus mengembalikan / mencetak hasil akhir. Output STDERR diabaikan.
  • Anda mungkin tidak mendapatkan input sebagai string angka di basis apa pun (mis. "0102513162" untuk kasus pertama).
  • Anda harus menggunakan urutan input kiri-ke-kanan.
  • Seperti dalam contoh yang dikerjakan, jika Anda keluar dari batas, eksekusi berakhir seolah-olah sebaliknya.
  • Anda harus menggunakan 0untuk melewatkan 0 elemen.
  • Mengingat daftar kosong ( []) sebagai input, Anda harus kembali [].

Uji kasus

[]                                                     => []
[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]

Ini , jadi jawaban tersingkat menang!

Erik the Outgolfer
sumber
1
Apakah saya tetap memiliki nol trailing di array saya? akan menyelamatkan saya ~ 18 byte
Roman Gräf
@EriktheOutgolfer Bisakah kita mengeluarkan array string dan memiliki string kosong?
TheLethalCoder
1
@TheLethalCoder Maaf saya akan mengatakan tidak karena itu tidak masuk akal ... tidak bisakah Anda menghapus trailing ""s?
Erik the Outgolfer
2
@ RomanGräf Maaf tapi tidak, itu akan terlalu ambigu karena ada kasus Anda harus mengekor 0di output.
Erik the Outgolfer

Jawaban:

14

Python 2 , 36 byte

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

Cobalah online!

tongkat
sumber
Saya mengharapkan untuk menjadi outgolfed, tapi tidak terlalu buruk :)
Tn. Xcoder
Tidak bisa Anda lakukan x[0]bukan x[:1]?
Erik the Outgolfer
@EriktheOutgolfer ya, tapi itu harus daftar, jadi itu akan[x[0]]
Rod
@Rod Anda tidak menyimpan byte dengan x[:1]anyways ...f=lambda x:x and[x[0]]+f(x[x[0]+1:])
Erik the Outgolfer
13

Python 2 , 49 44 * 41 byte

Dicoret 44 masih teratur 44 :(

* -3 terima kasih hanya untuk @ ASCII .

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

Cobalah online!

Mencetak hasil yang dipisahkan oleh baris baru, karena OP diizinkan dalam obrolan. Saya tidak berpikir itu bisa menjadi lebih pendek sebagai program penuh non-rekursif .


Bagaimana cara kerjanya?

  • l=input() - Membaca daftar dari input standar.

  • while l: - Menyalahgunakan fakta bahwa daftar kosong adalah palsu dalam Python, loop sampai daftar kosong.

  • print l[0]; - Mencetak elemen pertama dari daftar.

  • l=l[l[0]+1:]- "Lewati seperti kelinci" - Memotong yang pertama l[0]+1dari daftar.

Mari kita ambil contoh

Mengingat daftar [5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0]sebagai masukan, ini melakukan kode berikut (sesuai dengan penjelasan di atas) - Mencetak item pertama dari array: 5, memangkas pertama 6: [2, 1, 2, 1, 0, 0]. Kami kemudian mencetak 2dan trim pertama 3: [1,0,0]. Demikian juga, kami menghasilkan 1, memotong 2 yang pertama, dan kami dapatkan [0]. Tentu saja, 0dicetak dan program berakhir.

Tuan Xcoder
sumber
46 byte
ASCII
11

Haskell, 29 27 26 byte

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

Disimpan 1 byte berkat Zgarb.

Cobalah online.

Cristian Lupascu
sumber
f x=xpada baris kedua menghemat satu byte.
Zgarb
9

JavaScript (ES6), 42 39 35 byte

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]

Solusi Lama 39 Bytes

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

-3 byte berkat @ThePirateBay

Johan Karlsson
sumber
39 bytea=>a.map(n=>i--||r.push(i=n),r=i=[])&&r
8

05AB1E , 10 9 byte

[¬Dg>#=ƒ¦

Menggunakan penyandian 05AB1E . Cobalah online!

Adnan
sumber
Ya, itu jauh lebih baik dari apa yang saya pikirkan.
Magic Gurita Guci
8

Mathematica, 46 44 byte

SequenceCases[#,{x_,y___}/;Tr[1^{y}]<=x:>x]&

Alternatif:

SequenceCases[#,{x_,y___}/;x>=Length@!y:>x]&
SequenceCases[#,l:{x_,___}/;x>Tr[1^l]-2:>x]&
Martin Ender
sumber
7

C #, 68 byte

a=>{for(int i=0;i<a.Count;i+=a[i]+1)System.Console.Write(a[i]+" ");}

Cobalah online!

Versi Lengkap / Terformat:

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

            f(new Collections.Generic.List<int>() { });Console.WriteLine();
            f(new Collections.Generic.List<int>() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });Console.WriteLine();
            f(new Collections.Generic.List<int>() { 5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0 });Console.WriteLine();
            f(new Collections.Generic.List<int>() { 0, 1, 0, 2, 5, 1, 3, 1, 6, 2 });Console.WriteLine();
            f(new Collections.Generic.List<int>() { 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<int>() { 0, 2, 0, 2, 4, 1, 2 });Console.WriteLine();

            Console.ReadLine();
        }
    }
}

Mengembalikan daftar lebih lama di 107 byte.

a=>{var l=new System.Collections.Generic.List<int>();for(int i=0;i<a.Count;i+=a[i]+1)l.Add(a[i]);return l;}
TheLethalCoder
sumber
2
Mengapa seseorang membatalkan ini?
TheLethalCoder
Untuk melengkapi skor Anda dan membuat 5k sempurna?
Thomas Ayoub
@ThomasAyoub Kita hanya bisa berasumsi itu seseorang dengan OCD ya.
TheLethalCoder
6

Sekam , 8 6 byte

←TU¡Γ↓

Cobalah online!

-2 byte (dan ide solusi yang sama sekali baru) terima kasih kepada Leo!

Penjelasan

Saya menggunakan fungsi pencocokan pola daftar Γ. Dibutuhkan fungsi fdan daftar dengan kepala xdan ekor xs, dan berlaku funtuk xdan xs. Jika daftar kosong, Γmengembalikan nilai default yang konsisten dengan tipenya, dalam hal ini daftar kosong. Kami mengambil fmenjadi , yang menjatuhkan xelemen dari xs. Fungsi ini kemudian diulang dan elemen yang dihasilkan dikumpulkan dalam daftar.

←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]
Zgarb
sumber
Anda dapat menjatuhkan nilai default ø, dan semuanya akan tetap berfungsi secara ajaib :)
Leo
Atau, untuk byte yang lebih sedikit lagi, tio.run/##yygtzv7//1HbhJDQQwvPTX7UNvn////RBjpGOiBsomOoYxQLAA
Leo
@ Leo Oh wow, itu pintar!
Zgarb
Mengapa Anda CW ini?
Erik the Outgolfer
@ErikTheOutgolfer Itu kesalahan (saya di ponsel saya dan tampaknya mendorong sesuatu secara tidak sengaja). Saya mencoba untuk membatalkannya ...
Zgarb
5

Python 2 , 59 55 byte

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

Cobalah online!

Arfie
sumber
1
Anda dapat menggunakan l[i:i+l[i-1]]=[]sebagai gantinya del l[i:i+l[i-1]]untuk menyimpan byte
Rod
1
56 byte
ASCII
5

Pyth, 22 Bytes

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

Menghapus byte yang tidak berguna

Dave
sumber
Saya melihat 23 byte di sana.
Erik the Outgolfer
Typo :) maaf ...
Dave
3
Saya tidak yakin mengapa Anda memilih turun. Ada kemungkinan bahwa ketika Anda diedit memperbaiki jawaban Anda ini memicu "suara turun otomatis". Alasan untuk downvote otomatis ini membingungkan dan mengerikan tetapi itu terjadi jika sistem menganggap jawaban Anda "berkualitas rendah" berdasarkan heuristiknya. Mungkin juga seseorang tidak menyukai jawaban Anda, tapi saya tidak melihat ada yang salah dengan itu saat ini jadi saya tidak yakin mengapa itu akan terjadi.
Wheat Wizard
Saya senang Anda menggunakan Pyth!
isaacg
4

Python 2 , 60 42 41 byte

-18 byte terima kasih kepada Luis Mendo
-1 byte terima kasih kepada Jonathan Frech

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

Cobalah online!

tongkat
sumber
i-=~x[i]lebih pendek satu byte dari i+=1+x[i].
Jonathan Frech
3

Retina , 36 byte

Hitungan byte mengasumsikan penyandian ISO 8859-1.

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

Input dan output dipisahkan linefeed dengan linefeed line.

Cobalah online! (Gunakan koma alih-alih umpan baris untuk memungkinkan suite pengujian yang nyaman.)

Martin Ender
sumber
3

Brain-Flak , 64 byte

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

Cobalah online!

([]){{}                          ([])}{}                         # Until the stack is empty
       (({})<>)<>                                                # Copy TOS to off stack
                 {({}[()]<{}>)}{}                                # Pop TOS times
                                        <>([]){{}({}<>)<>([])}<> # Reverse off stack
Riley
sumber
7
Sial! Saya menulis sebuah solusi, dan kemudian menggulir ke bawah untuk mempostingnya, tetapi ternyata kami menulis solusi byte-for-byte yang persis sama! Bahkan detail kecil seperti ({}[()]<{}>)vs ({}<{}>[()])adalah sama! Kebetulan sekali!
DJMcMayhem
@DJMcMayhem mencuri semua ketenaran XD
Christopher
Saya juga membuat byte untuk solusi identik dengan byte, tetapi saya memasukkannya ke dalam 4 byte . Hanya beberapa kompetisi yang tertunda :)
Wheat Wizard
2

Mathematica, 64 50 byte

±x_List:=Prepend[±Drop[x,1+#&@@x],#&@@x]
±_=±{}={}
pengguna202729
sumber
Saya tidak bisa menahan diri untuk terus bermain golf dengan kode yang rapi ini; jawaban saya di bawah.
Mr.Wizard
2

C # (.NET Core) , 68 byte

n=>{var t="";for(int i=0;i<n.Length;i+=n[i]+1)t+=n[i]+" ";return t;}

Cobalah online!

Mengambil input sebagai array bilangan bulat, mengembalikan string yang berisi nilai yang tidak dilewati.

jkelm
sumber
Cara yang bagus untuk melakukannya dan masuk dalam hitungan yang sama dengan mencetak.
TheLethalCoder
Saya suka solusi sederhana. Masih harus belajar LINQ, karena saya telah melihat bahwa memperpendek begitu banyak c # lambdas ..
jkelm
Persingkat karena Anda dapat secara implisit mengembalikan sebagian besar waktu. Meskipun itu adalah melemparkan antara pengembalian implisit dengan using System.Linq;dan loop normal.
TheLethalCoder
2

R, 58 byte

f=function(x,p=1){cat(z<-x[p]);if(p+z<sum(x|1))f(x,p+z+1)}

Fungsi rekursif. Mengambil vektor xsebagai argumen dan memulai pointer p. Ini mencetak entri yang sesuai x, memeriksa apakah p+x[p]akan keluar dari batas, dan jika tidak, memanggil fungsi untuk pointer baru.

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

Ini adalah solusi yang sebanding yang mengembalikan vektor yang tepat alih-alih mencetak angka.

JAD
sumber
bagaimana dengan input numeric(0)? alias array kosong.
Giuseppe
@ Giuseppe Saya akan melihatnya ketika saya berada di belakang pc saya
JAD
55 byte
Giuseppe
2

Java (OpenJDK 8) , 53 byte

Terima kasih kepada @ PunPun1000 dan @TheLethalCoder

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

Cobalah online!

Roman Gräf
sumber
Akankah mencetak hasilnya, seperti dalam jawaban C # saya, akan menyelamatkan Anda?
TheLethalCoder
@TheLethalCoder Ill try
Roman Gräf
Bisakah Anda menyimpan byte dengan pindah nke loop?
TheLethalCoder
Plus ini sepertinya tidak berfungsi saat ini.
TheLethalCoder
Anda kehilangan paren setelah (a[n+=1+a[n]]. Fungsi juga melempar kesalahan setelah mengeluarkan nilai yang benar, saya tidak tahu konsensus tentang apakah ini diizinkan atau tidak (pertanyaannya tidak mengatakan apa-apa untuk kesalahan standar diabaikan). Jika itu maksudnya, maka Anda dapat menghapus n<a.lengthin for loop. Akhirnya kode TIO tidak berjalan apa adanya, bahkan dengan paren. Fungsi harus a Consumer<int[]>dan digunakanfunc.accept(test)
PunPun1000
2

Alice , 15 byte

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

Cobalah online!

Input dan output daftar bilangan bulat desimal yang dipisahkan baris baris.

Penjelasan

/   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.

Menyimpan integer n dalam antrian iterator menyebabkan perintah selanjutnya dieksekusi n kali. Mirror like /bukan perintah, jadi perintah selanjutnya adalah I. Oleh karena itu jika kita hanya membaca dan mencetak nilai x , kita akan membaca nilai x +1 pada iterasi berikutnya, dengan yang terakhir berakhir di atas tumpukan. Ini melewatkan elemen daftar nomor yang diperlukan.

Martin Ender
sumber
2

Mathematica , 37 (30?)

Lebih lanjut golf metode pengguna202029 baik.

±{a_,x___}={a}~Join~±{x}~Drop~a
±_={}

Aturan tampaknya tidak secara spesifik menentukan format output, jadi mungkin:

±{a_,x___}=a.±{x}~Drop~a
±_={}

Output untuk fungsi kedua terlihat seperti: 0.2.4.{}- terutama {}masih dikembalikan untuk set kosong, sesuai dengan aturan final.

Tuan Penyihir
sumber
1
±Drop[{x},a]dapat ±{x}~Drop~akarena ±memiliki prioritas lebih rendah dari Infix.
JungHwan Min
@JungHwanMin Aku merindukan itu; Terima kasih!
Mr.Wizard
2

Gangguan Umum, 51 byte

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

Cobalah online!

Renzo
sumber
2

Brain-Flak , 64 60 byte

Hemat 4 byte berdasarkan ide dari 0 '

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

Cobalah online!

Beranotasi

([]){{}            #{Until the stack is empty}
  (({})<>())<>     #{Put n+1 to the offstack}
  {({}[()]<{}>)}{} #{Remove n items from the top}
([])}{}            #{End until}
<>                 #{Swap stacks}
{({}[()]<>)<>}<>   #{Move everything back onto the left stack decrementing by 1}
Wisaya Gandum
sumber
1

Ruby, 36 33 31

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

Cobalah online.

Cristian Lupascu
sumber
Anda diizinkan untuk mengurangi f=sebagai elemen tajuk.
canhascodez
@sethrin Bahkan jika saya perlu menyebutnya secara rekursif?
Cristian Lupascu
Hmm, pertanyaan bagus. Saya kira tidak. Omong-omong, saya sangat menyukai solusi Anda.
canhascodez
1

Python 2.4, 85 byte

Tidak ada kesempatan untuk menang dengan python, tapi saya suka oneliners dan yang ini mungkin menarik bagi orang lain.
Ternyata, ada trik sulap yang bagus untuk mengakses daftar bangunan di dalam pemahaman, tetapi hanya berfungsi dalam 2,4 dan dengan beberapa pengeditan di <= 2.3
locals()['_[1]']. Python membuat nama rahasia _[1]untuk daftar, saat itu dibuat dan menyimpannya di locals. Juga nama _[2], _[3]... digunakan untuk daftar bersarang.

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

Jadi menghitung jumlah elemen yang sudah ditambahkan ditambah jumlahnya. Hasilnya adalah indeks elemen yang diinginkan berikutnya.
Saya pikir, harus ada cara untuk menghindari pencacahan. Seperti mengakses masukan berbagai langsung oleh index: [ n[len(locals()['_[1]'])+sum(locals()['_[1]'])] for ... ]. Tapi saya tidak bisa menemukan cara yang kompak untuk melindunginya dari indeks di luar jangkauan (sambil tetap di tempat)

masukkan deskripsi gambar di sini

Possum Mati
sumber
1

Swift, 63 byte

func a(d:[Int]){var i=0;while i<d.count{print(d[i]);i+=d[i]+1}}

Ini adalah entri pertama saya, jadi saya tidak 100% yakin pada aturan, tapi semoga jawaban ini mencukupi. Saya sedikit tidak yakin aturan tentang cara memasukkan input ke dalam sistem. Saya memiliki jawaban yang lebih pendek jika saya diizinkan untuk menggunakan fungsi di suatu tempat yang dapat mengembalikan input.

Realitas Anonim
sumber
Selamat datang di PPCG! Aturan standarnya adalah Anda dapat memiliki kode yang berfungsi sebagai program penuh, jadi masukan (biasanya) di STDIN dan keluaran (biasanya) ke STDOUT, atau fungsi, jadi masukan (biasanya) dari parameter fungsi dan keluaran (biasanya) dari fungsi kembali.
Stephen
@LangkahHen - terima kasih! Saya kira itu membuat versi saya yang lain menjadi tidak valid. Berharap untuk berkontribusi lebih banyak!
AnonymousReality
1

Perl 6 , 31 byte

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

Menguji

Diperluas:

{  # 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
}

Untuk membantu memahami cara kerja kode, tanpa [*;0]ini akan menghasilkan urutan seperti berikut:

[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)
Brad Gilbert b2gills
sumber
1

Jelly , 8 byte

ḢṄ‘ṫ@µL¿

Program lengkap yang mencetak hasil masing-masing diikuti oleh baris baru (daftar kosong tidak menghasilkan keluaran).

Cobalah online!

Bagaimana?

ḢṄ‘ṫ@µ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
                                                                         '''
Jonathan Allan
sumber
Akhirnya jawaban Jelly! BTW saya bisa melakukannya dalam 7 byte.
Erik the Outgolfer
Dan saya juga memiliki fungsi daftar-kembali dalam 18 byte.
Erik the Outgolfer
1

Python 3 , 35 byte

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

Cobalah online!

Jalankan dengan di f(*l)mana linput Anda. Bisa dibilang meregangkan aturan untuk input, tapi saya hanya suka membongkar canggih.

Evpok
sumber
1

Perl 5 , 36 30 + 1 (-a) = 31 byte

$i+=$F[$i]+say$F[$i]while$i<@F

Cobalah online!

Mengambil inputnya sebagai daftar angka yang dipisahkan spasi.

Xcali
sumber