数学的帰納法の証明手法について最初に生徒に教えるとき、一般的な例は、2 N ×2 NグリッドをL字型のトロミノでタイリングし、1つの所定のグリッドスペースを空のままにする問題です。(Nは非負の整数です。)
あなたがまだそれを知らないならば、私はあなたにそれを任せます。それについて議論する多くのリソースがあります。
ここでのタスクは、Nの値と、空のままにするグリッド空間の座標を取り込んで、結果のtrominoタイルグリッドのASCII表現を出力するプログラムを作成することです。
キャラクターO
は空のスペースを埋め、トロミノの4つの回転は次のようになります。
|
+-
|
-+
-+
|
+-
|
(はい、曖昧なことができ+
ていると行く-
と|
、特定の手配のために、それは大丈夫です。)
プログラムは、N = 0(1×1グリッドの場合)から少なくともN = 8(256×256グリッドの場合)まで動作する必要があります。の座標であるxとyの値が与えられますO
:
- xは水平軸です。X = 1、左グリッド縁で、X = 2 Nは右グリッドエッジです。
- yは垂直軸です。= 1 Yは、Y = 2、上部グリッドエッジでNは、ボトムグリッドエッジです。
xとyは両方とも常に[1、2 N ]の範囲にあります。
したがって、指定されたN、x、およびyに対して、プログラムは、x、yグリッド座標を除く、L字型のトロミノで完全に並べられた2 N ×2 Nグリッドを印刷する必要がありO
ます。
例
N = 0の場合、xとyは両方とも1でなければなりません。出力は単純に
O
N = 1、x = 1、y = 2の場合、出力は
-+
O|
N = 2、x = 3、y = 2
+--+
||O|
|+-|
+--+
N = 2、x = 4、y = 1:
+-|O
||+-
|+-|
+--+
N = 3、x = 3、y = 6(このページの画像など):
+--++--+
|+-||-+|
||+--+||
+-|-+|-+
+--+||-+
||O|-+||
|+-||-+|
+--++--+
詳細
- プログラム全体を記述する代わりに、3つの整数を取る関数を記述できます。グリッド文字列を印刷または返す必要があります。
- stdin、コマンドライン(または関数を記述する場合は関数args)から入力を取得します。
- 出力には、オプションで単一のトレーニング改行を含めることができます。
- 証拠が通常提案するタイル方法を使用する必要はありません。グリッドがに加えてL字型のトロミノで満たされていることだけが重要です
O
。(トロミノは切り取られたり、グリッドの境界から出たりすることはできません。)
バイト単位の最短コードが優先されます。Tiebreakerは以前の投稿です。(便利なバイトカウンター。)
if p!=i
ます。内部のリスト.join()
は必要ありません[]
。(1-i%2)
として行うことができます~i%2
。あなたは、書き込みに反復可能アンパックを使用することができますt,l,a=[],...
よう*t,l,a=...
。 負にできないためif n==0
、チェックできます。一般的な規則では、戻る代わりに印刷が許可されているため、最終要素はおそらく各要素を印刷することで実行できます。ゼロ以外の値がTruthyである可能性があります。if n<1
n
"\n".join
if p!=i
if p-i