Pyth , Python'u temel alan bir golf dilidir. Her komutun farklı bir özelliği (kabul ettiği argüman sayısı) olduğunda önek notasyonu kullanır.
Görevin bir (olmayan) Pyth benzeri dil, Pith için bir sözdizimi denetleyicisi yazmaktır.
Pith'in sözdizimi
Pith sadece 8 tane tek char komutuna sahiptir:
01234()"
01234
her biri karşılık gelen sayının açıklığına sahiptir ve bu nedenle ondan sonra birçok argümanın olmasını bekler. Örneğin,
400010
çünkü doğru bir Mantar programı 4
, dört bağımsız değişken tarafından takip edilir 0
0
0
ve 10
A, bunlardan sonuncusu, 1
tek değişken, ardından 0
. Bunu görselleştirmek için aşağıdaki ağaca bakabiliriz:
R
|
4
|
-------------
| | | |
0 0 0 1
|
0
R
kök düğüm nerede . Bunu düşünmenin alternatif bir yolu, her sayının ilgili düğümün yukarıdaki ağaçtaki çocuk sayısını ifade etmesidir.
İşte birden fazla temel komut ile başka bir geçerli Pith programı:
210010
karşılık gelen
R
|
-------------
| |
2 1
| |
--------- 0
| |
1 0
|
0
Diğer yandan,
3120102100
olduğu değil başlangıç çünkü doğru Mantar programı 3
sadece biz ağacın altında bakarak görebilirsiniz iki argüman vardır:
R
|
3
|
------------------------ ??
| |
1 2
| |
2 ------
| | |
------ 1 0
| | |
0 1 0
|
0
Sonra (
bir sınırsız başlar ve sınırlanmamış )
bir biter. Sınırlandırılmamış herhangi bir sayıda argüman alır (iştahla) ve herhangi bir üst komut için tek bir argüman olarak sayılır. Programın sonunda hala açık olan sınırsızlar otomatik olarak kapatılır. Bir )
hayır unboundeds açık olduğunda komut bir hata değildir - bu sadece bir şey yapmaz *.
Örneğin, Pith programı
)31(0)0(201000100
ağaca karşılık gelir
R
|
3
|
------------------------------
| | |
1 0 (
| |
( -----------------------------
| | | | | |
0 2 0 0 1 0
| |
------- 0
| |
0 1
|
0
Boş sınırsızlar tamam, ()
geçerli bir Pith programı.
Sınırlandırılmamış geçersiz bir Pith programı
12(010
çünkü 2
tek bir bağımsız değişken (sınırsız) alır.
Son olarak, "
her zaman 0 arite olan ve tek bir argüman olarak sayılan bir dize başlar ve biter;
2"010""44)()4"
Bu sadece bir 2
dize iki dize argüman geçirilen "010"
ve "44)()4"
. Sınırsız olanlar gibi, dizeler de boş olabilir ve programın sonundaki kapatılmamış dizeler otomatik olarak kapatılır.
* Bu kısım aslında orijinal Pyth farklıdır yapar böyle bir durumda bir şeyler 1)
1-Arity biten ve bir hata yükselterek.
Giriş çıkış
Giriş, yalnızca karakterlerden oluşan boş olmayan tek bir dize olacaktır 01234()"
. İsteğe bağlı olarak, her zaman ek bir son satırın olduğunu varsayabilirsin. Bu görev için bir işlev veya tam bir program yazabilirsiniz.
Girdi sözdizimsel olarak geçerliyse, aksi takdirde sahte bir değerse, bir gerçek değeri vermelisiniz. Hakikat ve sahte değerler sabit olmalıdır, bu nedenle 1
geçerli bir program ve diğeri için çıktı alamazsınız 2
.
puanlama
Bu kod golf, yani en az bayttaki kod kazanıyor.
Test durumları
Truthy:
0
)
(
"
()
""
10
400010
210010
("")00
3"""""
(0)))0)1)0
2(2(2(0)0)0)0
2"010""44)()4"
)31(0)0(201000100
())2)1))0"3())"))
3("4321("301(0)21100"4")"123"00)40"121"31000""01010
Falsy:
1
1(310
(1)0)
12(010
4"00010"
3120102100
20(2((0)(0)))
2(2(2(0)0)0)01)
4(0102)00)00000
2"00"("00"2(""))
())2)1))0"3())"))
(ki bence doğru olmalı).
()210""
no-op bir sürü)
[( [2 [0] [1 [0] ] ] [0] [1 [0]] [0] ]
mı? Sahip olduğunuzun dalları 2, 0, 0, 1 ve 0'dır - ikincisi orada olmamalıdır.