Pyramid Schemeは@ ConorO'Brienによって開発されている言語です。Pyramid Schemeでは、作成するコードは次のようになります。
^ ^
/ \ /3\
/ \ ---
/ + \
^-------^
/9\ /3\
/123\ ---
-----
さて、このコードには2つの明らかな性質があります。解析するのが難しく、書くのが難しいということです。Conorは最初の問題を解決しましたが、2番目の問題を解決するのはあなたの仕事です。
上記のコードは、PyramidSchemeインタープリターによって、次のようにネストされた文字列配列に処理されます。
[["+", ["9123", "3"]], "3"]
あなたの仕事は、ネストされた文字列の配列を与え、再作成されたPyramidSchemeコードを出力または返すプログラムまたは関数を書くことです。入力配列は常に有効であると想定できます。
ピラミッドは二等辺三角形です。上部は、^
斜めに離れると辺傾き、/
及び\
、下です-
。下の2つの角は空であるか、引数である他のピラミッドの開始点を含んでいます。中央には、改行を無視してピラミッドの名前が表示されます。
パーサーがコードを使用可能な形式に変換する方法を次に示します。まず、最上位のピラミッドをスキャンします。引数をとらない場合、単一の文字列でそれを表し、先に進みます。それ以外の場合は、配列["name",[arg1,arg2]]
またはとして表現され["name",[arg1]]
ます。引数は、ピラミッドの左下および右下のピラミッドです。これは、上記の文字列または複数の配列のいずれかです。これはLispにやや似ていることに気付くかもしれません。その場合、言語名であるひどいしゃれに気づいたかもしれません。ピラミッドが完全に表示された後、パーサーは次のピラミッドに進みます。
これはcode-golfで、最短のコードが勝ちます!
テストケース:これらは有効な出力だけではなく、有効な出力の例です。
[["+", ["9123", "3"]], "3"]
^ ^
/ \ /3\
/ \ ---
/ + \
^-------^
/9\ /3\
/123\ ---
-----
[["out", [["chr", ["72"]], ["chr", ["101"]]]], ["out", [["chr", ["108"]]]], ["out", [["chr", ["108"]]]], ["out", [["chr", ["111"]]]]]
^ ^ ^ ^
/ \ / \ / \ / \
/out\ /out\ /out\ /out\
^-----^ -----^----- -----^
/ \ / \ / \ / \
/chr\ /chr\ /chr\ /chr\
^----- -----^ -----^ ^-----
/ \ / \ / \ / \
/72 \ /101\ /108\ /111\
----- ----- ----- -----
[ ["+", [ ["asdfghjkl"], ["do", [ "1" ]] ]] ]
^
/ \
/ + \
/ \
^-------^
/a\ /d\
/sdf\ /o \
/ghjkl\ ^-----
-------/1\
---
2番目のテストケースでは、2番目と3番目のout
ピラミッドの両方に["chr", ["108"]]
パラメーターとしてa があり、2つのトップレベルのピラミッドで共有される1つのピラミッドスタックに折りたたまれています。これは、コードがサポートする有効な最適化ですが、完全にオプションです。スコアリングは、出力の長さに基づいていません。
不思議なことに、9126 3
トップレベルピラミッドの暗黙的な印刷のために最初のケースが表示され、2番目のケースが印刷されHello
、最後の1つは構文エラーです。
あなたは、入力はスペースのみを除く、印刷可能なASCIIが含まれていると仮定して^
、/
、\
、と-
。入力は常に有効で、少なくとも1つのピラミッドが含まれます。配列または入力文字列のサイズに制限はありませんが、言語のデフォルトの整数型が無限精度であり、コンピューターに任意のメモリがあるかのようにコードを書くことができます。入力を単一の文字列として取得する場合、配列を区切るのに適切なもの(カンマ、スペースなど、印刷可能なasciiであり、not "
または[]
)を使用できます。全体を囲む括弧を含める必要はなく、代わりに区切り文字で区切られた複数の配列を使用します。
出力はゴルフする必要はありません。余分なスペースを挿入するか、ピラミッドを必要以上に大きくすることができます。トップレベルのピラミッドは最初の行になければなりません。出力は、改行を含む文字列または文字列のリストでなければなりません。
ピラミッドを最適にゴルフするコードのバージョンを含む人は誰でも、賛成票/報奨金の形でいくらかの担当者を受け取ることができます(ただし、おそらく賛成票だけです)。