Semua orang suka daftar bersarang! Namun, terkadang sulit untuk membuat daftar bersarang. Anda harus memutuskan apakah Anda ingin membuatnya lebih dalam, atau jika Anda perlu membuatnya lebih dangkal. Jadi untuk tantangan Anda, Anda harus "Autonest" daftar. Untuk autonest daftar, bandingkan setiap pasangan item dalam daftar.
Jika item kedua lebih kecil, pisahkan kedua elemen dengan memasukkan tanda kurung tutup dan buka di antaranya, seperti ini:
} { {2 , 1}
Misalnya,
{2, 1}
menjadi{2}, {1}
, dan{3, 2, 1}
menjadi{3}, {2}, {1}
Jika item kedua sama, maka tidak ada perubahan. Misalnya,
{1, 1, 1}
tetap sama, dan{2, 1, 1, 1}
akan menjadi{2}, {1, 1, 1}
.Jika item kedua lebih besar, maka sarang setiap item berikut satu tingkat lebih dalam. Misalnya,
{1, 2}
akan menjadi{1, {2}}
dan{1, 2, 3}
akan menjadi{1, {2, {3}}}
Tantangan
Anda harus menulis program atau fungsi yang memuat daftar angka, dan mengembalikan daftar yang sama setelah diautonisasi. Ambil input ini dalam format daftar asli bahasa Anda (atau alternatif terdekat) atau sebagai string. Anda tidak harus menggunakan kurung kurawal seperti yang saya lakukan dalam contoh saya. Anda dapat menggunakan jenis kurung mana saja yang paling alami dalam bahasa Anda, selama ini konsisten. Anda dapat dengan aman menganggap daftar hanya akan berisi bilangan bulat Anda juga dapat mengasumsikan daftar tersebut memiliki setidaknya 2 angka di dalamnya. Berikut ini beberapa contoh IO:
{1, 3, 2} --> {1, {3}, {2}}
{1, 2, 3, 4, 5, 6} --> {1, {2, {3, {4, {5, {6}}}}}}
{6, 5, 4, 3, 2, 1} --> {6}, {5}, {4}, {3}, {2}, {1}
{7, 3, 3, 2, 6, 4} --> {7}, {3, 3}, {2, {6}, {4}}
{7, 3, 1, -8, 4, 8, 2, -9, 2, 8} --> {7}, {3}, {1}, {-8, {4, {8}, {2}, {-9, {2, {8}}}}}
Celah standar berlaku, dan jawaban tersingkat dalam byte menang!
[-100, 100]
tetapi saya tidak berencana memberikan input raksasa.{2, 1}
menjadi{2}, {1}
" Bagaimana itu satu tingkat lebih tinggi ? Satu tingkat lebih tinggi adalah{2}, 1
. Apa yang Anda miliki adalah level yang sama.Jawaban:
MATL ,
4843 byteIni menggunakan tanda kurung siku dalam input dan output. Output memiliki koma tanpa spasi sebagai pemisah.
Perhatikan bahwa output tidak akan ditafsirkan sebagai daftar bersarang di MATL. Itu akan dalam bahasa lain, dan itu memenuhi spesifikasi output dalam tantangan.
Cobalah online!
Penjelasan
sumber
Haskell, 96 byte
Contoh penggunaan:
('{':).f $ [7,3,3,2,6,4]
->"{7},{3,3},{2,{6},{4}}"
.Karena Haskell tidak memiliki daftar bersarang, saya mengembalikan hasilnya sebagai string. Algoritma bersarang mudah: a) nomor cetak, b) jika nomor berikutnya lebih besar (kurang, sama), cetak
,{
(},{
,,
), c) melakukan panggilan rekursif dengan sisa daftar, d) mencetak}
jika nomor tersebut adalah kurang dari yang berikutnya, e) sertakan semuanya dalam{
dan}
.sumber
Python 3, 98 byte
Contoh:
sumber
Java 8
197 187 193192 192 byteTerima kasih kepada semua komentator yang bekerja dengan saya di keburukan ini. Itu golf ke 187 byte sampai saya menemukan bug yang mahal. Namun karena kekuatan
Sihir Hitam"lari ke" operator "->" jumlah byte pada 192 byte yang sehat.sumber
length,
C,
145138 byteTerima kasih kepada Giacomo selama 7 byte!
Input diambil melalui argumen baris perintah dan output diberikan melalui stdout.
contoh dijalankan:
sumber
t=atoi(*v);
alih-alihsscanf(*v,"%d",&t);
Sumberfor(;*++v;)
untuk menyimpan pertama 4 dan kemudian insted dariif(t<p)P"}{");if(t>p)P"{",n++);
penggunaant>p?P"}{"):P"{",n++);
selama 10 lebih.CJam,
51494846 byteMengeksploitasi fakta bahwa jumlah braket terakhir adalah satu lebih dari jumlah pasangan yang berdekatan yang meningkat dalam array.
Dan saya tidak tahu
ew
operator sebelumnya bahwa saya harus mengimplementasikan ulang.Inputnya adalah daftar yang dipisahkan oleh ruang, dibatasi oleh tanda kurung siku.
Penjelasan
Saya akan mencari tahu bagaimana melakukan ini dengan nested array yang sebenarnya daripada mengandalkan prettyprinting.
Akhirnya,
setara denganjawaban MATL yang dipukuli.sumber
Retina,
7170 byteDaftar yang dipisahkan spasi, dengan kurung kurawal:
{1 2 3}
. Angka negatif tidak didukung, jadi jika itu masalah, saya hanya akan menghapus jawaban saya. Retina + angka negatif = tidak layak.Cobalah online
sumber
JavaScript (ES6), 73 byte
Penjelasan: Kasus item yang sama berturut-turut mudah; item baru saja ditambahkan ke array paling dalam (di sini diwakili oleh
m
variabel;n
adalah array yang berisim
sebagai elemen terakhirnya, sedangkano
outputnya). Untuk kasus item yang berbeda, item selalu masuk dalam array terdalam baru, satu-satunya perbedaan adalah apakah array itu adalah saudara kandung atau anak dari array terdalam sebelumnya. Untuk golfiness ekstra saya mengatur array sehingga item awal dihitung sebagai item yang sama berturut-turut.sumber