この課題は、モンドリアン絵画記述言語(MPDL)のインタープリターのコーディングにあります。
言語定義
この言語は、長方形のスタックで動作します。長方形は、左上の座標と右下の座標で定義されます。座標は整数でなければなりません。スタックは、属性を持つ単一の長方形で初期化されます(1,1,254,254)
各コマンドの形式は次のとおりです。
<character><integer>
次の3つのコマンドがあります。
v<integer>
:スタック内の最新の長方形で、パラメーターで示された位置(パーセンテージ)で垂直分割を実行します。ソースの長方形はスタックから削除され、分割の結果の2つの新しい長方形に置き換えられます。左の長方形がスタックにプッシュされ、次に右の長方形がプッシュされます。長方形の座標は整数であるため、分数は最も小さい整数に丸められる必要があります。
h<integer>
:水平分割。上の長方形がスタックにプッシュされ、次に下の長方形がプッシュされます。
c<integer>
:スタックから最新の長方形を削除し、パラメーターとして指定された色にペイントします。1 =白、2 =赤、3 =青、4 =黄
チャレンジ
パラメータとしてペイントの説明を取り、ペイントされた長方形の256x256ビットマップ表現を作成するプログラムを作成します。長方形は、3ピクセルの黒い線で区切る必要があります。1ピクセルまたは2ピクセルの長方形は、黒以外のピクセルを境界線の黒ピクセルで非表示にする必要があります。
入力は、パラメータまたはファイルとして読み取ることができます。コマンドはスペースで区切る必要があります。入力ファイルには正しい構文があり、末尾または先頭のスペース、タブなどがないと仮定できます。出力は、画面に直接表示するか、ファイルを自分で保存できます。
最短のコードが優先されます。
テスト
次のソース:
v25 h71 v93 h50 c4 c1 c1 c2 h71 c3 h44 c1 c1
赤、青、黄色のコンポジションIIを生成する必要があります。
v30 v50 c1 c5 h70 v50 c1 c3 c2
。
v
ありh
ます