M.Hiroi's Home Page

Memorandum

プログラミングに関する覚え書や四方山話です。
[ Home ]
2003 年 1 月 2 月 3 月 4 月 5 月 6 月 7 月 8 月 9 月 10月 11月 12月

2003 年 12 月

12月30日

今年も残りわずかとなりました。M.Hiroi's Home Page を開設してから3年半になりますが、おかげさまでカウンタも 108,000 を突破いたしました。リンクしていただいているホームページ管理者の皆様、そして、なによりも M.Hiroi's Home Page に来てくださる皆様にお礼申しあげます。

最近、PPM や Suffix Tree といったアルゴリズムやデータ構造を勉強しています。Suffix Tree を構築する方法では Ukkonen のアルゴリズムが有名で、この方法はデータ数に比例する時間で Suffix Tree を構築できる優れたアルゴリズムです。ところが、このアルゴリズムが難しくて、M.Hiroi の平凡な頭ではなかなか理解できずにハマってしまいました。M.Hiroi's Home Page の更新が止まっていたのは Ukkonen のせいなのです(笑)。

まあ、Ukkonen のアルゴリズムはなんとか理解できた(と思う)ので、来年は PPM や Suffix Tree のプログラムを公開したいと思います。また、PPM を改良した PPM* という圧縮アルゴリズムにも挑戦したいですね。ほかにも、このページでプログラミングの楽しさを少しでもお伝えできればいいなと思っています。来年もがんばりますので、よろしくお願いいたします。

それでは、きたるべき年も皆様にとってよいお年でありますように。


2003 年 11 月

11月30日

●無料の拡張版ジオシティーズ

Yahoo! ジオシティーズには 2 種類のホームページサービスがあります。ひとつは従来からのジオシティーズで、M.Hiroi's Home Page はこのサービスを使っています。もうひとつは拡張版ジオシティーズです。こちらは Yahoo! BB ユーザーであれば無料で使うことができました。

このたび、11 月 26 日より一般ユーザーでも拡張版ジオシティーズを無料で利用できるようになりました。広告が表示されるのは従来のジオシティーズと同じですが、容量は 15 MB と少し増えています。また、ジオプラスという有料サービスを利用すると、広告無しで 25 MB まで使うことができます。

Yahoo! ジオシティーズは、従来のジオシティーズについて次のように説明しています。

従来のジオシティーズのホームページは引き続きご利用になれます。拡張版ジオシティーズへの移行を希望される場合は、ご自身で行っていただけますが、簡単に移行できる機能も近日中にご用意する予定です。

このように、従来のジオシティーズも引き続き利用することができるようですが、ジオ電子メールサービスのように、遅かれ早かれ拡張版ジオシティーズに吸収されるのは目に見えています。そろそろ M.Hiroi's Home Page も引っ越しを考えた方がよさそうです。

このような事情があるため、メールフォームは設置しないことにしました。新しいメールアドレスですが、従来のアドレス m_hiroi@geocities.co.jp の geocities を yahoo に変更したものになります。よろしくお願いします。


11月25日

●Interface 2004 年 1 月号

CQ出版社 発行の月刊誌 Interface 2004 年 1 月号 (11/25発売) で、M.Hiroi は「高性能圧縮ツール bsrc の理論と実装(後編)」を執筆しました。ブロックソートとレンジコーダによるファイルの圧縮について解説しています。圧縮アルゴリズムに興味のある方は読んでみてください。

●パズル「ペグ・ソリテア (2)」の解答

11 月 19 日 に出題したパズル「ペグ・ソリテア (2)」の解答です。

[解答] ペグ・ソリテア (2)
最短手順の一例
1: [6, 18, 16]
2: [5, 17]
3: [2, 12, 14, 4, 12]
4: [16, 18, 6]

6 番または 8 番から始める場合が最短で、手数は 4 手になります。ちなみに、条件を変更して、最後に残るペグの位置はどこでもよいことにすると、最短手数は 2 手になります。興味のある方は挑戦してみてください。


