素歩人徒然 数独とコンピュータ 数独ボード
素歩人徒然
(102)

数独とコンピュータ


── どこまでコンピュータの機能を利用すべきか

 コンピュータ・ゲームの盛んなご時世である。
 コンピュータの存在を前提として作られたゲームばかりでなく、コンピュータとは無縁に存在してきたゲーム類もコンピュータ上でプレイできるようになっている。その結果として、昔ながらのゲームスタイルでは気が付かなかったような新しい魅力を、そのゲームの中に発見するという機会も増えてきている。数独もその例外ではないように思う。

 数独に出会い それを紙の上で楽しんできた私は、自然の成り行きとしてコンピュータ上で数独を楽しむようになった。それを可能にする環境として「数独ボード」なるものを自ら作り、自らプレイして楽しんでいることは既に紹介した通りである。その過程で、数独の新たな魅力を発見する機会が多くなった。

 コンピュータ上で数独を楽しんでいる最中に「こういう機能があったら便利だろうなぁ」と思うことが度々ある。“昔プログラマ”を自認する私めとしては、そうなると直ぐさま自作ソフトを改造してその機能を追加してみたくなってしまう。その作業がまた楽しいのである。こっそりと白状するが、“プログラミング”は数独をプレイするよりも格段に楽しい(!)。困ったことである。

 しかし私がここで触れたい話題は、プログラム作りができるという“魅力”のことではない。誰でもがプログラム作りを“楽しい”と感じている訳ではないから、そんな話をしても意味がないくらいのことは先刻承知している。

 コンピュータ上で数独を楽しむ過程で、便利な機能をプログラムに付加していけば、それが問題解決を利することになり便利であることは確かである。しかしそれは必ずしもフェアーな行為とは言えないのではないか。数独を解くのは容易になるかもしれないが、容易になるからと言って必ずしもゲーム自体が面白くなる訳ではない。その点を考慮して機能の付加を考えなければならない。

 たとえばゲームのやり方として、当てずっぽうで適当にます目に数を埋めていったら たまたま問題が解けてしまったというのでは本当の意味でゲームを楽しんだことにはならないであろう。自明な手を重ねていって最終的な解決に至る、というのが一番望ましいやり方ではないだろうか。
 しかし難しい問題になると、そうはいかないことの方が多い。そういう時は別のアプローチも必要になる。たとえば、ある地点(A)で選択肢が二つあったとする。仮に一方を選んで自明な手を続けていった結果 矛盾したら(つまり、完成しないことが明白になったら)、その選択が誤っていたと判断することができる。ここでA地点まで戻って、もう一方の選択肢を自明な手として選ぶのである。

 本来なら、それまでの自分の手をすべて覚えていて、自力でA地点まで戻らなければいけないのだが、先読みの手が十数手から数十手以上にも及ぶようになると、コンピュータの力を借りたくなる。これを助けるのが「数独ボード v2.1」で取り入れた「先読み」機能である。これは、予想した手が間違っていたら、それまでの手をすべて消してA地点まで戻り次の選択肢に移れるようにしてくれる。
 こうした先読み機能を使えば、もう一段難しい問題にも挑戦できるようになる。そして、それを解決した時には以前にも増して強い喜びを感じることができるであろう。つまり、新たな機能を利用することによって、新たな楽しみが得られたことになる。

 もう一つ別の例を紹介しよう。
 先読み機能を利用して問題を解く場合、各空白のます目に記入できる数字の“候補”を機械的に知ることができる。それを各メモセルに記入しておいて判断の助けにしたい。候補は次のようにして容易に求められる。

 例えば、次の図で赤枠で囲まれた B3 の位置に注目すると、


ここに置くことのできない数は、ブロック1に既に置かれている「」「」「」「」と、行3に属する「」「」「」、列Bに属する「」「」「」である。逆に言えば、B3にはそれ以外の数「」「」「」しか置けないということが分かる。このように、B3 に置くことのできる数の「候補」を推理を伴わずに機械的に求めることができる。

 この候補を求める作業を、すべての空白のます目に対して行いメモ欄に記入して利用できるようにする。私はこの面倒な作業を、コンピュータに助けてもらうのを潔しとせず、毎回自分で手作業でやってきた。手際良くやっても十数分は掛かる 単純だけれども注意深くやる必要のある作業である。しかしこの面倒な作業をやってしまえば、次には更に難しい問題にチャレンジできる機会が与えられるのだと思って、それを楽しみに我慢してきた。この作業をコンピュータで機械化したいという誘惑を押さえ込み、プレイヤーが自力でやるのがゲーム本来の姿である(!)と自分自身に言い聞かせてきたのである。

 そんな時、ウェッブ上で偶然「世界一難しい数独問題」というのを見付けたのである。早速、チャレンジしてみたがまるで歯が立たない。到底私の手には負えない難問であるように思えた。最初の一手さえ見付けられないのである。そこで、兼ねてから実現を迷っていた「候補」を自動的に求める機能を付加してみようと考えた。この機能が使えれば、もしかするとこの難問も解けるかもしれないと思ったのである。ただし、この機能の使用には一定の制約を設け、「先読み」機能がオンの時にだけ利用できるように制限を付けた。やはり、何時でも利用できるようにするには抵抗があったからである。

 この機能を手に入れて、何時でも「候補」を更新できるようになった効果は絶大であった。更に多重の先読み機能(これを「深読み」と名付けた)を実現することにより、この「世界一難しい数独問題」は「“世界一難しい”と称する易しい問題」となったのである。

 ところが、その後に知ったのだが、「世界一難しい数独問題」というのは色々あって、今話題になっているものとは異なることに気が付いた。最近の「世界一難しい数独問題」の方も挑戦してみたが、これも普通の“難しい問題”程度に格下げできることが分かった。更に「スパコンで作った、現時点ではおそらく世界で一番難しい数独の問題」というのも試してみたが、意外にも簡単に解けてしまった。数独ボードの新しい機能などほとんど使わないで終ってしまった。もっと手間がかかるだろうと楽しみにしていたのだが…。最初の1手が分かれば、あとは初心者向けの“かなり良くできた問題”と言えるであろう。

 ところで、こういった難しい問題に取り組んでいると、解決するまでに数日掛かることもある。もちろん、その間ずっとその問題に関わっている訳ではないが、気分転換で時々数独問題にチャレンジしている私のような者にとっては途中までやってやりかけのままゲームを保存し、それを翌日以降にまた再開させる機能がどうしても必要になる。一般に、深読み機能を使用していなければ再開するのに何の問題もないが、深読み中に中断したものを再開するには色々と難しい問題がある。簡単に言えば、先読み機能を多重化するには、内部情報をスタック上に保存しておく必要があるからである。これを回復できるようにしないと難しい問題のゲーム再開は困難である。この機能の実現に挑戦するのはなかなか楽しいものであった。興味のある方は是非試してみてください。

 なお、今回公開した数独ボードの新版V3.0では、多くの機能が追加されたが、それによって数独というゲームの新たな魅力を多々発見できたと感じている。是非貴方(女)も実体験してみてください。

 新たに追加された主な機能は以下の通りである。
 (1) ヒント要求の機能拡張(候補リストの自動作成)
 (2) 深読み機能(先読み機能の多重化)
 (3) 中断していたゲームの再開機能
 (4) 数独問題を自ら作る

 詳しくは【数独】欄の「数独ボード の最新版をリリース」を参照してください。