Memasukkan
Array yang dapat berisi array atau bilangan bulat positif, berurutan, naik. Array dapat memiliki sejumlah array di dalamnya, dan seterusnya dan seterusnya. Tidak ada array yang akan kosong.
Keluaran
Array ini disederhanakan
Cara menyederhanakan array
Kami akan menggunakan array, [1, [2, 3], [[4]], [[[5, 6], 7, [[[8]]]], 9]]
sebagai contoh kami.
Pertama, kami memeriksa seberapa dalam nested. Berikut adalah kedalaman dan angka pada kedalaman tersebut:
0 1
1 2 3 9
2 4 7
3 5 6
5 8
Kami membangun array output dengan mengambil angka-angka dalam array asli, mengelompokkannya dengan seberapa dalam mereka bersarang, dan kemudian bersarang grup pada kedalaman kedalaman asli elemen mereka. Atur angka dalam urutan menaik dan kedalaman naik.
Jadi, output kami adalah [1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[[8]]]]]]
Contohnya
[1, [2, 3], [[4]], [[[5, 6], 7, [[[8]]]], 9]] -> [1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[[8]]]]]]
[[[1]], [2, [3]], 4, [5, [6, [7, [8], [9, [[10]]]]]]] -> [4, [2, 5], [[1, 3, 6]], [[[7]]], [[[[8, 9]]]], [[[[[[10]]]]]]]
[1] -> [1]
[1, [2], [[3]], [[[4]]], [[[[5]]]]] -> [1, [2], [[3]], [[[4]]], [[[[5]]]]]
[1, [[[[2], 3]]] [[4]]] -> [1, [[4]], [[[3]]], [[[[2]]]]]
code-golf
array-manipulation
Daniel
sumber
sumber
8
di sekitar garisSo, our output is.....
. Namun, Anda memperbaikinya dalam cuplikan contoh.[1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[]]]], [[[[[8]]]]]]
?Jawaban:
Jelly , 8 byte
Output adalah satu level per baris, dengan baris kosong untuk level tanpa elemen. Cobalah online!
Bagaimana itu bekerja
sumber
JavaScript (ES6),
139109 bytePenjelasan menggunakan contoh input:
v
adalah metode pembantu yang mengembalikan array (dengan parameter1
) atau nilai (tanpa parameter). Kita mulai dengana = [1, [2, 3], [[4]], [[[5, 6], 7, [[[8]]]], 9]]
, yang tidak kosong. Kami menyaring array, memberi[1]
. Kami kemudian secara rekursif menyebut diri kami pada array yang disatukan, yang[2, 3, [4], [[5, 6], 7, [[[8]]]], 9]
hasilnya adalah[2, 3, 9, [4, 7], [[5, 6]], [[[[8]]]]]
. Kami sekali lagi menyaring array, yang memberi kami istilah kedua dari output kami[2, 3, 9]
, namun kami harus berhati-hati untuk tidak memasukkan array kosong di sini. Itu mereka tetap membungkus array[4, 7], [[5, 6]], [[[[8]]]]
di dalam array dan menambahkannya ke output, menghasilkan[1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[[8]]]]]]
.sumber
filter
. Mungkin mulai denganF=(x,y)=>x.filter(y)
[].concat(...v(1))
denganv(1)
menyimpan 14 byte. Mungkin ada beberapa hal lain juga, tetapi aku kesulitan melacak kurung bersarang di kepalaku.[].concat(...v(1))
adalah binatang yang sangat berbedav(1)
, kalau tidak saya tidak akan melakukannya! Sebagai contoh sederhana, mempertimbangkana = [2, [3], [[4]]]
kemudianv(1) = [[3], [[4]]]
tapi[].concat(...v(1)) = [3, [4]]
.05AB1E ,
27262521 byteCobalah online! (sedikit dimodifikasi karena
.g
belum pada TIO)Penjelasan
Strategi utama adalah untuk mengulang setiap tingkat yang mungkin dari array bersarang dan mencetak angka pada satu baris, sambil menjaga non-digit (daftar) dalam daftar satu tingkat lebih sedikit bersarang.
sumber
Perl, 52 byte
Hanya subrutin rekursif. (tidak biasa untuk jawaban Perl, saya tahu ..)
Sebut saja seperti itu:
Setiap baris output sesuai dengan level kedalaman array (maka baris kosong pada contoh di atas).
Itu bisa diubah menjadi program penuh hanya dengan beberapa byte lagi: tambahkan
-n
flag daneval
(di dalam@{ }
untuk mengubah input menjadi array dan bukan arrayref) untuk mengubah input menjadi array Perl:Pendekatan saya sebelumnya sedikit lebih lama (65 byte), tetapi masih menarik, jadi saya akan membiarkannya di sini:
sumber
JavaScript (ES6) 121
144 152Sunting Revisi banyak, 1 byte disimpan thx Patrick Roberts, dan 21 lainnya hanya meninjau kode
Fungsi rekursif bekerja pada array dalam input dan output. Aku tidak suka permintaan memiliki elemen pada kedalaman 1 sebagai elemen tunggal dalam output array (sementara tingkat yang lebih besar dikelompokkan sebagai salah satu unsur):
[l1,l1, [l2...], [[l3...]] ]
. Sementara ini akan lebih langsung:[ [l1...], [[l2...]], [[[l3...]]] ]
Newline ditambahkan agar mudah dibaca.
Beberapa catatan: saluran 2 dievaluasi berulang kali pada setiap panggilan rekursif, tetapi hanya iterasi terakhir di akhir rekursi yang berguna.
Penanganan khusus ketika
d==0
di jalur 2 menangani anomali untuk elemen level 1.Fungsi
n
rekursif menangani array yang bersarang dalam outputUji
sumber
v[0]
sebagai gantinyav.map
. Menghemat 1 byte.JavaScript (ES6) 168 byte
Demo
sumber
PHP, 145 Bytes
Kerusakan
sumber
Pyth,
1916 byteCobalah online. Suite uji.
Perhatikan ruang terdepan. Output level pada baris seperti jawaban Perl.
Penjelasan
Q
.f
item IlterT
dariQ
pada:s
um sudahI
aktifT
.p
rintisanT
ditambah spasi+
…d
.s
um item. Ini menghapus lapisan array dari setiap item. Jika tidak ada yang tersisa, hasilkan0
.=
hasilnya keQ
.W
sebelum hasilnya kosong, cetak string kosongk
dan baris baru.sumber
Haskell,
124123 byteKarena Haskell tidak mendukung daftar campuran (bilangan bulat dan daftar bilangan bulat) secara default, saya mendefinisikan jenis daftar kustom
L
. Contoh penggunaan:Catatan: butuh beberapa saat untuk berjalan, karena ia memutar semua Ints positif (32 atau 64bit) untuk mencari tingkat sarang yang dalam. Juga: tipe daftar khusus tidak dapat dicetak secara default, jadi jika Anda ingin melihat hasilnya seperti pada contoh di atas, Anda perlu menambahkan
deriving Show
kedata
deklarasi (->data L=I Int|R[L] deriving Show
). Karena tidak diperlukan untuk mengembalikan daftar-L dari suatu fungsi, saya tidak menghitung byte.Bagaimana itu bekerja:
Mengedit @BlackCap disimpan byte dengan beralih dari
>>=
kedo
notasi. Terima kasih!sumber
h l=R$do d<-[1..];[i|(e,i)<-0#l,d==e]!d
JavaScript (ES6),
127137134 byteMengambil array sebagai input dan mengembalikan sebuah string.
Uji kasus
Tampilkan cuplikan kode
sumber