11月19日

●パズル「ペグ・ソリテア」の解答

11 月 14 日 に出題したパズル「ペグ・ソリテア」の解答です。

[解答] ペグ・ソリテア
最短手順の一例
1: [12, 10, 2]
2: [13,  3, 1, 13, 23, 11, 21]

最短手数は 2 手になります。パズル好きの方には簡単な問題だったかもしれませんね。ちなみに、他のペグ (7, 11, 13, 17 番) から始めても、最短手数は 2 手になります。最短手順の一例を示します。

最短手順の一例
1: [ 7, 15]
2: [12, 14, 2, 10, 20, 12, 22, 14]

このパズルの元ネタは 芦ヶ原伸之 『超々難問数理パズル 解けるものなら解いてごらん』 講談社 の「碁石のジャンプ」です。この本では、中央のペグを黒石、残りのペグを白石とし、最後のひとつが黒石で中央に残ることが条件です。この場合、最短手数は 4 手になります。興味のある方は挑戦してみてください。

それでは、もうちょっと難しいパズルを出題しましょう。

[問題] ペグ・ソリテア (2)

左図では黒丸でペグを表しています。すべてのペグは縦、横、斜め方向に、すぐ隣のペグをひとつ跳び越して移動することができます。

どのペグから開始してもいいのですが、ペグは開始した位置にひとつだけ残ることが条件です。もちろん、同じペグの連続跳び越しは 1 手と数えます。この条件で最短手順を求めてください。

それではパズルをお楽しみください。


11月14日

●パズル「ペグ・ソリテア」

ペグ・ソリテアは、盤上に配置されたペグ(駒)を最後にはひとつ残るように取り除いていく古典的なパズルです。詳しいルールは Puzzle DE Programmingペグ・ソリテア (1) をお読みください。今回の問題は 5 行 5 列盤に 9 個のペグを配置しました。それでは問題です。

[問題] ペグ・ソリテア

左図では黒丸でペグを表しています。すべてのペグは縦、横、斜め方向に、すぐ隣のペグをひとつ跳び越して移動することができます。

ペグがひとつだけ残る最短手順を求めてください。ただし、最初は中央のペグから動かすこととし、同じペグの連続跳び越しは 1 手と数えます。

元ネタは 芦ヶ原伸之 『超々難問数理パズル 解けるものなら解いてごらん』 講談社 の「碁石のジャンプ」です。この本では、中央のペグを黒石、残りのペグを白石とし、最後のひとつが黒石で中央に残ることを条件にしています。興味のある方はこの条件でも解いてみてください。

それではパズルをお楽しみください。


11月9日

●パズル「7 個の騎士の問題」の解答

11 月 1 日 に出題したパズルの解答です。次の図を見てください。

[解答] 7 個の騎士の問題

上図 (A) のように、盤面の各マスに番号を付けて表します。すると、騎士の移動は図 (B) のようなグラフで表すことができます。中央のマス 4 を除いて、騎士の移動経路は「周遊コース」になるので簡単に解くことができます。

11 月 5 日 に出題したパズル「11 個の騎士の問題」でも、騎士の移動経路には「周遊コース」が存在します。周遊コースに沿って騎士を移動すれば、簡単に解くことができます。周遊コースについては Common Lisp 入門 : パズルに挑戦! をお読みください。

一般に、M 行 N 列盤で「騎士の巡歴」が可能であれば、その盤面に M * N - 1 個の騎士を置くことができます。騎士の巡歴については、Puzzle DE Programming : 騎士の巡歴 をお読みくださいませ。


11月5日

●11 個の騎士の問題

11 月 1 日 に出題したパズル「7 個の騎士の問題」は簡単だったと思うので、今回はもう少し複雑なパズルを出題しましょう。今度は 12 個のマスに 11 個の騎士を入れてください。

[問題] 11 個の騎士の問題

