Trong thử thách này, bạn phải phân tích một danh sách các danh sách, thành một định dạng danh sách đơn giản hơn.
Thử thách này dựa trên trình phân tích cú pháp sadflak của tôi. Trong trình phân tích cú pháp sadflak của tôi, nó đã loại bỏ tất cả (), thay thế bằng tổng của () ở đầu danh sách, để làm cho chương trình chạy nhanh hơn.
Để phân tích thành một danh sách buồn, bạn phải thực hiện điều này (điều triển khai python, sử dụng một bộ dữ liệu):
def sadlistfunc(list):
new-sadlist = [0]
for i in list:
if i == ():
new-sadlist[0]+=1
else:
new-sadlist.append(sadlistfunc(i))
Đây là một hàm đệ quy. Đối với danh sách, hãy bắt đầu một danh sách mới, bắt đầu bằng số () từ đầu vào danh sách, sau đó phần còn lại của danh sách này là phiên bản danh sách buồn của mọi danh sách không phải là () từ đầu vào danh sách. trả lại danh sách
Đầu vào:
bạn có thể nhận đầu vào ở một vài định dạng khác nhau:
- bạn có thể lấy nó làm danh sách
- bạn có thể coi nó như một tuple
- bạn có thể coi nó như một chuỗi
nếu bạn lấy nó dưới dạng một chuỗi, bạn nên sử dụng một số bộ dấu ngoặc, như xuất hiện trong bộ não. bạn không được sử dụng ký tự 1 và 2
chỉ cần hợp lý
Đầu vào sẽ luôn nằm trong một danh sách, nhưng chương trình của bạn có thể giả sử một lớp danh sách ẩn bên ngoài đầu vào, tức là () () () = (() () ()) hoặc có thể chọn không. Ví dụ sẽ có danh sách bên ngoài rõ ràng
đầu ra:
có thể là danh sách hoặc tuple hoặc chuỗi, hoặc bất cứ điều gì. bạn có thể sử dụng bất kỳ định dạng đầu ra hợp lý nào, như là sự đồng thuận meta.
Thí dụ:
(()()()) = [3]
(((()))) = [0,[0,[1]]]
((())()(())) = [1, [1], [1]]
() = invalid input, if the outside bracket is explicit.
((((())())())(())()) = [1, [1, [1, [1]]], [1]]
lưu ý rằng đầu vào không nghiêm ngặt. những đầu vào này có thể là:
[[],[],[]]
[[[[]]]]
[[[]],[],[[]]]
[]
[[[[[]],[]],[]],[[]],[]]
hoặc một số định dạng hợp lý khác
giải thích trường hợp thử nghiệm:
(()()((())())())
để "làm buồn" điều này, đầu tiên chúng ta đếm số lượng ()
()() ()
( ((())()) )
3. sau đó chúng tôi loại bỏ những thứ này và thêm 3 vào lúc bắt đầu
(3,((())()))
Có một danh sách trong danh sách này. chúng tôi buồn
((())())
bao nhiêu ()?
()
((()) )
1. chúng tôi loại bỏ và thêm 1 khi bắt đầu
(1,(()))
cái này có một danh sách
(())
đếm
()
( )
loại bỏ và thêm số lượng
(1)
sau đó chúng tôi đưa nó trở lại vào danh sách của nó
(1,(1))
sau đó chúng tôi đưa nó trở lại vào danh sách của nó
(3,(1,(1)))
làm xong
Đây là môn đánh gôn , nên ngắn hơn thì tốt hơn
((((())())())(())()) = [1, [1, [1, [1]], [1]]
nên ((((())())())(())()) = [1, [1, [1, [1]]], [1]]
.