Pyth mungkin bahasa tujuan serba guna yang paling sukses. Meskipun agak menurun karena bahasa yang lebih baru, dari 2014 hingga 2016 sintaksis Pyth yang ringkas, pembaruan terus-menerus, kelebihan beban, dan (untuk zamannya) banyak bawaan membuatnya menjadi favorit bagi sebagian besar pertanyaan.
Kode Pyth seringkali sulit dibaca. Bahkan output dari mode debug (transpiled Python) sering terdiri dari garis panjang, kadang-kadang dengan tanda kurung bersarang sepuluh dalam. Namun, Pyth yang diformat dengan benar sangat mudah dibaca.
Berikut adalah sepotong kode Pyth, yang ditulis oleh @isaacg di Play the Word Chain .
.MlZfqhMtTeMPT+Lzs.pMyQ
Jauh lebih mudah dibaca seperti ini.
.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
Untuk tantangan ini, kami menghilangkan aspek kompleksitas-kolmogorov dari pengkategorian karakter Pyth dan fokus pada pemformatan. Alih-alih menjadi kode Pyth, input akan terdiri dari karakter dalam 0123456789M
. Digit n
mewakili fungsi arity n
, dan M
mewakili operator. Misalnya, kode di atas direpresentasikan sebagai 210221M101M102M011M10
. Berikut adalah langkah-langkah untuk menghapuskan:
Pisahkan string menjadi token.
Token cocok [0-9]M*
. 0M
tidak akan terjadi pada input.
Tambahkan trailing 0s.
Ketika tidak ada cukup argumen, Pyth menambahkan sebanyak mungkin variabel implisit (variabel lambda atau Q
s) ke kode sebagaimana diperlukan untuk mengisi argumen program; ini harus diwakili oleh 0
s.
Grup token menjadi beberapa baris.
Arity dari token adalah nilai digitnya.
Token arity-0 (yaitu a 0) mengakhiri garis.
Untuk toity-1 token, token berikutnya harus berada pada baris yang sama, dipisahkan oleh spasi.
Untuk arity> = 2 token, argumennya pergi pada baris yang terpisah, dalam urutan mereka muncul dalam kode, masing-masing diikuti oleh sub-dokumen mereka sendiri dan seterusnya. Argumen untuk token dimasukkan ke akhir token itu ditambah satu spasi.
Memasukkan
String nonempty (atau array char, array string panjang-1, dll. Sebagaimana diizinkan oleh Metode I / O Standar) yang terdiri dari 0123456789M
, yang tidak akan mengandung substring 0M
.
Keluaran
String diformat sesuai dengan aturan di atas.
Uji kasus
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
adalah[2,1,0,2,2,1,'M',1,0,1,'M',1,0,2,'M',0,1,1,'M',1,0]
M
s diizinkan untuk menggunakan tipe data yang berbeda dari bilangan bulat.
M
?