Saya tidak percaya kita belum memiliki ini .. Ini salah satu struktur data yang paling penting dalam pemrograman, namun masih cukup sederhana untuk mengimplementasikannya dalam kode-golf :
Tantangan
Tugas Anda adalah mengimplementasikan tumpukan yang memungkinkan mendorong dan membuka nomor, untuk menguji implementasi Anda dan membuat I / O tetap sederhana, kami akan menggunakan pengaturan berikut:
- Input akan menjadi daftar bilangan bulat non-negatif
Setiap bilangan bulat positif menunjukkan dorongan ( n ) dan setiap 0 menunjukkan pop () - membuang elemen atas.
- Output akan menjadi tumpukan yang dihasilkan
Contoh
Misalnya jika kita diberikan :
Outputnya adalah:
Aturan
- Input akan menjadi daftar bilangan bulat non-negatif dalam format I / O standar apa pun
- Anda dapat menggunakan bilangan bulat negatif untuk menandai akhir dari aliran bilangan bulat
- Output akan berupa daftar / matriks / .. dari stack yang dihasilkan
- pilihan Anda di mana elemen atas akan (di awal atau akhir), output hanya harus konsisten
- output fleksibel (mis. integer dipisahkan oleh baris baru akan baik-baik saja), satu-satunya hal yang penting adalah urutannya
- Anda dapat menggunakan bilangan bulat negatif untuk menandakan bagian bawah tumpukan
- Anda dijamin tidak akan pernah ada ketika tumpukan kosong
Contohnya
[] -> []
[1] -> [1]
[1,0,2] -> [2]
[4,0,1,12] -> [12,1]
[8,3,1,2,3] -> [3,2,1,3,8]
[1,3,7,0,0,0] -> []
[13,0,13,10,1,0,1005,5,0,0,0] -> [13]
[12,3,0,101,11,1,0,0,14,0,28] -> [28,101,12]
Jawaban:
MATL , 6 byte
Input adalah vektor deretan angka.
Tumpukan terakhir ditampilkan terbalik, dengan elemen terbaru di bawah ini.
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
Java (JDK 10) , 42 byte
Karena "[keluaran] fleksibel [...], satu-satunya hal yang penting adalah urutan", ini mengubah array input menjadi
0
array -minminasi. Contoh:[1,0,2]
akan mengembalikan[2,0,2]
yang akan ditafsirkan sebagai = .[2
,0,2
]
[2]
Cobalah online!
Versi sebelumnya:
Java (JDK 10) , 60 byte
Cobalah online!
Kredit:
Jika saya dapat mengakhiri program dengan kesalahan: 55 byte
(meskipun semuanya dimodifikasi dengan benar)
Cobalah online!
sumber
>0
karena tidak akan pernah ada nol di awal daftar (yang akan menyiratkan bagian atas tumpukan berada di-1
).Sed, 17 Bytes
:;s/[0-9]\+,0//;t
-3 byte terima kasih kepada @ OMᗺ, -1 terima kasih kepada @eggyal
Karena Anda dijamin tidak akan pernah mengeluarkan daftar kosong, Anda tidak perlu apa-apa selain mesin keadaan terbatas yang diulang. Ekspresi reguler adalah alat untuk membangun mesin negara yang terbatas, dan
sed
dapat digunakan kembali. Ini pasangan yang dibuat di surga.Mengambil input dari stdin, seperti:
echo '[12,3,0,101,11,1,0,0,14,0,28]' | sed ':;s/[0-9]\+,0,//;t'
Menghasilkan tumpukan secara terbalik:
[12,101,28]
Bisa lebih kecil dua byte jika
sed
kelas karakter lokal saya mengerti seperti suka\d
, tetapi tidak karena alasan tertentu.sumber
g
akan dihemat - 4 byte: Cobalah secara online!PowerShell ,
464140 byteCobalah online!
Mengambil input melalui splatting, misalnya
$z=@(12,3,0,101,11,1,0,0,14,0,28); .\implement-stack.ps1 @z
, yang pada TIO bermanifestasi sebagai argumen terpisah.-5 byte berkat mazzy.
-1 byte swapping
$_
ke1
sumber
$agrs
? :)$args|%{$x,$a=&({$_,$_+$a},{$a})[!$_]};$a
?.\implement-stack.ps1 @z
(tidak$z
), jika tidak , Anda hanya melewati array sebagai argumen pertama / satu-satunyaC (gcc) ,
62605655 byte-2-6 byte berkat l4m2-1 byte berkat ceilingcat .
Menggunakan gagasan yang diizinkan dari -1 array yang diakhiri.
f()
menyebut dirinya secara rekursif, sampai sepenuhnya terluka, dan kemudian mundur melalui daftar.r
melacak berapa banyak angka yang harus dibuang sebelum mencetak sesuatu. Meningkat jika item saat ini adalah 0, berkurang jika tidak. Jika 0, kita tidak perlu membuang, dan dapat mencetak nomornya.Cobalah online!
sumber
f(l)int*l;
=>f(int*l)
?r=0
tampaknya tidak bergunaHaskell, 28 byte
Cobalah online!
sumber
R , 45 byte
Cobalah online!
sumber
F
juga akan membuat Anda menjadi 48 byte tetapi ini lebih bersih imhoR+pryr
danReduce
solusinya adalah 44 bytePython 2 ,
595751 byteCobalah online!
sumber
Jelly , 6 byte
Cobalah online!
Bagaimana itu bekerja
sumber
[1,3,7,0,0,0]
, misalnya, akan dipecah menjadi[[1,3,7],[],[],[]]
, dan setiap langkah dari pops pengurangan-kiri pada elemen array kiri.Brain-Flak ,
4036 byteCobalah online!
Berkat @Nitrodon untuk -4 byte.
Karena Brain-Flak sudah menggunakan tumpukan, ini adalah teka-teki yang bagus untuk Brain-Flak.
sumber
{{}<>{}<>}
dapat disingkat menjadi{{}<>}
.Bahasa Wolfram (Mathematica) , 28 byte
Cobalah online!
sumber
b
itu bukan nol.)a___
terlebih dahulu. Orang dapat melihatnya dengan mencobaReplaceList[#, {a___, b_, 0, c___} :> {a, c}] &
. Pada catatan yang terkait,StringReplace
sebenarnya serakah, jadi pengajuan ini tidak akan bekerja denganStringReplace
(dengan pola sepertia___~~b_~~"0"~~c___
)Python 2 , 48 byte
Cobalah online!
sumber
2*0**x
akan selalu demikian0
. Saya jelas melewatkan sesuatu.x=0
, dalam hal ini 2.Spasi , 89 byte
Huruf
S
(spasi),T
(tab), danN
(baris baru) ditambahkan hanya sebagai penyorotan.[..._some_action]
ditambahkan sebagai penjelasan saja.Membawa input-list baris-baru dipisahkan dengan
-1
untuk menunjukkan bahwa kita sudah selesai dengan input.Cobalah online .
Penjelasan dalam pseudo-code:
sumber
Python 2 ,
60595756 byteCobalah online!
Disimpan:
sumber
0
danin
JavaScript, 40 byte
Output dalam urutan terbalik.
Cobalah online
1 byte diselamatkan berkat Herman L .
sumber
a=>a.map(x=>x?o.push(x):o.pop(),o=[])&&o
lebih pendek satu byte(un)shift
sebelum saya melihat keluaran bisa dibalik.o
direferensikan dalam callback setelah didefinisikan dalam argumen kedua.05AB1E , 9 byte
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Alternatif 9 byte :
Cobalah secara online untuk memverifikasi semua kasus uji .
Penjelasan:
PS: Jika output seharusnya dibalik agar sesuai dengan kasus pengujian dalam deskripsi tantangan, kita dapat menambahkan trailing
R
ke versi kedua (jadi 10 byte ), yang membalikkan daftar. Cobalah secara online atau verifikasi semua kasus uji .sumber
Retina 0.8.2 , 18 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Awali ekstra
,
.Memproses semua operasi pop.
Hapus
,
jika masih ada.Membalikkan angka akan dikenakan biaya 8 byte tambahan:
sumber
<number>, 0
sublist dengan tidak ada.Ruby , 36 byte
Cobalah online!
Lambda anonim Output dalam urutan terbalik.
sumber
Brain-Flak , 36 byte
Cobalah online!
sumber
Brain-Flak , 32 byte
Cobalah online!
Menggunakan
-1
untuk menandakan akhir array (tetapi nomor berapa pun akan melakukannya)sumber
V , 10 byte
Cobalah online!
Penjelasan
Setara dalam Vim , 16 byte
Cobalah online!
Penjelasan
Hampir sama, kecuali merekam makro
q
dan menyebutnya secara rekursif:sumber
Java 10,
7572 byteOutput dipisahkan oleh koma. Bagian atas tumpukan adalah yang terakhir. Cobalah online di sini .
Terima kasih kepada Olivier Grégoire untuk bermain golf 2 byte.
Silakan periksa jawaban Java Kevin Cruijssen dan Olivier Grégoire juga. Mereka mengambil pendekatan berbasis daftar sebagai gantinya, dengan yang terakhir mengalahkan tambang dengan margin yang rapi.
Tidak Disatukan:
sumber
Stack
. +1 dari saya.n->{var s="";for(int i:n)s=(s+","+i).replaceAll(",\\d+,0$","");return s;}
(73 byte), tetapi menempatkan,
angka sebelum, bukan setelah.n->{var s=""+n;for(int x:n)s=s.replaceFirst("\\d+, 0,? ?","");return s;}
(72 byte), menggunakan daftar alih-alih array dan mengacaukan output karena dapat mengembalikan hal-hal seperti "[, 2]"$
untuk menyimpan byte tambahan, karena setiap yang0
kita tambahkan dihapus segera.GolfScript ,
1412 byteCobalah online!
sumber
Perl 5
-p
, 17 byteTerima kasih @sundar dan @DomHastings
Cobalah online!
sumber
> <> , 25 byte
Cobalah online! (input harus ditulis dalam ascii. jika tidak gunakan ini )
Bagaimana itu bekerja
i:?\~~
memeriksa 0, terus~~
menghapus entri sebelumnya. jika tidak turun ke:(0:/:^?
yang memeriksa -1 (tidak ada input lagi), lalu membungkus untuk menghapus -1 dan loop:!?l:!<oan;
yang menampilkan setiap nomor dengan baris baru, lalu berakhir ketika tumpukan dikosongkansumber
Sekam , 6 byte
Karena belum ada jawaban Husk dan itu golf-lang favorit saya:
Cobalah online!
Penjelasan
Solusi alternatif, 6 byte
Alih-alih membalik, kita juga bisa membalik daftar dan kemudian menggunakan lipatan-kanan:
Ḟ?:tø↔
sumber
brainfuck ,
214150 byteMembaca input sebagai angka yang dipisahkan oleh baris baru. Ini harus menyertakan satu baris tambahan. Juga tidak mengharapkan angka nol di setiap nomor. Output sebagai daftar terpisah baris baru yang serupa
Cobalah online!
Penjelasan
yang sebenarnya bukan penjelasan tetapi sebenarnya hanya versi yang saya kerjakan dengan komentar dan hal-hal yang mungkin atau mungkin tidak benar-benar bermanfaat bagi siapa punsumber
Brachylog , 21 byte
Cobalah online!
-1 byte, dan yang lebih penting ini terasa seperti cara yang kurang kikuk dalam melakukan ini.
Pengganti 21 alternatif:
∋0∧ℕ₁;0;P↺c;Qc?∧P,Q↰|
Cobalah online!Kode lama:
22 byte
Cobalah online!
sumber
Peringatan: Banyak garis terjadi. Anda telah diperingatkan.
CJam , 17 byte
Kode paling berbahaya
(Asumsikan elemen tumpukan dapat dipisahkan oleh hanya spasi di output dan bahwa array input dapat berupa apa pun yang kita inginkan)
Cobalah online!
Penjelasan
Kode Alternatif # 1, 27 byte
(Mengasumsikan elemen stack harus berupa output dalam format yang ditunjukkan dalam pertanyaan dan bahwa array input dapat berupa bentuk apa pun yang kita inginkan)
Cobalah online!
Penjelasan
Kode Alternatif # 2, 24 byte
(Asumsikan elemen tumpukan dapat disusun dalam output dan bahwa array input harus dalam format yang tepat seperti yang ditunjukkan dalam pertanyaan)
Cobalah online!
Penjelasan
Kode paling aman untuk ini, 34 byte
(Mengasumsikan elemen stack harus berupa output dalam format yang ditunjukkan dalam pertanyaan dan bahwa array input harus dalam format yang tepat seperti yang ditunjukkan dalam pertanyaan)
Cobalah online!
Penjelasan
Terima kasih kepada @ Jo King untuk menunjukkan bahwa yang dengan keluaran yang disusun tidak valid karena hal-hal seperti
[12]
dan[1,2]
tidak dapat dibedakan.Terima kasih juga kepada @ Jo King yang menyediakan alternatif yang sangat cocok untuk output yang dikumpulkan dan memotong 9 byte!
sumber
[12]
dan[1,2]
. Namun, versi 27 byte tampaknya baik-baik saja, meskipun Anda dapat menyingkirkan spasi dan kurung selama 18 byte]S*
(3) sedangkan koma menggunakan]',*
(4)Merah , 64 byte
Cobalah online!
sumber