Diberikan array bilangan bulat non-negatif, tugas Anda adalah hanya menyimpan elemen tertentu, seperti dijelaskan di bawah ini.
Katakanlah arraynya adalah
[1, 3, 2, 4, 11, 5, 2, 0, 13, 10, 1]
.Pertama, ambil elemen pertama array
n
,. Simpann
elemen pertama dan buang elemen berikutnya (buang elemenn+1
th). Array baru adalah[1, 2, 4, 11, 5, 2, 0, 13, 10, 1]
.Kemudian, Anda ambil elemen mengikuti yang dihapus dan melakukan hal yang sama persis. Menerapkan kembali proses, kita dapatkan
[1, 2, 11, 5, 2, 0, 13, 10, 1]
Anda ulangi prosesnya sampai Anda tiba di luar batas array / tidak ada elemen yang tersisa di array. Kami berhenti karena
11
lebih tinggi dari panjang array.Sekarang Anda harus menampilkan hasilnya.
Input / output dapat diambil / disediakan dalam bentuk standar apa pun. Array tidak akan pernah kosong, dan hanya akan berisi bilangan bulat non-negatif. Semua celah standar dilarang.
Ini adalah kode-golf sehingga kode terpendek dalam byte menang!
Uji Kasus
Input -> Output [1, 2, 3, 4, 5] -> [1, 3, 4] [6, 1, 0, 5, 6] -> [6, 1, 0, 5, 6] [1, 3, 2, 4, 11, 5, 2, 0, 13, 10, 1] -> [1, 2, 11, 5, 2, 0, 13, 10, 1] [2, 2, 2, 2, 2, 2] -> [2, 2] [1, 2, 3, 1, 2, 3, 1, 2, 3] -> [1, 2] [3, 1, 2, 4, 0] -> [] *
* Kasus tes terakhir melibatkan 0
, jadi saya memutuskan untuk mengirim proses sehingga lebih jelas:
[3, 1, 2, 4, 0] --> [3, 1, 2, 0] --> [1, 2, 0] --> [1, 0] --> [0] --> [] )
2
dihapus pada langkah pertama alih-alih3
?[1, 2, 3, 1, 2, 3, 1, 2, 3]
n
" baru Anda, Anda selalu mulai dari awal array untuk menjagan
elemen? Tidak (seperti yang saya pikir pada pandangan pertama) menyimpann
elemen di mana elemen pertama adalahn
Anda mengevaluasi?Jawaban:
Pyth, 18 byte
Coba di sini.
sumber
JavaScript (ES6), 45 byte
Uji kasus
Tampilkan cuplikan kode
sumber
Haskell , 50 byte
g.pure.(0:)
adalah fungsi anonim mengambil dan mengembalikan daftarInt
s, gunakan sebagai(g.pure.(0:))[1,2,3,4,5]
.Cobalah online!
Bagaimana itu bekerja
g
mengambil argumen tuple yang mewakili daftar split.a
adalah daftar elemen awal disimpan pada langkah sebelumnya,_
adalah elemen yang akan dibuang,b
adalah elemen berikutnya yang akan digunakan sebagai panjang, danc
merupakan elemen yang tersisa.b
, maka perpecahan baru dilakukan dang
berulang. Kalau tidak, ia berhenti dengana
hasilnya.g.pure.(0:)
memulai semuanya dengan memanggilg
dengan tuple([],0:l)
, di manal
input dan0
segera dibuang olehg
.pure
di sini menggunakanApplicative
instance untuk tuple (biner), dan dengan tipe hasil dengan([Int],[Int])
mudah menempatkan argumennya sebagai elemen kedua dalam tuple dengan[]
sebagai elemen pertama.sumber
Python 3 , 59 byte
Cobalah online!
sumber
Haskell , 51 byte
Cobalah online! Contoh penggunaan:
f [1,2,3,4,5]
.sumber
Java 8, 68 byte
Lambda ini menerima dapat berubah
List<Integer>
(mendukungremove(int)
, misalnyaArrayList
). Output adalah input yang dimutasi. Tetapkan untukConsumer<List<Integer>>
.Cobalah secara Online
Aliran kontrol untuk masalah ini sangat mengganggu. Setiap iterasi kita harus menghapus elemen dan mendapatkan elemen di posisi berikutnya, dan kedua operasi ini memerlukan pemeriksaan jangkauan (dan keduanya dapat memicu penyelesaian program). Salah satu strategi adalah untuk melakukan kedua operasi dalam satu iterasi loop tunggal, dengan pembaruan indeks dijaga oleh jangkauan jangkauannya sendiri. Strategi lain, yang ternyata lebih pendek, adalah bergantian antara operasi setiap loop iterasi, yang merupakan solusi yang dilakukan oleh solusi ini.
sumber
APL (Dyalog Classic) , 32 byte
Penjelasan
Cobalah online!
sumber
Perl 5 , 38 + 1 (-a) = 39 byte
Cobalah online!
sumber
Haskell, 99 byte (88 tanpa lekukan)
sumber
VI,
3125 byte<C-?>
bersesuaian denganControl + ?
, dan<Esc>
untukEscape
jelas. Masing-masing dihitung untuk 1 byte (lihat meta ).Memasukkan
File input harus berisi 1 integer per baris + 1 baris kosong di akhir, contoh:
Kita dapat melihat setiap baris dari file input sebagai elemen array, seperti
1 :: 2 :: 3 :: 4 :: 5 :: []
, seperti dalam beberapa bahasa (caml misalnya).Meluncurkan
Anda dapat memulai vi dengan perintah berikut, dan ketikkan solusi langkah demi langkah:
Anda juga dapat menggunakan one-liner ini:
Ini harus menghasilkan file
output
dengan hasil yang benar dari file inputinput
.Penjelasan
Untuk memperkenalkan solusi, pertama-tama saya akan menyajikan solusi 19-byte yang bekerja hanya untuk array tanpa 0. Solusi ini menggunakan makro rekursif, digunakan dengan sedikit modifikasi dalam solusi akhir:
Penjelasan solusi parsial
Kuncinya di sini adalah dengan menggunakan
"0
register untuk menyimpan integer saat ini (dan break baris, sangat penting). Oleh karena itu, perintah ini@0
memungkinkan untuk melompatn
baris (panggiln
nilai"0
). Jika lompatan melebihi jumlah baris dalam file, makro akan gagal, sehingga program akan berhenti (di luar batas array, seperti yang diperlukan).Tetapi solusi ini tidak berfungsi jika inputnya berisi
0
. Memang, jika"0
nilai register sama0
, maka@0
akan melompat satu baris (karena break baris), tidak0
seperti yang kita suka. Jadi perintah berikutnya (dd
) tidak akan menghapus bilangan bulat 0, tetapi 1 (tidak benar).Solusi yang valid untuk mengatasinya
0
adalah dengan selalu menambah bilangan bulat sebelum menariknya, dan menguranginya tepat setelahnya. Dengan demikian,@0
perintah akan melompatn+1
baris (n
adalah integer saat ini yang telah bertambah). Sebuahk
perintah maka perlu untuk pergi ke barisn
(baris sebelumnya). Menggunakan trik ini, sebuah baris kosong diperlukan di akhir file input, untuk menghindari lompatan di luar array (dengan demikian, mengakhiri program), karena kita sekarang selalu lompatn+1
baris, sebelum melompat ke baris sebelumnya.Penjelasan solusi akhir
Menulis konten makro di dalam file sebelum mendaftar memungkinkan untuk menyimpan beberapa byte:
qa...q
dan membatalkan semua perubahan setelah mendaftar:let @a="..."
)Suntingan
# 1
sumber
Pyth, 32 byte
Cobalah online
sumber
#VlQ.(Q@QN;Q
melakukan pekerjaan dalam 12 byte, dan saya cukup yakin itu bisa bermain golf lebih banyak lagiW<Zl=Q+<Q@QZ>Qh@QZ=Z@QZ)Q
(25). pendekatan pizzakingme jauh lebih baik.#VlQ .(Q@QN)%;Q
. Umpan balik dari pegolf Pyth akan disambut, saya masih belajar juga!C # (.NET Core) , 74 byte
Cobalah online!
Ini menerima daftar int dan memodifikasinya. Saya telah melihat beberapa jawaban Java yang menutupi impor dengan menggunakan nama yang sepenuhnya memenuhi syarat dalam definisi argumen Lambda. Jika ini tidak diizinkan, saya dapat menghapus jawaban ini.
sumber
System.Collections.Generic.List<int>
alih - alihusing System.Collections.Generic
dan menambahkannya ke jumlah byte. Tapi saya kira itu tidak ada bedanya dengan menggunakan array.using
jika Anda mau; selama lambda itu sendiri tidak bergantung pada pernyataan Anda tidak perlu memasukkannya dalam jumlah byte. Secara pribadi saya selalu menggunakan nama-nama yang sepenuhnya memenuhi syarat dalam kode uji hanya agar jelas dan mudah diverifikasi apa yang impor menggunakan lambda.R ,
6453 byteFungsi rekursif. Memiliki satu input wajib
a
,, daftar untuk dilewati.i
adalah indeks dari jumlah hal untuk dilompati (default ke1
), dand
merupakan indeks dari item berikutnya setelah nilai yang diperlukan telah dihapus, yang juga merupakan indeks dari item yang akan dihapus. Pengembaliannumeric(0)
, vektor kosong, untuk output kosong.Cobalah online!
Tidak Disatukan:
sumber