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
0
untuk 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 kode-golf , jadi jawaban tersingkat menang!
code-golf
array-manipulation
Erik the Outgolfer
sumber
sumber
""
s?0
di output.Jawaban:
Python 2 , 36 byte
Cobalah online!
sumber
x[0]
bukanx[:1]
?[x[0]]
x[:1]
anyways ...f=lambda x:x and[x[0]]+f(x[x[0]+1:])
Python 2 ,
49 44 *41 byteDicoret 44 masih teratur 44 :(
* -3 terima kasih hanya untuk @ ASCII .
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 pertamal[0]+1
dari 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 mencetak2
dan trim pertama 3:[1,0,0]
. Demikian juga, kami menghasilkan1
, memotong 2 yang pertama, dan kami dapatkan[0]
. Tentu saja,0
dicetak dan program berakhir.sumber
Haskell,
29 2726 byteDisimpan 1 byte berkat Zgarb.
Cobalah online.
sumber
f x=x
pada baris kedua menghemat satu byte.JavaScript (ES6),
423935 byteSolusi Lama 39 Bytes
-3 byte berkat @ThePirateBay
sumber
a=>a.map(n=>i--||r.push(i=n),r=i=[])&&r
05AB1E ,
109 byteMenggunakan penyandian 05AB1E . Cobalah online!
sumber
Mathematica,
4644 byteAlternatif:
sumber
C #, 68 byte
Cobalah online!
Versi Lengkap / Terformat:
Mengembalikan daftar lebih lama di 107 byte.
sumber
Sekam ,
86 byteCobalah online!
-2 byte (dan ide solusi yang sama sekali baru) terima kasih kepada Leo!
Penjelasan
Saya menggunakan fungsi pencocokan pola daftar
Γ
. Dibutuhkan fungsif
dan daftar dengan kepalax
dan ekorxs
, dan berlakuf
untukx
danxs
. Jika daftar kosong,Γ
mengembalikan nilai default yang konsisten dengan tipenya, dalam hal ini daftar kosong. Kami mengambilf
menjadi↓
, yang menjatuhkanx
elemen darixs
. Fungsi ini kemudian diulang dan elemen yang dihasilkan dikumpulkan dalam daftar.sumber
Python 2 ,
5955 byteCobalah online!
sumber
l[i:i+l[i-1]]=[]
sebagai gantinyadel l[i:i+l[i-1]]
untuk menyimpan bytePyth, 22 Bytes
Menghapus byte yang tidak berguna
sumber
Python 2 ,
604241 byte-18 byte terima kasih kepada Luis Mendo
-1 byte terima kasih kepada Jonathan Frech
Cobalah online!
sumber
i-=~x[i]
lebih pendek satu byte darii+=1+x[i]
.Retina , 36 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Input dan output dipisahkan linefeed dengan linefeed line.
Cobalah online! (Gunakan koma alih-alih umpan baris untuk memungkinkan suite pengujian yang nyaman.)
sumber
Brain-Flak , 64 byte
Cobalah online!
sumber
({}[()]<{}>)
vs({}<{}>[()])
adalah sama! Kebetulan sekali!Mathematica,
6450 bytesumber
C # (.NET Core) , 68 byte
Cobalah online!
Mengambil input sebagai array bilangan bulat, mengembalikan string yang berisi nilai yang tidak dilewati.
sumber
using System.Linq;
dan loop normal.R, 58 byte
Fungsi rekursif. Mengambil vektor
x
sebagai argumen dan memulai pointerp
. Ini mencetak entri yang sesuaix
, memeriksa apakahp+x[p]
akan keluar dari batas, dan jika tidak, memanggil fungsi untuk pointer baru.Ini adalah solusi yang sebanding yang mengembalikan vektor yang tepat alih-alih mencetak angka.
sumber
numeric(0)
? alias array kosong.Java (OpenJDK 8) , 53 byte
Terima kasih kepada @ PunPun1000 dan @TheLethalCoder
Cobalah online!
sumber
n
ke loop?(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 menghapusn<a.length
in for loop. Akhirnya kode TIO tidak berjalan apa adanya, bahkan dengan paren. Fungsi harus aConsumer<int[]>
dan digunakanfunc.accept(test)
Alice , 15 byte
Cobalah online!
Input dan output daftar bilangan bulat desimal yang dipisahkan baris baris.
Penjelasan
Menyimpan integer n dalam antrian iterator menyebabkan perintah selanjutnya dieksekusi n kali. Mirror like
/
bukan perintah, jadi perintah selanjutnya adalahI
. 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.sumber
Mathematica , 37 (30?)
Lebih lanjut golf metode pengguna202029 baik.
Aturan tampaknya tidak secara spesifik menentukan format output, jadi mungkin:
Output untuk fungsi kedua terlihat seperti:
0.2.4.{}
- terutama{}
masih dikembalikan untuk set kosong, sesuai dengan aturan final.sumber
±Drop[{x},a]
dapat±{x}~Drop~a
karena±
memiliki prioritas lebih rendah dariInfix
.Gangguan Umum, 51 byte
Cobalah online!
sumber
Brain-Flak ,
6460 byteHemat 4 byte berdasarkan ide dari 0 '
Cobalah online!
Beranotasi
sumber
Ruby,
36 3331Cobalah online.
sumber
f=
sebagai elemen tajuk.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 dilocals
. Juga nama_[2]
,_[3]
... digunakan untuk daftar bersarang.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)sumber
Swift, 63 byte
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.
sumber
Perl 6 , 31 byte
Menguji
Diperluas:
Untuk membantu memahami cara kerja kode, tanpa
[*;0]
ini akan menghasilkan urutan seperti berikut:sumber
Jelly , 8 byte
Program lengkap yang mencetak hasil masing-masing diikuti oleh baris baru (daftar kosong tidak menghasilkan keluaran).
Cobalah online!
Bagaimana?
sumber
Python 3 , 35 byte
Cobalah online!
Jalankan dengan di
f(*l)
manal
input Anda. Bisa dibilang meregangkan aturan untuk input, tapi saya hanya suka membongkar canggih.sumber
APL (Dyalog Unicode) , 20 byte SBCS
Cobalah online!
sumber
Perl 5 ,
3630 + 1 (-a) = 31 byteCobalah online!
Mengambil inputnya sebagai daftar angka yang dipisahkan spasi.
sumber
PowerShell , 25 byte
Cobalah online!
sumber