騎士は盤面の空きマスにおくことができ、そのあと 1 回だけ移動させます。たとえば、最初 0 のマスに騎士をおいたら、そのあと 5, 6, 8 のマスのどれかに移動させます。この規則で 12 個のマスに 11 個の騎士をすべて入れてください。

それではパズルをお楽しみください。


11月1日

●7 個の騎士の問題 (The 7 Knights Problem)

今回はチェスの騎士 (Knight) を使った古典的なパズルを出題しましょう。それでは問題です。

[問題] The 7 Knights Problem

The 7 Knights Problem は 3 行 3 列の盤面に 7 個の騎士を入れるのが目的のパズルです。次の図を見てください。

騎士は盤面の空きマスにおくことができ、そのあと 1 回だけ移動させます。たとえば、最初 0 のマスに騎士をおいたら、そのあと 5 または 7 のマスに移動させます。この規則で 3 行 3 列盤に 7 個の騎士をすべて入れてください。

簡単なパズルなので、息抜きや気分転換のときにちょっと考えてみてください。それではパズルをお楽しみくださいませ。


2003 年 10 月

10月25日

●ジオ電子メールサービス終了延期

ジオシティーズの電子メールサービスは 2003 年 10 月末で終了する予定でしたが、2003 年 11 月末まで延長されることになりました。メールアドレス m_hiroi@geocities.co.jp は 11 月末まで有効です。今月中にメールフォームなどを準備する予定でしたが、まあ来月でいいかなと思っています。

●Interface 12 月号

CQ出版社 発行の月刊誌 Interface 12 月号 (10/25発売) で、M.Hiroi は「高性能圧縮ツール bsrc の理論と実装(前編)」を執筆しました。ブロックソートとレンジコーダによるファイルの圧縮について解説しています。圧縮アルゴリズムに興味のある方は読んでみてください。


10月21日

●100,000 Hit!

本日、カウンタが 100,000 を突破しました。M.Hiroi's Home Page を開設したとき、100,000 は夢のような数字だと思いましたが、1 年目で 20,000 Hit, 2 年目で 50,000 Hit を突破し、おかげさまで 3 年と 3 ヶ月で 100,000 Hit を達成することができました。

多くの方にアクセスしていただき、とても嬉しく思います。リンクしていただいているホームページ管理者の皆様、そして、なによりも M.Hiroi's Home Page に来てくださる皆様に厚くお礼申し上げます。これからもがんばりますので、今後ともよろしくお願い申し上げます。


10月13日

●ジオ電子メールのサービス終了について

M.Hiroi はジオシティーズの 電子メール(受信専用サービス)を利用していますが、このたびジオシティーズの電子メールが 2003 年 10 月末で終了することになりました。メールアドレス m_hiroi@geocities.co.jp は 10 月末までは有効ですが、11 月以降はこのアドレスにメールを送っても M.Hiroi には届きません。ご注意くださいませ。

ジオシティーズの都合で電子メールを廃止するのであれば、新しい電子メールへの移行サービスがあってもよいのではないかと思っています。まあ、移行サービスにもそれなりの費用がかかると思うので、無料サービスのジオシティーズにそれを求めるのは無理なことなのかもしれません。

今後は、返信用に使っていたメールアドレスを公開するか、それとも「メールフォーム」を設置してみようかと考えております。無料で利用できるメールフォームサービスがいくつかあるので、これらのサービスを使えばジオシティーズでもメールフォームを設置することができます。

この件でジオシティーズから撤退されるユーザもいると思いますが、今のところ M.Hiroi's Home Page を移転する予定はありません。


2003 年 9 月

9月28日

●相原さんと舩本さんの新刊が発売!

相原哲哉さんの新刊『一週間でマスターする CSS 』(毎日コミュニケーションズ)と舩本昇竜さんの新刊『コンピュータはどれほど賢いのか』(すばる舎)が発売されました。

本日の日本経済新聞に『コンピュータはどれほど賢いのか』の広告が掲載されています。


