Anda diberi pohon, yang dalam tradisi ilmu komputer, memiliki akar di bagian atas dan daun di bagian bawah. Node daun diberi label dengan angka. Tujuan Anda adalah untuk mengambil daun khusus yang ditandai -1
dan memindahkannya ke atas untuk menjadi root baru.
[3, [[16], -1], [4]] --> [[[[4], 3], [16]]]
Anda dapat membayangkan memutar daun khusus ke atas dan membiarkan sisa pohon menggantungnya. Menyimpan pohon di pesawat sambil memutarnya untuk mendapatkan urutan kiri-ke-kanan yang benar dari semua cabang.
Pohon baru memiliki semua daun pohon asli kecuali untuk -1
.
Memasukkan:
Sebuah pohon yang daunnya bilangan bulat positif berbeda, kecuali satu daun -1
. Akar pohon akan memiliki setidaknya dua cabang yang terlepas.
Input diberikan sebagai daftar bersarang seperti [3, [[16], -1], [[4]]]
atau representasi stringnya. Pembatas adalah opsional dan terserah Anda, tetapi angka yang berdekatan perlu dipisahkan.
Keluaran:
Keluarkan atau cetak pohon terbalik dalam format yang sama dengan input Anda. Urutan entri daftar harus benar. Modifikasi di tempat baik-baik saja.
Jika input / output Anda adalah tipe data, itu harus salah satu yang mencetak dalam format yang diperlukan secara default. Built-in yang pada dasarnya melakukan tugas untuk Anda tidak diizinkan.
Kasus uji:
>> [3, [[16], -1], [4]]
[[[[4], 3], [16]]]
>> [2, -1]
[[2]]
>> [44, -1, 12]
[[12, 44]]
>> [[[[-1]]], [[[[4]]]]]
[[[[[[[[[4]]]]]]]]]
>> [[1, 2, 3], [4, -1, 6], [7, 8, 9]]
[[6, [[7, 8, 9], [1, 2, 3]], 4]]
>> [9, [8, [7, [6, -1, 4], 3], 2], 1]
[[4, [3, [2, [1, 9], 8], 7], 6]]
sumber
4
memiliki dua kurung lebih di sekitarnya dari3
, tetapi diagramed hanya 1 lapisan yang lebih dalam.Jawaban:
CJam,
242422 byteCobalah online .
Terima kasih Dennis untuk menghapus 2 byte.
Penjelasan
sumber
{s$}$
, dengan urutan terbalik. Juga, fungsi anonim akan menghemat satu byte lebih dari satu program penuh.[
.Pyth,
26252423 byteDemonstrasi. Uji Harness.
Ini mendefinisikan fungsi,,
y
yang mengambil daftar Pyth bersarang sebagai input.Ada tiga kasus untuk dieksplorasi dalam fungsi rekursif ini, karena ternary
?
,, dan fungsi coba - kecuali.x
,. Dalam fungsinya, inputnya adalahb
.Kasus pertama terjadi ketika
}\-`Jtb
benar. Ini menguji apakah ada-
dalam representasi stringtb
, "ekor" darib
, yang semuanyab
kecuali elemen pertamanya.tb
juga disimpan diJ
. Karena semua label positif kecuali untuk-1
, ini akan menjadi benar jika dan hanya jika-1
tidak ada dalam elemen pertama dari daftar.Dalam hal ini, kita menggeser
b
secara siklis dengan 1 dengan.>b1
, dan kemudian memanggil fungsi secara rekursif. Ini memastikan bahwa kita akan maju ke langkah berikutnya dengan elemen yang mengandung-1
sebagai kepala (elemen pertama) dari daftar.Dalam dua kasus berikutnya, yang di atas adalah falsy, begitu
-1
juga di kepala daftar.Dalam kasus kedua,
ahbJ
jangan melempar kesalahan. Kesalahan akan terjadi jika dan hanya jikahb
bilangan bulat. Jika ini bukan masalahnya, makahb
daftar, dan kita perlu memutar pohon sehingga-1
daunnya lebih dekat ke akar.ahbJ
menyelesaikan ini dengan menambahkanJ
sebagai elemen tunggal di akhirhb
, yang secara efektif memindahkan akar pohon darib
kehb
.Dalam kasus ketiga dan terakhir, kesalahan dilemparkan. Dengan demikian,
hb
merupakan elemen tunggal. Karena tes dalam kasus pertama,hb
harus-1
. Dengan demikian, kita dapat mengembalikan sisab
, yaituJ
, dibungkus dalam daftar, yaitu]J
.sumber