Diberikan daftar bilangan bulat yang tidak rata, mengeluarkan daftar daftar yang berisi bilangan bulat di setiap tingkat bersarang, dimulai dengan tingkat paling tidak-bertingkat, dengan nilai-nilai dalam urutan aslinya dalam daftar input saat dibaca dari kiri ke kanan. Jika dua atau lebih daftar berada pada level bersarang yang sama dalam daftar input, mereka harus digabungkan menjadi satu daftar di output. Output tidak boleh berisi daftar kosong apa pun - level bersarang yang hanya berisi daftar harus dilewati seluruhnya.
Anda dapat mengasumsikan bahwa bilangan bulat semuanya berada dalam kisaran (inklusif) [-100, 100]
. Tidak ada panjang maksimal atau kedalaman bersarang untuk daftar. Tidak akan ada daftar kosong di input - setiap tingkat bersarang akan mengandung setidaknya satu bilangan bulat atau daftar.
Input dan output harus dalam daftar / array / enumerable / iterable / etc asli bahasa Anda. format, atau dalam format wajar, tidak ambigu jika bahasa Anda tidak memiliki jenis urutan.
Contohnya
[1, 2, [3, [4, 5], 6, [7, [8], 9]]] => [[1, 2], [3, 6], [4, 5, 7, 9], [8]]
[3, 1, [12, [14, [18], 2], 1], [[4]], 5] => [[3, 1, 5], [12, 1], [14, 2, 4], [18]]
[2, 1, [[5]], 6] => [[2, 1, 6], [5]]
[[54, [43, 76, [[[-19]]]], 20], 12] => [[12], [54, 20], [43, 76], [-19]]
[[[50]], [[50]]] => [[50, 50]]
Cases[#,_?AtomQ,{i}]~Table~{i,Depth@#}~DeleteCases~{}&
Cases[#,_?AtomQ,{i}]~Table~{i,Depth@#}/.{}->Nothing&
, 2 byte lebih pendekPython 2, 78 byte
sumber
Retina , 79
Saya tahu para ahli Retina akan bermain golf ini lebih banyak, tapi ini awalnya:
Cobalah online.
sumber
Mathematica
55 6462 bytesumber
JavaScript,
11280 byteTerima kasih Neil untuk membantu mengurangi 32 byte.
sumber
!=null
sebagainull
adalah pula falsy. Inib=
juga tidak perlu. Setelah dihapus itu Anda kemudian dapat memindahkan.filter(a=>x)
ke&&b
yang kemudian mengurangi fungsi luar menjadi panggilan ke fungsi dalam yang kemudian dapat Anda sebaris. Saya meninggalkan dengan ini:f=(a,b=[],c=0)=>a.map(d=>d[0]?f(d,b,c+1):b[c]=[...b[c]||[],d])&&b.filter(d=>d)
.d[0]?
akan mengevaluasifalse
apakah itu sama dengan0
, yang berada dalam kisaran[-100,100]
. Dan begitu jugad=>d
d===+d
, karena menghemat 2 byte pada cek nol.[...,[[...]]]
) dengan benard=>d
tidak apa-apa karenad
selalu ada array atau null pada titik itu, tetapi poin yang adild[0]
, meskipun selalu adad.map
yang benar untuk array tetapi salah untuk nomor.Jelly, 24 byte
Cobalah online!
Jika daftar yang dipisahkan baris baru diizinkan, ini bisa di-golf hingga 14 byte .
Cobalah online!
sumber
Python,
10899 byteIni sepertinya agak lama bagi saya, tetapi saya tidak bisa membuat satu-liner lebih pendek, dan jika saya mencoba menggunakan
or
alih-alihif
, saya mendapatkan daftar kosong di hasilnya.Cobalah online
Sunting: Disimpan 9 byte berkat Stack Overflow
sumber
filter(None,o)
untuk menghapus daftar kosong yang ada di tingkat bersarang terluaro
.Python 3, 109 byte
Seperti biasa, fitur Python 2 bodoh seperti membandingkan
int
s danlist
s berarti bahwa Python 3 keluar di belakang. Baiklah...sumber
Perl, 63 byte
Input diharapkan masuk
@i
, output diproduksi pada@o
. (Saya harap ini bisa diterima).Contoh:
Keluaran:
sumber
Clojure, 119 byte
(116 dengan seq? Dan masukan sebagai daftar, modifikasi sepele)
Ditujukan lebih baik:
Ketika dipanggil dengan dua argumen (level saat ini dan koleksi) itu baik membuat satu elemen-unordered-map seperti
{level: value}
, atau panggilanf
secara rekursif jika non-nomor (mungkin koleksi) terlihat.Peta mini ini kemudian digabung menjadi satu
sorted-map
dan tumbukan utama ditangani olehconcat
fungsi.vals
mengembalikan nilai peta dari tingkat pertama ke yang terakhir.Jika angka adalah satu-satunya pada levelnya maka itu tetap a
vec
, yang lain dikonversi menjadi daftar olehconcat
.Jika input
list
bukan,vec
makanumber?
bisa diganti denganseq?
, anehnya vektor tidakseq?
tetapi itusequential?
. Tapi saya terlalu malas untuk mengimplementasikan versi itu, melakukan kembali contoh dll.sumber
Racket 259 byte
Tidak Disatukan:
Pengujian:
Keluaran:
sumber
MATL , 37 byte
Cobalah online!
Bekerja dengan rilis saat ini (13.0.0) dari bahasa / kompiler.
Ini menghasilkan output sebagai garis-garis nilai-nilai yang dipisahkan ruang, di mana setiap baris sesuai dengan tingkat bersarang yang sama, dan tingkat bersarang yang berbeda dipisahkan oleh baris baru.
sumber