2003 年 8 月

8月27日

●CLISP と CLOS

Lisp のお話です。Common Lisp には CLOS (Common Lisp Object System) というオブジェクト指向システムがあります。残念ながら xyzzy Lisp は CLOS をサポートしていませんが、CLOS を利用できるフリーの Lisp 処理系がいくつかあります。その中で Windows でも動作する処理系に CLISP があります。CLISP は GNU GPL ライセンスで配布されていて、CLOS のほとんどの機能がサポートされています。CLISP のインストールは高橋伸二さんの CLISPインストールガイド for Win32 で詳しく説明されています。M.Hiroi も参考にさせていただきました。

CLISP はバイトコードにコンパイルする方式です。CMUCL のようなネイティブコードにコンパイルする処理系にはかなわないと思いますが、バイトコードにコンパイルする方式では速い方だと思います。実際に、Memorandum 2000 年 10 月 24 日 の「たらいまわし関数」で実行速度を比較してみました。Lisp のプログラムを再掲します。

リスト:たらいまわし関数(Lisp)

(defun tak (x y z)
  (if (<= x y)
      z
      (tak (tak (1- x) y z)
           (tak (1- y) z x)
           (tak (1- z) x y))))

それでは実行結果を示しましょう。(tak 20 10 5) を計算しました。CLISP のバージョンは 2.29 です。最新のバージョンは 2.30 ですが、M.Hiroi のオンボロマシン (Windows95, Pentium 166 MHz) では動作しませんでした。

表:実行結果(単位:秒)
PerlxyzzyPrologCLISP
2.62.11.30.410.015

CLISP がこんなに速いとは驚きました。ここまで速いのは、たぶん末尾再帰最適化を行っているからだと思われます。興味のある方は、ほかのプログラムでも試してみてください。

M.Hiroi は X68000 用 Lisp インタプリタ VTOL を作成したとき、CLOS の仕様を調べたことがあります。CLOS は巨大なオブジェクト指向システムなので、すべての機能を VTOL に実装することはできませんでした。このため、VTOL には必要最低限のオブジェクト指向機能しかありませんが、CLISP は CLOS の大部分の機能をサポートしているようです。

CLOS はC++や Java とはちょっと違ったオブジェクト指向で、とても興味深いシステムです。CLISP で CLOS を勉強してみるのも面白いと思います。そこで、Hiroi's Home Page で Lisp 関連のコンテンツとして「CLOS 入門(仮称)」を作成する予定です。まあ、実際に CLOS を使うのは M.Hiroi も初めてなので、少しずつですが勉強したことを「CLOS 入門(仮称)」で公開できればいいな、と思っています。準備に時間がかかると思いますが、よろしくお願いいたします。


2003 年 7 月

7月14日

●祝! M.Hiroi's Home Page 開設三周年

M.Hiroi's Home Page を開設してから 7 月 10 日で 3 年になりました。1 年目で 20,000 Hit, 2 年目で 50,000 Hit を突破しましたが、その後もアクセス数は少しずつ増えていき、おかげさまで本日 90,000 Hit を達成することができました。多くの方にアクセスしていただき、とても嬉しく思います。リンクしていただいているホームページ管理者の皆様、そして、なによりも M.Hiroi's Home Page に来てくださる皆様に厚くお礼申し上げます。

このホームページには 5 つのメインコンテンツがあり、それぞれのトップページに すごい!!カウンター のカウンタをつけています。ここ 1 週間の平均アクセス数は次のようになりました。

表:1週間の平均アクセス数
TOPX68kTcl/TkxyzzyPuzzleProlog
119/day19/day30/day103/day29/day69/day

いつものように xyzzy Lisp のアクセス数が多いのですが、続・サルでも書けるCプログラム講座のアクセス数が 119 / day もあるのには驚きました。最近、ブロックソート関連のコンテンツを追加しているので、いつもよりもアクセス数が増えているのかもしれません。

