JAVAページフラワーパズル

フラワーパズルの詳細アルゴリズム

このパズルでは、上の「ミジンコ」のような形をしたピースだけが特殊であ る。他の全てのピースは、裏表同じ形であるが、このピースだけは、裏表別に なってしまう。このピースは、したがって、12通りの置き方がある。他のは、 高々6通りである。

本フラワーパズルは、盤面全体の対称性は、全部で4通りある。この対称性 を取り除くために、「ミジンコ」に12/4=3通りの置き方しか許していな い。

さて、以上がアルゴリズムの解説以前の前提である。

今日はちょっと忙しいので、じっくり解説が書けないのであるが、アルゴリ ズムのヒントだけは書いておこう。それは、○の部分ではなく、○に囲まれた 凹になった△の部分である。爪とか刺というような呼び方をしているが、ここ に注目すると、私のアルゴリズムはすぐ分かる。

今すぐ理解したいかたは、 Java soureceを解読していただきたい。そうす れば、手で入れても、30秒とか1分もあれば、楽々と入れられることが判明 するはずだ。

1996年5月16日


このパズルは、12種類13個のピース(駒)のデータと、そのピースを入 れるための盤から成り立っている。ここでは、まず、ピースについての解説を 行なう。

下の表にまとめてあるので説明の必要もないかも知れないが、ご丁寧にも説 明も加えていくことにする。


形状刺データ






1 1,1,1,1,1,1 6411
2 1,1,1,1,1,0 5461
3 1,1,1,1,0,0 4461
4 1,1,1,0,1,0 4361
5 1,1,0,1,1,0 4231
6 1,1,1,0,0,0 3361

形状刺データ






7 1,1,0,1,0,0 32121
8 1,1,0,0,0,0 2261
9 1,0,1,0,1,0 3121
10 1,0,1,0,0,0 2161
11 1,0,0,1,0,0 2131
12 1,0,0,0,0,0 1162

形状
ピースの形状であり、説明の必要もないであろう。

刺データ
各ピースの刺がどのようについているかのデータである。上の刺から順に、 反時計周りに刺の有無を示す。

総刺数
ピースの刺の総数である。つまり、刺データの1の数でもある。

■刺数
アルゴリズムの一番重要なデータであるが、盤についての説明を加える前に は解説できないので、後に伸ばす。数値は入れてあるので、その意味を考えて みて欲しい。 つまり宿題とする。

配置数
ピースにより、回転したり、裏返したりしたとき、同形になるものがある。 そういうのを除いて、本当に異なる配置(向き)の数である。ここでは、盤面 全体の対称性については考慮していないので、7番の「ミジンコ」は12になっ ている。

個数
ピースにより、個数が異なる。12番目のピースだけが2個であり、他は全部 1個である。

たぶん、もう分かったと思うが、私はこの表の中の、宿題にした部分を利用 してこのパズルをまたたくまに完成することができる訳である。他人が途中ま で入れているのをみて、「それは、もうすでに不可能ですよ」と丁寧にも忠告 してあげられるのは、この宿題の部分を利用しているからなのである。

そして、いうまでもないことだが、このパズルをJavaでやっても楽々解けて しまうというか、無駄の非常に少ない思考錯誤しかしていないのは、以上の理 由によるのである。

1996年5月17日


さて、今日は、「盤」の方について解説をしよう。

周囲の○の数刺の数説明
116 1つの○にのに接する刺
(外周の尖っている部分の刺)
210 2つの○にのに接する刺
(外周のへこんでいる部分の刺)
314 3方向を○で囲まれた刺
(中央部分の刺)

盤は、13個の○と、40個の刺からなる。その刺には、周囲にいくつの○ が接しているかにより、3通りに分類できる。○が1個、2個、あるいは3個 接しているかによって分ける。○が0個接触というのは無い。

総刺数は、盤の方でも40になる。ピースの刺の数も総計40になる。

さて、接触している○が1つしかない刺は、その刺の属する○は無条件に決 定する。どんなピースが唯一接触する○に置かれようと、かならずその○に置 かれたピースで、盤の刺は覆われる。

次に、接触している○が2つ場合である。このとき、この盤の刺を覆うのは どちらの○に入れられたピースかは未定である。

さらに、接触している○が3つ場合である。このとき、この盤の刺を覆うの は、接触している3つの○のうちのいずれかに入れられたピースで覆われる。

さて、もう以上の説明で、分かった人は分かったと思うので、説明を止めて もよいのであるが、まあ、一応丁寧をモットーとしているので、あえて説明を 続けよう。

周囲の○の数が、1と2の刺について注目してみよう。すると、それらの刺 の総数は16+10=26である。要するに、外周に接している刺の数が全部 で26ということだ。

もう、これで、分かったよね。今日の表と、昨日の表を比較すれば、「な〜 んだ、こんなことだったのか」と分かると思う。だから、後は、自分でちょっ と考えてね。

1996年5月18日


JAVAページフラワーパズル