Pyth có lẽ là ngôn ngữ chơi gôn đa năng thành công nhất. Mặc dù nó có phần suy giảm do các ngôn ngữ mới hơn, từ cú pháp ngắn gọn từ 2014 đến 2016 của Pyth, cập nhật liên tục, quá tải và (trong thời đại của nó), nhiều nội dung đã khiến nó trở thành yêu thích của phần lớn các câu hỏi.
Mã Pyth thường khó đọc. Ngay cả đầu ra của chế độ gỡ lỗi (Python được phiên mã) thường bao gồm một dòng dài, đôi khi có dấu ngoặc đơn được lồng sâu mười. Tuy nhiên, Pyth được định dạng chính xác là rất dễ đọc.
Đây là một đoạn mã Pyth, được viết bởi @isaacg trong Play the Word Chain .
.MlZfqhMtTeMPT+Lzs.pMyQ
Nó dễ đọc hơn nhiều như thế này.
.M Filter by gives-maximal-value of
l Z lambda Z:length(Z) over
f filter by (lambda T:
q equal
hM t T head-map tail T
eM P T end-map Pop T)
+L Append z to each element in
z
s .pM y Q flattened permutations of each subset of Q
Đối với thử thách này, chúng tôi loại bỏ khía cạnh phức tạp kolmogorov trong việc phân loại các ký tự Pyth và tập trung vào định dạng. Thay vì là mã Pyth, đầu vào sẽ bao gồm các ký tự 0123456789M
. Chữ số n
đại diện cho một chức năng của arity n
và M
đại diện cho một toán tử. Ví dụ, đoạn mã trên được biểu diễn dưới dạng 210221M101M102M011M10
. Dưới đây là các bước để hủy bỏ:
Phân tách chuỗi thành mã thông báo.
Một mã thông báo phù hợp [0-9]M*
. 0M
sẽ không xảy ra trong đầu vào.
Thêm dấu 0s.
Khi không có đủ đối số, Pyth sẽ thêm nhiều biến ẩn (biến lambda hoặc Q
s) vào mã khi cần thiết để điền vào các đối số của chương trình; chúng nên được đại diện bởi 0
s.
Nhóm mã thông báo thành dòng.
Giá trị của mã thông báo là giá trị của chữ số của nó.
Mã thông báo arity-0 (tức là 0) kết thúc một dòng.
Đối với mã thông báo arity-1, mã thông báo tiếp theo sẽ nằm trên cùng một dòng, cách nhau bởi khoảng trắng.
Đối với mã thông báo arity> = 2, các đối số của nó đi trên các dòng riêng biệt, theo thứ tự chúng xuất hiện trong mã, mỗi mã được theo sau bởi các biểu tượng con của riêng chúng, v.v. Các đối số cho mã thông báo được thụt vào cuối mã thông báo đó cộng với một khoảng trắng.
Đầu vào
Một chuỗi không trống (hoặc mảng char, mảng chuỗi có độ dài-1, v.v. được cho phép bởi Phương thức I / O tiêu chuẩn) bao gồm 0123456789M
, sẽ không chứa chuỗi con 0M
.
Đầu ra
Chuỗi được định dạng theo các quy tắc trên.
Các trường hợp thử nghiệm
210221M101M102M011M10
2
1 0
2
2
1M 1 0
1M 1 0
2M
0
1 1M 1 0
123M4M
1 2
3M
4M
0
0
0
0
0
0
0
2MM
2MM
0
0
11011100
1 1 0
1 1 1 0
0
9000000
9
0
0
0
0
0
0
0
0
0
210221M101M102M011M10
sẽ là[2,1,0,2,2,1,'M',1,0,1,'M',1,0,2,'M',0,1,1,'M',1,0]
M
s được phép là một kiểu dữ liệu khác với các số nguyên.
M
?