ナンプラー、インジケータ機能

とりあえず『ナンバープレース・遊戯支援プログラム』という位置づけをでっち上げて、
ナンプラーと呼ぶことにしたです。ちなみに「数独」は二コリの登録商標とのこと。
使ってみて、解いている最中に間違った(その先続かない)状態に数字を配置したときの
警告が欲しくなったので、以下のインジケータ機能を追加しました。

  • 置ける数字の候補の表示
  • 置ける数字のないマスができたときの警告

置ける数字を判断するためには、同ラインと同ボックス(3マス×3マスの枠のこと)に
同じ数字は2つ置けないという基本ルールをチェックしなければなりません。
1マス毎に縦ライン+横ライン+ボックスを辿って数字を探すのは非効率なので、
ここでは、ライン/ボックス単位に、どの数字が使われていないかの情報をマスク値で
持つようにして計算を楽にしています。
1マスに関連するマスクは縦ライン、横ライン、ボックスの3つあります。
準備として、数字の埋まっているマスについて数字に対応するビットを求めて、
マスが属するライン/ボックスのマスク値のビットを落とします。
そして、空のマスそれぞれについて、3つのマスクのビット論理積をとっていくと、
置ける数字に対応するビットが1で残ります。これが候補のリストになります。
論理積の結果が0になった空マスは、候補なしで数字がおけないので警告対象。
候補の表示は、仮置き数字の表示色を薄くして兼用。
論理積の結果を見ると候補が1つしか残らないこともあるので、そのようなマスでは
候補を強調表示しておきます。