Pyth belki de en başarılı genel amaçlı golf dilidir. Daha yeni diller sonucunda bir şekilde düşüş gösterse de, 2014'ten 2016'ya kadar Pyth'in özlü sözdizimi, sürekli güncellemeler, aşırı yükleme ve (dönemi için) birçok yerleşik, soruların çoğunluğu için bir favori haline getirdi.
Pyth kodunu okumak genellikle zordur. Hata ayıklama modunun (aktarılan Python) çıktısı bile, bazen on derinlikte iç içe parantez içeren uzun bir çizgiden oluşur. Ancak, doğru biçimlendirilmiş Pyth çok okunabilir.
İşte Word Zinciri'nde @isaacg tarafından yazılmış bir parça Pyth kodu .
.MlZfqhMtTeMPT+Lzs.pMyQ
Bunun gibi çok daha okunabilir.
.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
Bu zorluk için, Pyth karakterlerini kategorize etmenin kolmogorov-karmaşıklık yönünü ortadan kaldırıyoruz ve biçimlendirmeye odaklanıyoruz. Pyth kodu olmak yerine, girdi içindeki karakterlerden oluşacaktır 0123456789M
. Rakam n
, bir arity fonksiyonunu n
ve M
bir operatörü temsil eder. Örneğin, yukarıdaki kod olarak temsil edilir 210221M101M102M011M10
. Sesi kaldırmak için gereken adımlar şunlardır:
Dizeyi belirteçlere ayırın.
Bir token eşleşir [0-9]M*
. 0M
girişte gerçekleşmez.
Sondaki 0'ları ekleyin.
Yeterli bağımsız değişken olmadığında, Pyth Q
koda programın bağımsız değişkenlerini doldurmak için gereken sayıda kapalı değişken (lambda değişkeni veya s) ekler ; bunlar 0
s ile temsil edilmelidir .
Grupları satırlar halinde gruplandırın.
Bir token'ın rakamı, rakamının değeridir.
Bir arity-0 jetonu (yani bir 0) bir çizgiyi bitirir.
Bir arity-1 jetonu için, bir sonraki jeton boşlukla ayrılmış olarak aynı satıra gitmelidir.
Bir arity> = 2 belirteci için, argümanları kodda göründükleri sırayla, her biri kendi alt argümanları vb. İle ayrı satırlara gider. Bir jetonla ilgili bağımsız değişkenler, jetonun sonuna ve bir boşluk içine girintilenir.
Giriş
Alt dizeyi 0123456789M
içermeyen, içermeyen, boş olmayan bir dize (veya char dizisi, uzunluk-1 dizelerinin dizisi vb.) 0M
.
Çıktı
Yukarıdaki kurallara göre biçimlendirilmiş dize.
Test senaryoları
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
olur[2,1,0,2,2,1,'M',1,0,1,'M',1,0,2,'M',0,1,1,'M',1,0]
M
s tamsayılardan farklı bir veri türü olmasına izin verilirse zorluğu biraz değiştirir .
M
?