〜 解くまでに 23年かかった 思い出の記録 〜 |
若い時、初期の 8bit のPCを持ってからは 色々とプログラムを組んで遊んでいた時期があった。 一番 印象に残っているプログラムが、虫食い算パズルを解くものだった。 OS-9 /BASIC09 という PASCALライクな 構造化 BASICで、リカーシブ(再帰)プロシジャーで作成した。 再帰プログラムとは、自らのルーティンの中で、更に自分自身を呼び出す、という、プログラミングの醍醐味を味わえる作り方だ。 虫食い算とは、数字の部分が虫に食われて判明出来ず、残された文字を手掛かりに 全体を復元する、というパズルで、 掛け算の数字が虫食いになったものが、解きがいのある難しいパズルだった。 思い入れが強いのは、「ムズカル」 という難問を、本来なら解けるものが、マシンの能力が足りずに解けなかったこと。 これを23年ぶりに解いた思い出の記録を ページにした。 |
23年ぶりに、自宅のパソコンで解を見ることが出来た! 2011年6月1日 昔、科学雑誌 「クォーク」別冊に、芦ヶ原伸之が、7桁 x7桁の、丸尾学 「ムズカル」 という 「虫食い算」 を紹介した。 これは(当時の)中型コンピューターでも解けないだろう!これを解いてみろ! との挑戦で発表された。 これが「ムズカル」 * * * * * * * x * * * * * * * ------------------------------ * * * * * * * * * * * * * * * * * * * * * * * * * * * 0 * * * * * * * * * * * * * * * * * * * * * * * * * * * * ------------------------------- * 0 0 0 0 0 0 0 0 0 0 0 0 * で、その挑戦に応じて、リカーシブ・プロシジャーによる解析プログラム ー頁末に収録ー を作った。 無駄な探索を省くアルゴリズムを考案した、自信の高速プログラムだ。 別紙の演習問題 (Read Me) を解かせたが、ムズカル以外は即・解が出たが、ムズカルは当時の8bit PC (富士通FM-11)ではパワー不足で解が出なかった。 その後、16ビットのMS-DOS用に書き換えてみたが、やはり無理だった。 事務所に初期の32bit (50Mz)が導入された際に思い出し、土曜出勤の日に 退社前にRUNし、月曜朝にチェックしたら、やっと見事解けていた。 解析終了までに、33時間01分14秒だった。 その後、すっかり忘れていたが、Twitter の@ksakabe 氏のFree Pascal のツイートで思い出し、 プログラムを探し出して、コンパイルをお願いした。 これで実行して、初めて自宅のミニタワーPC (DELL inspiron 530 : 3GHz) で、解を目にすることができた。 時間は、6分少々だった。 1988年にプロクラムを作ってから 23年目の 2011年のことだった。 乾杯! 以下が、2011年6月1日にRUNした記念の結果。 (注: 漢字・カナ表示だったが、@ksakabe 氏にFree Pascal用に英文版に直していただいている。)
虫食い算パズルでは、「解は一つしかない」 のが パズル作品としての原則なのだが、「ムズカル」は残念ながら解が2つあった。 しかし、この難解さゆえに認めてあげることにしている。 しかし、どうやってこの問題を考えたのだろう? |
<参 考>
このプログラムの使い方 (Read Me)
虫食い算パズルの解法(かけ算) by A. Udagawa OS9/Basic09 ver 2.0 1988.6 OS9 -> MS.DOS/Quick Basic 1989.12 Quick Basic -> Turbo Pascal 1990.2 coded H.Takahashi ver 2.2 1992.12 ------------------------------------------------------------------------ 1.このプログラム( mushi.exe ver2.x )は、虫食い算という名称になっていますが、 かけ算の虫食い算の他に、覆面虫食い算・覆面算にも対応しています。 2.このプログラムで解ける虫食い算等の規模は、9桁のかけ算までで, 全体の式の形が横18字 X 縦12行以内です。 3.入力要求に対して、問題の文字列だけを左づめで入力します。 ~~~~~~~~~~ 4.入力は,半角でも全角でも可能です.(ただし両者の混合はだめです.) 5.虫食い文字は、 * です。 * と 0 - 9 の数字以外の文字は、覆面文字とみなします。 6.乗数に明らかにゼロがある場合は、それを明示して入力します。 (例) *** *** x *** この場合は、 x *0* と、ゼロを --------- 中間行が3行で ---------- 入れた形に 5** はなく、2行 ------> 5** 直して入力 **5 しかないので **5 します。 --------- ---------- ****** ****** 7.進行状況の表示を指定できます。 被乗数(第一行目)の先頭文字から末尾文字迄の各桁の変化を表示します。 先頭ケタがレベル1であり、次がレベル2....となり、そのレベルを 指定出来ます。指定なしの場合はリターン. (ケタ数の多い問題については、この機能を利用したほうがよいでしょう) 8.演習問題 (1) from 雑誌「クオーク」別冊 A. 加藤 徹 作 A * * * Q U A R K A * * * P U Z Z L E --------------- ----------------------- A * * * * * * * * * * A * * * * * * * * * * A * * * * * * * * * * A * * * * * * ----------------- * * * * * * * * * A * * * * * * * * * ------------------------ * 6 * 4 * 9 * 1 * 3 * B. 丸尾 学 作 6 * * Q U A R K * 6 * * * * * * -------------- ------------------- * * * 6 * * * * * * * * * * * * * * 6 * * * * * * * * --------------- * * * * * * 6 * * 6 * * * * * * ---------------------- * E I N S T E I N * * * * * * * * * * * * * * * 超難問 ---------------------------- 「ム ズ カ ル」 * * * * * * * * * * * * * * * * * * * * * * * * * * * 0 * * * * * * * * * * * * * * * * * * * * * * * * * * * * ----------------------------- * 0 0 0 0 0 0 0 0 0 0 0 0 * (2) from NIFTY SERVE A. 滝沢 作 A. TETSU 作 * N I F T Y * * * 酉 年 * * S E R V E * * * * ------------------ ---------------- * * * * * * * * V * * * V * N N * * * * * * * V * V * * I I * * * * * * * * V * * * F F * * * ------------------------ * * * * T T * * * * 酉 年 年 頭 * * * * * * Y Y * * * * * * * * * ------------------------------ * * * * * * R R * * * * * * (3)その他 ( 虫食算パズル700選より) が ん た い い す き た ん く の 日 だ と ----------- --------------- ----------------- * * * * * * * な い た * * * * * * き み と ------------- * * * ----------------- 1 月 1 日 ------------------ き す し た 1 0 月 1 0 日 |
<資 料>
虫食い算パズルを解く プログラムの ソース コード
→ リカーシブ・プロシジャーで書iいた解析プログラム (覆面算対応の汎用版)
このプログラムは、昔、パソコン通信 Nifty Serveの データライブラリ (プログラム・ ソ−ス)に tsukba85 のハンドルで登録した。
当時私は、 米国のCompu Serve 会員で、それを真似た Nifty Serveが立上げられた時には、自動的に特別会員(SGC会員:Spesial
Gest from CompuServe)になった。
|
2014年5月8日記 |
宇田川 東 |