Pyth adalah bahasa golf yang didasarkan pada Python. Ini menggunakan notasi awalan, dengan setiap perintah memiliki arity yang berbeda (jumlah argumen yang diterimanya).
Tugas Anda adalah menulis pemeriksa sintaksis untuk bahasa yang mirip Pyth (tidak ada), Pith.
Sintaksis empulur
Empulur hanya memiliki 8 perintah char tunggal:
01234()"
01234
masing-masing memiliki arity dari angka yang sesuai, dan karenanya mengharapkan banyak argumen setelahnya. Sebagai contoh,
400010
adalah program empulur yang benar karena 4
diikuti oleh empat argumen 0
0
0
dan 10
, yang terakhir 1
diikuti oleh argumen tunggal 0
. Untuk memvisualisasikan ini, kita dapat melihat pohon berikut:
R
|
4
|
-------------
| | | |
0 0 0 1
|
0
di mana R
simpul root. Cara alternatif untuk memikirkan hal ini adalah bahwa setiap angka mengacu pada jumlah anak yang dimiliki simpul yang sesuai pada pohon di atas.
Berikut ini adalah program empulur lain yang valid, dengan lebih dari satu perintah dasar:
210010
sesuai dengan
R
|
-------------
| |
2 1
| |
--------- 0
| |
1 0
|
0
Di samping itu,
3120102100
adalah tidak program empulur yang benar karena awal 3
hanya memiliki dua argumen, yang dapat kita lihat dengan melihat pohon di bawah ini:
R
|
3
|
------------------------ ??
| |
1 2
| |
2 ------
| | |
------ 1 0
| | |
0 1 0
|
0
Selanjutnya (
dimulai tanpa batas, dan )
berakhir tanpa batas. Yang tidak terikat mengambil sejumlah argumen (dengan rakus), dan dianggap sebagai argumen tunggal untuk perintah induk mana pun. Setiap batasan yang masih terbuka pada akhir program akan ditutup secara otomatis. Sebuah )
perintah bukanlah kesalahan jika tidak ada unboundeds terbuka - itu hanya tidak apa-apa *.
Misalnya, program Empulur
)31(0)0(201000100
sesuai dengan pohon
R
|
3
|
------------------------------
| | |
1 0 (
| |
( -----------------------------
| | | | | |
0 2 0 0 1 0
| |
------- 0
| |
0 1
|
0
Kosong tanpa ()
batas tidak apa-apa, begitu juga program empulur yang valid.
Program empulur yang tidak valid dengan tidak terikat adalah
12(010
karena 2
hanya menerima satu argumen (yang tidak terikat).
Akhirnya, "
dimulai dan diakhiri string, yang selalu 0 arity dan dihitung sebagai argumen tunggal, misalnya
2"010""44)()4"
yang hanya 2
sedang melewati dua argumen string "010"
dan "44)()4"
. Seperti tidak terikat, string juga dapat kosong, dan string yang tidak tertutup pada akhir program secara otomatis ditutup.
* Bagian ini berbeda dengan Pyth asli yang sebenarnya tidak melakukan sesuatu dalam kasus seperti 1)
, mengakhiri 1-arity dan meningkatkan kesalahan.
Input output
Input akan berupa string tunggal yang tidak kosong yang hanya terdiri dari karakter 01234()"
. Anda dapat mengasumsikan bahwa tambahan baris baru tambahan selalu ada. Anda dapat menulis fungsi atau program lengkap untuk tantangan ini.
Anda harus menampilkan nilai kebenaran jika inputnya empati valid secara sintaksis, atau nilai palsu sebaliknya. Nilai kebenaran dan kepalsuan harus diperbaiki, sehingga Anda tidak dapat menampilkan 1
untuk satu program yang valid dan yang 2
lain.
Mencetak gol
Ini adalah kode-golf, jadi kode dalam byte paling sedikit menang.
Uji kasus
Benar:
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())"))
(yang seharusnya benar, saya pikir).
()210""
dengan banyak no-ops)
[( [2 [0] [1 [0] ] ] [0] [1 [0]] [0] ]
? Yang Anda miliki memiliki cabang 2, 0, 0, 1 dan 0 - yang kedua tidak boleh ada.