ナンバーリンクを、解けるところまで解くプログラム

さて、お忘れの方も多いと思うけれども、以前予告していたナンバーリンクパズルを(解けるところまで)解くプログラム、なのですが、結局、ウィジェットではなく、webで公開する事にしました。
解けない問題がある事は分かっています。あくまで「(解けるところまで)解く」のであって、ほとんど解けません。
前回述べた通り、これは元々、X68000というシャープのパーソナルワークステーション向けにC言語で書かれていたものの移植です。ただ、Javascriptにはポインタが無いので、データ構造からしてまるっきり違います。
なぜ、こんなプログラムを書いたのかというと、

  1. 解き方は思いついたが、それは、紙の上には書き込めないぐらいの大量のデータを必要とする方法だったから。
  2. そもそも解法を人間の言葉で説明するのは困難だが、プログラム言語だと記述出来ると思ったから。
  3. 「その解法は論理的なのか」という問いに対し、解法が理解出来ない人でも、プログラムでコンピューターが解いているのだから「理論的なのだろう」と納得させるため。

等々あるのですが、解法について、最初は「プログラムのソースを見てくれ」で済まそうと思ったのですが、とても見せられたものではない、汚いものになったので、"How to solve Number-link puzzle."を用意しました。
なのですが、「なんで英語やねん!」って言われると、"There's no border."って書きたかっただけである。
あと、"Do not walk this way."もエアロスミスの"Walk this way"からのもじりなので、Japanizeで翻訳してみようと思った方は、その辺に気をつけて欲しいです。
基本的にEXCITE翻訳による機械訳なので、英語に間違いがあれば、ご指摘下さい。
ある会社が「社内の公用語を英語にする」と言って、それに対して「うちはC言語にしてやる」と言った人がいるらしいけれども、それは対比になっていないのではないかと。
英語は世界中で通用する。C言語も世界中で通用するのである。もちろん、Javascriptも世界中で通用する。

で、"Boys, be "違いのわかる男"."と、いきなり日本語になる。
ここは、最初はサディスティックミカバンドの"Boys & Girls"の歌詞の中から、適切と思われる歌詞を流用するつもりでした。
のですが、"Boys & Girls"の歌詞を読み返す前に「♪ダバダ〜」なCMを観て、「違いのわかる男」って良いフレーズだなと思ってしまい、ネスレ多国籍企業だから、海外でも似たようなCMをきっとやっているから、その英語を流用しようと考えました。
「でも、Girlsは「違いのわかる"男"」にはなれないな」って思った瞬間に、「Boys, be シド・ヴィシャス! (©田口トモロヲ)」が降りてきた。ので、"Boys, be "違いのわかる男"."に。
で、"違いのわかる男"の海外版を探したのだけれども、ネスレは他国では"違いのわかる男"というコピーを使っていないことがわかった。いろいろ考えた結果、無理に英訳すると、逆に日本人に、元の日本語が"違いのわかる男"だったことがわからなくなるので、日本語で通す事にしました。

"Step 3"は、最初に思いついたのは「現場百回」という語句だったので、Japanizeする時には「現場百回」でお願いします。

"Step 5"は、circuitに「回路」という意味と「ルーチンワーク化した日常生活」のダブルミーニングを持たせたつもりでいます。
用意された明日を、選ぶだけの生活。
ルーチンワーク化した日常生活」は「パズルを解いているだけの人」も含んでいます。
「脳を鍛える」ために始めたはずなのに、いつの間にか、パズルを解く事が目的化していないだろうか。
本来、パズルは、その解き方が分かった時点で卒業すべきものである。
もし、あなたがなにがしかの試験を受けなければならない時に、あるタイプの問題が解けるようになったら、もうそのタイプの問題についての訓練をやめるであろう。なぜなら、もう、そのタイプの問題の解き方は知っているので、いつでも解けるし、問題は解けるように作られているからだ。
同じタイプの問題を何度も解く事により、コツがつかめて、さらに速く解けるようになるかもしれない。
しかし、その経験が何の役に立つというのか。
私が学生の頃、大阪大学の学食のレジ係に「コンピュータおばさん」と呼ばれるご婦人がいる、という噂を聞いた。
残念ながら、私はそのご本人に会う事は無かったが、「阪大生よりも計算するのが速くて正確」という噂だった。
阪大生はやがて卒業し、それぞれの道を歩いて行くのだろうが、「コンピュータおばさん」は学食のレジ係のままであろう。
"Exit from circuit."に、そういう皮肉を入れたつもりであるが、もうちょっと気の利いた訳があればご指導願いたい。

"Maxwell's demon が来たりて笛を吹く"も、最初は英訳しかけたが、日本人が英訳を読んで、逆に「なんでフルートを吹くのか?」と思うのではないかと思ったので、日本語で通す事にしました。
英語用のJapanizeのようなソフトがあった場合、「笛を吹く」の部分は英語に訳す必要は無いです。消してください。
Javascriptプログラムのソース内では、この部分の処理は"function Kirchhoff()"がおこなっている。
私はこれまでに、電子回路の設計をした事が無いので、Kirchhoffの法則を適切な場面で使用した事はありません。
ただ、この解法が、大学の講義で「キルヒホッフの第二法則は、あらゆる閉回路において成り立つ」と聞いた時に、「であれば、閉回路の存在しないナンバーリンクでは、キルヒホッフの第二法則は常に成り立たないのではないか」と考えたところからスタートしているので、Kirchhoffの名前を頂いています。
"function Kirchhoff()"内で実際におこなわれている処理は、元のKirchhoffの法則とは程遠いものです。
ニュートン万有引力の法則を「リンゴが木から落ちるのを見て気がついた」ことになっていますが、実際はケプラーの法則から導きだされたものです。
私は、この解法がKirchhoffの第二法則からインスパイアされた事を隠すつもりはありません。
かつて、ウイスキーのCMに「時は流れない。それは積み重なる」というコピーがありました。良い言葉だと思います。
ナンバーリンクの問題があるから、この解法があるのであり、Kirchhoffの第二法則が知られていたから、この解法があるのです。
パズルを分断する線の引き方は、理論的にはジグザグでも良いハズ。なのですが、全ての切り方を試行すると、PCに負荷がかかり過ぎるので、やってません。

インド人を右に」の時点で、もう日本人以外の人の事は、アウト オブ 眼中 になっています。
コーナーの攻略法に対する、これ以上適切な日本語は思いつきません。
そして、これを英訳する方法も思いつきませんw

で、こんな中途半端な性能でリリースした理由は・・・事実上のギブアップです。
今回のプログラムよりも、X68000版のほうが多くの問題を解けていたという悲しい結果を受け入れることが出来ず、いろいろと試行錯誤したのですが、もう諦めました(キッパリ)。