2006 年 5 月

2006 年 5 月に書いた日記。31 項目あります。

日記の概要

帰謬法
では、帰謬法を応用して考えてみよう。矛盾していることもあるので、厳密には、数学における帰謬法とは少し違うが、これを応用し …… (31日 21:50)
アルゴリズムと性能
ののぐらむに限ったことではないが、特定の命題を成し遂げるためのアルゴリズムは、たった一つだけであるとは限らない。例えば、 …… (30日 19:11)
解けない行
基本的に、昨日のアルゴリズムを順番に適用して行けば大抵の問題は解けるのだが、難解な問題には、それだけでは不十分なことがあ …… (29日 21:10)
再テスト
さて、テスト再開だ。PuzzleSolver には変更は必要ないので、そのままテストをすることができる。まず、シートの解答欄をクリア …… (28日 18:44)
PuzzleLine #3: 空白確定の実装
空白の確定に関する考え方は塗り潰しの確定と同じということが分かった。これを実装する場合、PuzzleLine のSolveLine メソッド・ …… (27日 23:35)
空白セルの確定方法
昨日のテストで、忘れていることが明らかになった。それは、空白セルの確定だ。ヒントの数を見て考えると、塗り潰しセルに目が行 …… (26日 22:24)
PuzzleSolver #4: いよいよテスト
さて、PuzzleSolver を仕上げてテストをやろう。PuzzleSolver は、PuzzleLine を呼ぶだけで OK だ。取りあえず、縦横全ての行に …… (25日 23:00)
PuzzleLine #2: テスト用の仮実装
さて、実装ばかりだったんので、ちょいとテストをしてみたい。そのために、今までのコードを埋め込み、テストできるような体制を …… (24日 19:18)
重複部分の確定
両端詰めのルーチンはできたので、これらを利用して、共通部分を調べる処理を作る。これさえできればあと少しのはずだ。まず、関 …… (23日 19:09)
右詰めの実装
右詰めは、左詰めと同じような考えでいける。左からではなく右から考えていけばよいのだ。左詰めの実装を逆方向にして実装する方 …… (22日 19:53)
左詰めの実装
では、もう少し掘り下げて実装してみよう。処理を 1 つの関数として考えてみる。PackFront という名前にしよう。入出力となる引征 …… (21日 18:29)
左詰めの手順
昨日のアルゴリズムは非常に人間的であり、プログラムのロジックにするには難しい。まっさらな行に対して、左詰にするのは簡単だ …… (20日 22:02)
アルゴリズム
ののぐらむの解法を考えてみよう。解答欄は 2 次元だが、解法の基本は1 つの行や列に着目することである。行や列のセル数とヒΜ …… (19日 22:59)
PuzzleSolver #3: オブジェクト構築
今日は PuzzleSolver のコンストラクタを作る。行や列、解答を独立したオブジェクトとして管理するので、PuzzleSolver はそれら …… (18日 20:38)
PuzzleAnswer: 解答の保持
設計が続く。今日は PuzzleAnswer だ。 解答を保持するクラスである。 PuzzleSolver や PuzzleLine から使われ、 解答状況は全 …… (17日 20:33)
PuzzleHintCollection: ヒント格納不変クラス
さて、昨日の考察ででてきた、ヒント値の配列のラッパを作成しよう。列挙はできないが PuzzleHintCollection という名前にする。 …… (16日 18:56)
PuzzleLine: 行・列クラス
本来の解法アルゴリズムを考えるには、まだまだ準備がいる。しばらくは設計が続きそうだ。PuzzleSolver はおいといて、PuzzleLin …… (15日 19:01)
PuzzleSolver #2: 循環参照
VBA は COM の技術基盤を使用するので、インスタンスの生存期間を、参照カウンタを使って管理する。変数にインスタンスへの参照 …… (14日 18:52)
PuzzleSolver: 問題を解くクラス
IPuzzleLoader によって問題をロードする準備ができた。次はいよいよ、自動解答機能を実装する。解答用のクラスには PuzzleSolve …… (13日 23:58)
ローダのテスト
さて、シートから問題を読めるようになったはずなので、正常に読み出せているか、テストをしてみよう。まず、当然ながら問題を用 …… (12日 17:31)
PuzzleSheetLoader #3: セルを徘徊
ヒントは列や行によって数が異なるため、単純に特定範囲という風に決めることができない。セルを順番に調べていく必要がある。し …… (11日 18:27)
PuzzleSheetLoader #2: セルの読み込み
今日は、Excel の選択範囲を読み出す処理を行なう。Excel のセル範囲は、Range というオブジェクトだ。Range を制した者は Excel …… (10日 19:05)
PuzzleSheetLoader: インタフェースの実装
IPuzzleLoader のインタフェースは作成したので、それを実装したクラスを作成しよう。まず必要となるのは、セル範囲から問題を読 …… (9日 19:51)
ArrayList #3: インデクサ
さて、これで通常のメソッドは全て実装した。最後に ArrayList で最も重要な機能を実装する。ArrayList が配列同様に振舞うため …… (8日 19:13)
ArrayList #2: 値型と参照型
昨日の続き。要素の追加をやろう。ArrayList は可変長であるため、要素数を決め打つことはできず、必要に応じて拡張していく必要 …… (7日 22:16)
ArrayList: 可変配列ラッパ
VBA の配列は少し癖があり、関数の戻り値として使用すると、値のコピーが発生してしまうため、参照型として利用できる配列が欲し …… (6日 23:03)
プログラムから見た問題
プログラムでパズルを解くためには、解答欄のサイズだけでなく、ヒントを得る必要がある。Excel のシートの表記では、人間には便 …… (5日 23:57)
入り口のインタフェース
Excel は縦横にセルが並んだワークシートを持つ。ののぐらむなどには丁度いい構造をしているため、問題は容易にワークシート上に …… (4日 22:18)
ののぐらむ
最近の本屋やコンビニには、物凄い量の雑誌がある。昔はこんなにあったかなって思うぐらい。その中でも、パズルというジャンルの …… (3日 22:43)
取りあえず完成
さて、今日で完成としよう。必要な機能は、引数無しで指定した場合、自動的にシンボルテーブルのメソッドを調べることだ。ただ …… (2日 21:57)
シンボルの列挙
では、シンボルテーブルからコードを検索してみよう。例えば、Carp のシンボルテーブルを調べてみる。    use Carp; …… (1日 23:11)


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