これからもがんばりますので、今後ともよろしくお願い申し上げます。


2003 年 6 月

6月25日

●検索サービス終了

今まで M.Hiroi's Home Page 内を検索できるように、ジオシティーズの「検索フォーム」をトップページに取り付けていました。ところが、ジオシティーズのサービスが 5 月 13 日で終了したため、検索フォームを取り外しました。いやー、今までまったく気がつきませんでした。「お知らせ」は定期的にチェックしないといけませんね(反省)。


2003 年 4 月

4月17日

●80,000 Hit!

昨日、カウンタが 80,000 を突破しました。リンクしていただいているホームページ管理者の皆様、そして、なによりも M.Hiroi's Home Page に来てくださる皆様に厚くお礼申し上げます。このホームページには 5 つのメインコンテンツがあり、それぞれのトップページに すごい!!カウンター のカウンタをつけています。ここ 1 週間の平均アクセス数は次のようになりました。

表:1週間の平均アクセス数
TOPX68kTcl/TkxyzzyPuzzleProlog
91/day13/day20/day58/day16/day34/day

3 月下旬から 4 月上旬にかけてアクセス数はガクッと減少するのですが、最近は元に戻りつつあるようです。いつものように xyzzy Lisp のアクセス数がいちばん多いのですが、Perl/Tk memo のアクセス数が 37 / day もあり、Tcl/Tk よりも多いのには驚きました。Perl/Tk に興味を持っている方が増えているのかもしれませんね。

ただいま各コンテンツの改訂作業 (HTML タグなどの修正) を行っているため、しばらくの間は Memorandum しか更新できませんが、これからもがんばりますので、よろしくお願いいたします。


4月9日

●数字のパズル(解答)

4 月 2 日 に出題したパズルの解答です。

表:パズルの解答(一例)

  1 = 7 - 7 + 7 / 7 
  2 = 7 / 7 + 7 / 7
  3 = (7 + 7 + 7) / 7
  4 = 77 / 7 - 7
  5 = 7 - (7 + 7) / 7
  6 = (7 * 7 - 7) / 7
  7 = 7 + (7 - 7) * 7
  8 = (7 * 7 + 7) / 7
  9 = 7 + (7 + 7) / 7 
 10 = (77 - 7) / 7
 11 = 7 / .7 + 7 / 7 
 12 = (77 + 7) / 7
 13 = 7 + 7 - 7 / 7
 14 = 7 + 7 + 7 - 7
 15 = 7 + 7 + 7 / 7
 16 = 7 + (7 - .7) / .7  
 17 = (7 + 7 * .7) / .7
 18 = 77 / 7 + 7
 19 = (7 + 7 - .7) / .7  
 20 = 7 / .7 + 7 / .7

11, 16, 17, 19, 20 は小数点を使わないと解けません。11 は .7 をひとつ使うだけで解けますが、ほかの値は .7 を 2 つ使わないと解けません。


4月2日

●数字のパズル

ひさしぶりに数字を使ったパズルを出題しましょう。Four Four's の変形版です。それでは問題です。

[問題]

数字 7 を 4 つと+, -, ×, ÷, (, ) を使って、値が 1 から 10 になる式を作ってください。数字は 7 だけではなく、77 や 777 のように連結して使ってもかまいません。ただし、-を符号として使うことは禁止します。

Four Four's の数字 4 を 7 にした問題です。息抜きや気分転換のときにでも考えてみてください。

ところで、このルールでは 11 になる式を作ることができません。そこで、ルールを変更して小数点を付け加えます。たとえば、.7 (= 0.7) を使うと、値が 11 から 20 になる式も作ることができます。.7 は複数使ってもかまいません。パズル好きの方は挑戦してみてください。

それでは、パズルをお楽しみください。


2003 年 2 月

2月24日

●今後の予定

