Dalam tantangan ini, Anda harus menguraikan daftar daftar, ke dalam format daftar yang lebih sederhana.
Tantangan ini didasarkan pada parser sadflak saya. Dalam parser sadflak saya, semua () dihapus, diganti dengan jumlah () pada awal daftar, untuk membuat program berjalan lebih cepat.
Untuk menguraikan Sad-List, Anda harus melakukan ini (implementasi python, menggunakan tuple tuple):
def sadlistfunc(list):
new-sadlist = [0]
for i in list:
if i == ():
new-sadlist[0]+=1
else:
new-sadlist.append(sadlistfunc(i))
Ini adalah fungsi rekursif. Untuk daftar, mulailah daftar baru, mulai dengan jumlah () dari input daftar, kemudian daftar ini adalah versi sedih-daftar setiap daftar yang bukan () dari input daftar, secara berurutan. kembalikan daftar.
Memasukkan:
Anda dapat mengambil input dalam beberapa format berbeda:
- Anda dapat menganggapnya sebagai daftar
- Anda bisa menganggapnya sebagai tuple
- Anda dapat menganggapnya sebagai string
jika Anda menganggapnya sebagai string, Anda harus menggunakan beberapa tanda kurung, seperti yang ditampilkan di brain-flak. Anda tidak boleh menggunakan karakter 1 dan 2
masuk akal saja
Input akan selalu berada di dalam satu daftar, tetapi program Anda dapat mengasumsikan lapisan daftar implisit di luar input, yaitu () () () = (() () () ()), atau mungkin memilih untuk tidak melakukannya. Contohnya akan dengan daftar luar eksplisit
keluaran:
mungkin daftar atau tupel atau string, atau apa pun. Anda dapat menggunakan format output apa pun yang masuk akal, seperti konsensus meta.
Contoh:
(()()()) = [3]
(((()))) = [0,[0,[1]]]
((())()(())) = [1, [1], [1]]
() = invalid input, if the outside bracket is explicit.
((((())())())(())()) = [1, [1, [1, [1]]], [1]]
perhatikan bahwa input tidak ketat. input ini bisa berupa:
[[],[],[]]
[[[[]]]]
[[[]],[],[[]]]
[]
[[[[[]],[]],[]],[[]],[]]
atau format lain yang masuk akal
menjelaskan test case:
(()()((())())())
untuk "membuat sedih" ini, pertama kita hitung jumlah ()
()() ()
( ((())()) )
3. lalu kita hapus ini, dan tambahkan 3 di awal
(3,((())()))
ada satu daftar dalam daftar ini. kami sedih ini
((())())
berapa banyak ()?
()
((()) )
1. kami menghapus dan menambahkan 1 di awal
(1,(()))
ini memiliki satu daftar di dalamnya
(())
menghitung
()
( )
hapus dan tambahkan hitungan
(1)
lalu kita masukkan ini kembali ke daftar
(1,(1))
lalu kita masukkan ini kembali ke daftar
(3,(1,(1)))
selesai
Ini kode-golf , jadi lebih pendek lebih baik
sumber
for... in
, buat saya ingat mengapa Anda tidak pernah menggunakannya: Fiddle((((())())())(())()) = [1, [1, [1, [1]], [1]]
seharusnya begitu((((())())())(())()) = [1, [1, [1, [1]]], [1]]
.Jawaban:
Pyth , 13 byte
Suite uji .
Bagaimana itu bekerja
sumber
]
.CommonLisp, 49 byte
mengambil input sebagai daftar daftar.
Cobalah online!
sumber
Brachylog , 21 byte
Cobalah online!
sumber
Mathematica, 42 byte
Menghindari rekursi eksplisit dengan menggunakan
//@
(MapAll
) yang memetakan fungsi di atas setiap node dalam pohon. Ini juga berarti bahwa fungsi dijalankan dari daun ke atas. Namun, itu juga akan diterapkan{}
yang bisa berubah dalam{0}
proses. Itu sebabnya kami menghitung dan menghapus{0}
saja{}
.sumber
Retina , 42 byte
Cobalah online!
sumber
Clojure, 59 byte
Tidak jauh berbeda dengan jawaban CommonLisp . Its
count
danremove
tampaknya menerima konstruk sedikit lebih bagus, di sini saya harus menggunakan set.sumber
Sebenarnya , 12 byte
Cobalah online!
Mengambil input sebagai daftar kurung kotak yang dipisahkan koma dengan tanda kurung luar yang eksplisit.
Penjelasan:
sumber
Python 2 ,
694645 byteCobalah online!
sumber
f=
bytecount Anda, karena Anda menggunakan fungsi f, dan menyebutkannya jika tidak akan merusak solusi AndaJelly , 10 byte
Cobalah online!
Mengambil input sebagai daftar daftar daftar ...
Tentu saja menggunakan algoritma yang digunakan jawaban lain. ;)
sumber
Haskell , 102 byte
Cobalah online!
Karena Haskell diketik dengan ketat, tidak ada daftar yang disarang secara sewenang-wenang. Sebagai obat
data L=I Int|T[L]deriving Show
menyatakan daftar bersarang seperti pohon dengan Ints atau daftar kosong sebagai daun.Masukan seperti dalam format contoh kedua, dengan konstruktor tambahan
T
sebelum setiap penjepit pembukaan:T[T[T[]],T[],T[T[]]]
. Hal yang sama berlaku untuk output, dengan setiap angka didahului oleh konstruktorI
. Fungsif
melakukan saddening .Output untuk kasus uji:
sumber
Javascript (ES6), 77 byte
Golf:
Tidak Disatukan:
Demo
Tampilkan cuplikan kode
sumber