2006 年 5 月 13 日 23 時 58 分

PuzzleSolver: 問題を解くクラス


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


IPuzzleLoader によって問題をロードする準備ができた。
次はいよいよ、自動解答機能を実装する。

解答用のクラスには PuzzleSolver と名づけよう。
クラスのコンストラクタは、
IPuzzleLoader を引数に取り、問題を受け取る。

最低限必要なメソッド/プロパティは、以下の通り。
・自動解答を実行する: Solve()
・解答を取得する: Answer

呼び出し側の視点で考えると、
PuzzleSolver のインスタンス作成し、
Solve メソッドを呼び出して自動解答させ、
Answer プロパティを参照して答えを得るという手順となる。

では、枠組みを作ってみよう。

Private m_oColumns()    As PuzzleLine
Private m_oRows()       As PuzzleLine
Private m_oAnswer       As PuzzleAnswer

Public Sub Construct(ByVal Loader As IPuzzleLoader)
End Sub

Public Sub Solve()
End Sub

Public Property Get Answer() As PuzzleAnswer
End Property

パズルを解くためには、行や列に着目する必要がある。
そのため、IPuzzleLoader では、ヒントは数値配列だが、
PuzzleSolver では、行や列をヒントと自動解答機能を持つ
PuzzleLine クラスとして作成して効率化する。

また、PuzzleAnswer は解答状態を保持するクラスで、
PuzzleSolver や、PuzzleLine クラスから参照させ、
解答の記録、取得を行なえるようにする。

VBA では、循環参照を行なわないようにしなければならない。
PuzzleSolver が PuzzleLine を所有するので、
PuzzleLine は、PuzzleSolver の参照を持てないからだ。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.