Pythは、Pythonに基づいたゴルフ言語です。プレフィックス表記を使用し、各コマンドは異なるアリティ(受け入れる引数の数)を持ちます。
あなたの仕事は、(存在しない)Pythライクな言語Pithの構文チェッカーを書くことです。
髄の構文
Pithには8つの単一文字コマンドしかありません。
01234()"
01234
それぞれが対応する数のアリティを持っているため、その後に多くの引数が必要です。例えば、
400010
正しい髄プログラムがあるためである4
四つの引数が続いている0
0
0
と10
されたのは、最後の1
単一の引数が続きます0
。これを視覚化するために、次のツリーを見ることができます。
R
|
4
|
-------------
| | | |
0 0 0 1
|
0
どこR
がルートノードです。これについて考える別の方法は、各数値が、対応するノードが上のツリーに持つ子の数を指すということです。
次に、複数のベースコマンドを使用した別の有効なPithプログラムを示します。
210010
対応する
R
|
-------------
| |
2 1
| |
--------- 0
| |
1 0
|
0
一方、
3120102100
イニシャルには2つの引数しかないため、正しいPithプログラムではありません。3
次のツリーを見るとわかります。
R
|
3
|
------------------------ ??
| |
1 2
| |
2 ------
| | |
------ 1 0
| | |
0 1 0
|
0
次に(
、無制限を開始し、無制限を)
終了します。無制限の引数は(貪欲に)任意の数の引数を取り、親コマンドに対する単一の引数としてカウントします。プログラムの終了までにまだ開いている無制限は自動的に閉じられます。)
何unboundedsが開いていない場合、コマンドはエラーではありません-それだけで何もしません*。
たとえば、Pithプログラム
)31(0)0(201000100
木に対応
R
|
3
|
------------------------------
| | |
1 0 (
| |
( -----------------------------
| | | | | |
0 2 0 0 1 0
| |
------- 0
| |
0 1
|
0
空の無制限は大丈夫()
なので、有効なPithプログラムも同様です。
無制限の無効なPithプログラムは
12(010
2
は1つの引数(無制限)のみを受け取るためです。
最後に、"
文字列を開始および終了します。これは常に0アリティであり、単一の引数としてカウントされます。たとえば、
2"010""44)()4"
これは、2
2つの文字列引数が渡されるだけです"010"
と"44)()4"
です。無制限のように、文字列も空である可能性があり、プログラムの終了までに閉じられていない文字列は自動的に閉じられます。
*この部分は実際には、元のPyth異なるないような場合には何かを1)
1-アリティを終了し、エラーを発生させます。
入出力
入力は、文字のみで構成される単一の空でない文字列になります 01234()"
。オプションで、追加の末尾の改行が常に存在すると想定できます。このチャレンジのために関数または完全なプログラムを書くことができます。
入力が構文的に有効なPithである場合は真偽値を出力し、そうでない場合は偽の値を出力する必要があります。真実と偽の値は修正する必要がある1
ため、1つの有効なプログラムに対して出力することはできません。2
別の。
得点
これはコードゴルフなので、最小バイトのコードが優先されます。
テストケース
真実:
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
偽物:
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())"))
(これは正しいと思います)。
()210""
に多くのノーオペレーションがあるため)
[( [2 [0] [1 [0] ] ] [0] [1 [0]] [0] ]
ませんか?あなたが持っているものには、2、0、0、1、および0のブランチがあります-2番目のブランチはそこにあるべきではありません。