サブロウ丸

Sabrou-mal サブロウ丸

主にプログラミングと数学

イラストロジックを解く 第2回 基盤プログラムの説明

これから紹介するアルゴリズムを記述する上で基盤とするプログラムの説明をします。
需要は低いと思いますが、自分用ということで...

まずは問題の記述用ファイルから。
f:id:inarizuuuushi:20180106094934p:plain:w300
上のような問題に対して, 以下のファイルを作成します。
Rが行数(row)
Cが列数(column)
を表しています。
その下に, 行と列の制約をそれぞれ上(左)から書いていて、
行の制約については頭文字にr
列の制約については頭文字にcをつけます。
一番最初のtにはこの問題の補足情報を書いている行になります。
このtR, C, r, c以外ならどの文字でも構いません。



次に基盤プログラムについて

R×Cの二次元配列であるBが盤面を表しています。
r行c列のマスについて
すでに埋まることが確定しているならば1
すでに埋まらないことが確定しているならば-1
未定のマスには0を, B[r][c]に格納します。

get_puzzle関数で, 上記の問題ファイルから, 問題情報の読み込みます。
(row_keys, col_keysにそれぞれ行の制約, 列の制約情報が入ります。)

printB関数で盤面をターミナル上に出力します。
imageB関数で盤面の画像を作成します。

こんな感じですかね。次回以降はこのプログラムを元に, アルゴリズムを実装していきたいと思います。

参考サイト:
Python/Matplotlibで長方形を描画
matplotlib | Notes on Science
早く知っておきたかったmatplotlibの基礎知識、あるいは見た目の調整が捗るArtistの話 - Qiita