Haskell, 71 byte
p 1=["[]"]
p n=['[':h++t|k<-[1..n-1],h<-p k,_:t<-p$n-k]
((p=<<[1..])!!)
Hàm chính trên dòng cuối cùng lập chỉ mục thành một danh sách tất cả các mảng lồng nhau, được sắp xếp theo kích thước (số dấu ngoặc mở). Vì vậy, tất cả các mảng có kích thước tối đa 16 được liệt kê đầu tiên.
Trước tiên chúng ta hãy xem mã đẹp hơn và ngắn hơn, nhưng máy đánh chữ của Haskell từ chối chấp nhận.
p 1=[[]]
p n=[h:t|k<-[1..n-1],h<-p k,t<-p$n-k]
((p=<<[1..])!!)
Hàm p
trên đầu vào n
cung cấp một danh sách tất cả các mảng có kích thước lồng nhau n
(dấu ngoặc mở). Điều này được thực hiện đệ quy. Mỗi mảng như vậy bao gồm một số đầu h
(thành viên đầu tiên) có kích thước k
và một số đuôi t
(các thành viên khác) có kích thước n-k
, cả hai kích thước khác không. Hoặc, đó là mảng trống cho kích thướcn==1
.
Biểu thức p=<<[1..]
sau đó làm phẳng p(1), p(2), ...
thành một danh sách vô hạn duy nhất của tất cả các mảng được sắp xếp theo kích thước
[ [], [[]], [[],[]], [[[]]], [[],[],[]], [[],[[]]], [[[]],[]], [[[],[]]], ...
và các chức năng chính lập chỉ mục vào nó.
... Hoặc, nó sẽ, nếu Haskell không than vãn về "xây dựng [ing] loại vô hạn: t ~ [t]". Haskell không thể biểu diễn danh sách vô hạn ở trên có các phần tử là các mảng được lồng tùy ý. Tất cả các yếu tố của nó phải có cùng loại, nhưng loại t không thể giống như danh sách của t. Trong thực tế, chức năngp
tự nó không thể được chỉ định một loại nhất quán mà không cần gõ phụ thuộc, mà Haskell thiếu.
Vì vậy, thay vì chúng tôi làm việc trên các chuỗi dấu ngoặc, mô phỏng thao tác khuyết điểm bằng cách hành động [
và ]
ký tự. Điều này cần thêm 9 byte. Những nguy hiểm của việc chơi golf trong một ngôn ngữ an toàn loại.