Dengan kemungkinan array bertumpuk, non-kosong, bilangan bulat positif satu digit (tidak dijamin unik), mengeluarkan representasi ASCII-art sebagai pohon, menggunakan karakter gambar kotak ┌ ┴ ┐ ─ │ ┬ ┼
. (Ini disalin dari Kode Halaman 437, tetapi Anda dapat menggunakan representasi yang setara).
Setiap bilangan bulat array harus berupa daun pohon. Elemen-elemen dengan level yang sama jauh di dalam array harus ada di level pohon yang sama. Semua elemen harus dipisahkan oleh spasi yang cukup untuk menjadi berbeda (terserah Anda untuk menentukan seberapa lebar, minimal satu ruang antara).
Sebagai contoh, array yang diberikan [[1, [2]], [3, [4, 5]]]
, output pohon berikut
┌─┴─┐
┌┴┐ ┌┴─┐
1 │ 3 ┌┴┐
2 4 5
Untuk susunan [1, 2, 3]
pohon bisa terlihat seperti
┌─┼─┐
1 2 3
Tetapi array [[1, 2, 3]]
akan terlihat seperti
│
┌─┼─┐
1 2 3
Sementara array [1, [1, [1, [1]]]]
bisa terlihat seperti
┌─┴┐
1 ┌┴─┐
1 ┌┴┐
1 │
1
Sebagai contoh yang lebih rumit, [1, [[[2, 3], 4], 5]]
bisa jadi
┌┴───┐
1 ┌─┴┐
┌─┴┐ 5
┌┴┐ 4
2 3
atau beberapa variasi lainnya.
- Input dan output dapat diberikan dengan metode apa pun yang mudah .
- Anda dapat mencetaknya ke STDOUT atau mengembalikannya sebagai hasil fungsi.
- Program lengkap atau fungsi dapat diterima.
- Berapapun ruang kosong ekstranus dapat diterima, asalkan karakter berbaris dengan tepat.
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
sumber
[1,[[[2,3],4],5]]
bisa menjadi kasus uji yang menarik karena perlu memiliki root buatan memperpanjang sehingga subtree kanan tidak bertabrakan dengan subtree kiri.1
adalah array dari 3 item:[2,3]
,4
, dan5
. Tetapi 4 dan 5 tidak berdekatan.[1, [[[2, 3]], [4], 5]]
saya.Jawaban:
Python 3 ,
400393390 byteMengembalikan daftar string dari atas ke bawah.
EDIT 1: Dipotong 7 byte dengan menghindari duplikasi
┴┼
(simpanan bersih 2 byte), memotong 0 dari satu string, mengubah cara menggambar karakter dipilih dari┬┌┐
(gunakan<
bukan==
), dan menggantiL(z)
I terjawab dengane
EDIT 2: -2 bytes terima kasih kepada ovs dan -1 byte terima kasih kepada Kevin Cruijssen
Cobalah online!
Tidak disatukan
Membangun pohon dari daun ke atas, satu lapis pada satu waktu.
sumber
S,*K=' ┴┼│123456789'
.e==1
bisae<2
untuk menyimpan byte (saya tidak berpikir itu bisa menjadi 0, karena tantangan menyatakan input tidak kosong - dan input kosong sudah gagal dimax(map(L,z))
dalam kasus itu.)Bersih ,
544506 byteEscapes digunakan untuk menghindari UTF-8 yang tidak valid pada SE / TIO tetapi dihitung sebagai satu byte karena mereka benar literal
Cobalah online!
Mengambil input dalam format
L[I 3, L[I 4, I 5], I 2]..
Menghubungkan pohon-pohon dari bawah ke atas, kiri ke kanan, lalu sesuaikan jarak dari kanan ke kiri.
Prettified, semacam:
sumber
Arang ,
127123 byteCobalah online!Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Ubah arah gambar default ke atas karena kami tidak menarik apa pun ke kanan.
Langkah pertama adalah untuk mengkonversi representasi array yang bersarang ke dalam representasi indeks yang merupakan daftar semua entri bersama-sama dengan indeks dari subarrays, misalnya untuk input
q=[1, [[[2, 3]], [4], 5]]
yang5
adalahq[1][2]
dan oleh karena itu daftar yang kita inginkan adalah1, 2
. Kami mulai dengan satu entri untuk memproses yang merupakan daftar yang berisi daftar indeks saat ini (yaitu tidak ada sejauh ini) dan input asli.Ulangi array saat kami memprosesnya. (Arang yang nyaman akan terus beralih ke daftar jika Anda mendorongnya selama iterasi.)
Dapatkan array selanjutnya untuk diproses.
Apakah ini sebenarnya skalar daripada array?
Jika demikian, maka daftar yang kami miliki sebenarnya berada di daftar akhir daftar indeks.
Jika tidak, loop setiap elemen dalam array ini ...
... dan simpan dengan daftar indeks baru sejauh ini untuk diproses lebih lanjut. Indeks maksimum array juga disimpan yang digunakan untuk huruf besar-kecil elemen terakhir dari array.
Kami sekarang siap untuk mengulang daftar daftar indeks. Namun, daftar ini tidak dalam urutan leksikografis, jadi kami tidak dapat mengulanginya secara langsung.
Temukan elemen berikutnya dalam urutan leksikografis.
Hapus dari daftar.
Lompat ke posisi skalar di output. Kita dapat menghitung ini mengingat kita dapat terus menghitung jumlah skalar yang kita hasilkan dan kita juga tahu jumlah entri dalam daftar indeksnya.
Sebenarnya cetak skalar.
Ulangi entri dalam daftar indeks. Sekali lagi, ini bukan iterasi sederhana, karena entri datang berpasangan, dan kita juga harus bisa keluar dari loop.
Ekstrak indeks berikutnya dari daftar.
Jika ini bukan elemen pertama dalam daftar ...
... lalu cetak
┐
atau┬
tergantung apakah ini adalah elemen terakhir dalam daftar ...... dan cukup cetak
─
untuk mengisi entri sebelumnya di level ini ...... dan hapus variabel untuk keluar dari loop karena kita sudah selesai di sini.
Kalau tidak, jika ini adalah (elemen pertama) daftar beberapa elemen kemudian cetak
┌┴
, meninggalkan kursor di atas┴
untuk berurusan dengan induk level ini.Kalau tidak, jika ini adalah daftar 1-elemen maka cukup cetak a
│
dan naikkan garis untuk berurusan dengan induk level ini.sumber