この課題では、リストのリストをより単純なリスト形式に解析する必要があります。
この課題は、私のsadflakパーサーに基づいています。私のsadflakパーサーでは、すべての()が削除され、リストの先頭にある()の合計に置き換えられて、プログラムの実行が速くなります。
Sad-Listに解析するには、これを行う必要があります(Python実装のこと、タプルのタプルを使用します):
def sadlistfunc(list):
new-sadlist = [0]
for i in list:
if i == ():
new-sadlist[0]+=1
else:
new-sadlist.append(sadlistfunc(i))
これは再帰的な関数です。リストの場合、リスト入力からの()の数で始まる新しいリストを開始し、このリストの残りはリスト入力からの()でないすべてのリストの悲しいリストバージョンです。リストを返します。
入力:
いくつかの異なる形式で入力することができます。
- あなたはそれをリストとして取ることができます
- あなたはタプルとしてそれを取ることができます
- あなたはそれを文字列として取ることができます
文字列として使用する場合は、brain-flakに表示されるように、いくつかのブラケットセットを使用する必要があります。文字1と2は使用できません
ただ合理的です
入力は常に1つのリスト内にありますが、プログラムは入力外の暗黙的なリストレイヤー、つまり()()()=(()()())を想定するか、または選択しない場合があります。例は明示的な外部リストを使用します
出力:
リスト、タプル、文字列、その他何でもかまいません。メタコンセンサスと同様に、合理的な出力形式を使用できます。
例:
(()()()) = [3]
(((()))) = [0,[0,[1]]]
((())()(())) = [1, [1], [1]]
() = invalid input, if the outside bracket is explicit.
((((())())())(())()) = [1, [1, [1, [1]]], [1]]
入力は厳密ではないことに注意してください。これらの入力は次のとおりです。
[[],[],[]]
[[[[]]]]
[[[]],[],[[]]]
[]
[[[[[]],[]],[]],[[]],[]]
またはその他の合理的な形式
テストケースの説明:
(()()((())())())
これを「sadify」するには、まず()の数を数えます
()() ()
( ((())()) )
3.次にこれらを削除し、最初に3を追加します
(3,((())()))
このリストには1つのリストがあります。これを悲しい
((())())
幾つ ()?
()
((()) )
1.最初に1を削除して追加します
(1,(()))
これにはリストが1つあります
(())
カウント
()
( )
削除してカウントを追加
(1)
次に、これをリストに戻します
(1,(1))
次に、これをリストに戻します
(3,(1,(1)))
やった
これはcode-golfなので、短いほど良い
((((())())())(())()) = [1, [1, [1, [1]], [1]]
必要があります((((())())())(())()) = [1, [1, [1, [1]]], [1]]
。