2002 年 2 月 に発売された Interface 2002 年 4 月号 (CQ出版社) の 特集 『GUI の組み込み機器への実装 & 活用法』 で、M.Hiroi が執筆した 第 5 章 『Perl/Tk を使った GUI プログラミング』 を前編と後編に分けて Perl/Tk Memo で公開します。前編は昨日アップしましたが、後編はもう少しだけお待ちくださいませ。Perl/Tk に興味のある方は読んでみてください。

xyzzy Lisp Programming の「Common Lisp 入門」ですが、昨日の更新で予定していた内容はすべて公開したので、ここで区切りをつけたいと思います。記号処理の例題として「記号のパターンマッチング」を取り上げましたが、そのあとの「簡易エキスパートシステムの作成」はちょっと難しかったでしょうか。ユニフィケーションを改良すれば、もう少し簡単にプログラムできるかもしれません。そのうちに挑戦してみたいと思っています。

今後の予定ですが、実はまだ決めていません。どのコンテンツを更新するにしても準備に時間がかかりそうなので、しばらくの間は Memorandum しか更新できないと思います。気長にお待ちくださいませ。


2月10日

●メールで質問される方へ

メールのお話です。メールマナーを強制するつもりはないのですが、メールで質問される方は次の点についてご注意くださいませ。

●メールには適切な Subject (題名) を付けてください。

題名のないメールは読まずに削除する場合があります。

●挨拶や簡単な自己紹介もお忘れなく。

挨拶や自己紹介もなく「質問だけ」のメールには返信しない場合があります。できれば、メールを出すきっかけや M.Hiroi's Home Page の感想などを書いてもらえると嬉しいです。

●質問する前に、まず自分で十分に調べてください。

M.Hiroi's Home Page で公開しているプログラムやドキュメントに関する質問は、できるだけお答えするようにしています。ですが、調べればすぐにわかるような質問には、「ご自分で調べてみてください」としかお答えしておりません。質問する前に、本や Google などで十分に調べてください。

●質問は明確に。

プログラムやドキュメントに関する質問の場合、そのプログラム名またはページの URL を明記してください。それから、質問する場合はわかりやすく十分に説明してください。理解できない質問はお答えしようがありません。

どれも常識的なことだと思うのですが、学生さん(と思われる方)からのメールには、質問しか書かれていないメールがときどきあります。お互い気持ちよくメールをやり取りするためにも、以上の点についてご注意くださいますようお願いいたします。

一般的なメールのマナーについては、岩崎宏さんの Tips for E-Mail がとても参考になります。また、横藤雅人さんの メールマナーを考えよう は子供向けに書かれたマニュアルですが、大人でも参考になる優れたものです。メール初心者の方は一読することをおススメします。

最後に愚痴をこぼしますが、わからないからといって何度も同じ質問を繰り返すのはご遠慮ください。それから、「何々がわかりません。教えてください。」といった質問もご遠慮ください。どこまでわかっていて、どこからわからないのか、きちんと整理してから質問してください。なお、学校の課題や演習に関する質問はお答えしておりません。

M.Hiroi's Home Page はプログラミングを楽しむためのページです。無料のプログラミング教室(相談所)ではないことをご理解ください。学生さんは授業料を払っているのですから、M.Hiroi よりも学校の先生に質問した方が丁寧に答えてもらえると思いますよ。


2003 年 1 月

1月17日

●Human68k マニュアル

祝! Human68k マニュアル CONFIG.SYS コマンドリファレンス完成

卓さん、おめでとうございます!! CONFIG.SYS ファイルの設定でわからないことがあれば、卓さんが書かれたコマンドリファレンスを読みましょう。素晴らしいリファレンスを書かれた卓さんに大感謝です。今後は Human68k の使い方について解説されるそうです。とても楽しみですね。卓さん、これからもがんばってください。


1月1日

あけましておめでとうございます

旧年中は大変お世話になりました
本年も M.Hiroi's Home Page をよろしくお願い申し上げます

Copyright (C) 2003 Makoto Hiroi
All rights reserved.

[ Home ]