« おべんと おべんと | main | Ruby Kaigi 2007 »

レイトン教授と水汲み問題とブルートフォースなねぎぽ

母親に以前脳トレとDSを買い与えたのだが、すっかりはまったのか、自分で大量にソフトを購入するようになった。その中に"レイトン教授と不思議な町"と言うものがある。一見逆転裁判のような推理系のようだが、推理を要する部分など全く無く、全面、これパズルとなぞなぞである。
で、今日。
もの凄く暇だった僕は手に取って始めてしまった訳だ、レイトン教授を。んでホイホイと今5時間で80程謎を解いた所なのだけれど、もうさっきから20分ぐらいある問題で詰まっている。曰く「16リットル、9リットル、7リットルの瓶があり、16リットルの瓶にはいっぱいに水が入っている。これを16リットルと9リットルの瓶に8リットルずつに分けて欲しい」と言った内容だ。

残念ながら僕はこの手の問題がもの凄く苦手である。はっきり言って諦めた。
諦めたので力技で解いてやろうと思っていそいそとPowerBookを取り出した。

my $a = {
0 => {
max => 16,
now => 16
},
1 => {
max => 9,
now => 0
},
2 => {
max => 7,
now => 0
}
};

my $i = 1;
while($a->{0}->{now} != 8 or $a->{1}->{now} != 8 ){
my $x = int rand 3;
my $y = int rand 3;
while($a->{$x}->{now} == 0){
$x = int rand 3;
}
while($y == $x or $a->{$y}->{now} == $a->{$y}->{max}){
$y = int rand 3;
}

my $move = ($a->{$y}->{max} - $a->{$y}->{now} > $a->{$x}->{now}) ?
$a->{$x}->{now} :
$a->{$y}->{max} - $a->{$y}->{now};

$a->{$x}->{now} -= $move;
$a->{$y}->{now} += $move;
print $i++, " : $a->{$x}->{max} => $a->{$y}->{max}\n";
}


もう完璧なまでの力技。再帰とか書かない書かない。エレガントさのかけらも無し。
もーこれでいいだろと思って実行した。

...全然答えが返って来ない。

つまり、この問題は正答への道のりが狭過ぎるのだ。

試しにウェブ上から正答を探し出して来て、8,8,0となる1手前の値を初期値に入れると数回の試行、2手前の値を入れてみると、数十回の試行で正しい流れをはじき出す。だが4手だともう既にかなり絶望的である。

$j = 0;
while(++$j){
print "$j\n";
my $a = {
0 => {
max => 16,
now => 10
},
1 => {
max => 9,
now => 6
},
2 => {
max => 7,
now => 0
}
};

my $i = 1;
while($a->{0}->{now} != 8 or $a->{1}->{now} != 8 or exit){
my $x = int rand 3;
my $y = int rand 3;
while($a->{$x}->{now} == 0){
$x = int rand 3;
}
while($y == $x or $a->{$y}->{now} == $a->{$y}->{max}){
$y = int rand 3;
}

my $move = ($a->{$y}->{max} - $a->{$y}->{now} > $a->{$x}->{now}) ?
$a->{$x}->{now} :
$a->{$y}->{max} - $a->{$y}->{now};

$a->{$x}->{now} -= $move;
$a->{$y}->{now} += $move;
print $i++, " : $a->{$x}->{max} => $a->{$y}->{max}\n";
last if $i >= 6;
}
}


結果、

roachlove:~ po$ perl hoge.pl
1
1 : 9 => 16
2 : 16 => 7
3 : 7 => 16
4 : 16 => 9
5 : 16 => 7
...
1005
1 : 9 => 7
2 : 16 => 9
3 : 9 => 7
4 : 7 => 16
roachlove:~ po$

\(^o^)/ナンテ コッタイ
整数論的に解くのか。。
てか普通にパズル解けよ、オレ。

トラックバック

このエントリーのトラックバックURL:
http://polog.org/mt-tb.cgi/368

この一覧は、次のエントリーを参照しています: レイトン教授と水汲み問題とブルートフォースなねぎぽ:

» レイトン 教授マニアックス 送信元 レイトン 教授ファンクラブ
レイトン 教授のリンク集形式のサイト情報です。の情報収集にお役立てください。 [詳しくはこちら]

コメント (11)

俺これ見て5秒でとけたよ.

結局諦めてほったらかしにしました。さっき全クリした。
ていうか5秒は勘弁して(>
しかも午前5時にか。

ほったらかしたのに全クリしたってどういうこと?

正確には,

9-7=2
7-2=5

までで5秒くらいだぜ.
そのあと,

9-5=4
7-4=3
9-3=6
7-6=1
9-1=8

と続くけど,もっとエレガントなのあったかね?

あと絵文字が本当にわからないんだけど,(>ってよく見るけどどういう意味?鳥?

わたしこれ解けたよ!レイトン教授、思ったよりおもしろくてちょっと意外だった。一問だけ、四角形を8個作るっていう問題だけどうしても解けなかったよ〜。お兄さんに解いてもらった。

>NZM
(<>の打ち間違い
勝手にタグ扱いされてignoreされたかな
全クリは全部の謎を解かなくてもできる。
あと悪いけど解答の記法の意味が分からない :( 解説欲しい

>dune
四角形のは自力で解けたなあ。確か全部のピンを使うのは分かってたよね。
弟が隠しの謎も含めてコンプリートまであと3問に迫ってる。異常。

↑(><ね。意味は"勘弁して"

書き方変えるね.

16/16, 0/9, 0/7
7/16, 9/9, 0/7
7/16, 2/9, 7/7
14/16, 2/9, 0/7
14/16, 0/9, 2/7

までのプロセスを一瞬で思いついたわけ.
だって,2/7のところでは5を測れるようになるとか,とにかく新しく測定可能な容量がほしかったから.

そうすりゃあとは簡単,これを繰り返す
と,

14/16, 0/9, 2/7
5/16, 9/9, 2/7
5/16, 4/9, 7/7
12/16, 4/9, 0/7
12/16, 0/9, 4/7

みたく0/7→2/7→4/7→6/7といけるから,

10/16, 0/9, 6/7

が作れる.
で,そのあとは

1/16, 9/9, 6/7
1/16, 8/9. 7/7
8/16, 8/9, 0/7

わかった?

なるほどー、そう解くのか。
まるで考え方が思いつかなかったよ。

詳しく書いてくれてありがとう!

お久しぶりです。

実際にやれと言われたら、
>7/16, 2/9, 7/7
の2番目のボトルの水面にマジックでぴっと線を引いてしまうと思います。

それいがいとめんどうくさくね?
ぴっと線を引くのが一回だけなら,
>14/16, 0/9, 2/7
の3番目のボトルにぴっと線を引くほうが楽だと思うよ.
やってみりゃわかるけど.

コンプリートまであと一問になったよ!

>hik, NZM
あたま良すぎ。そう言うズルを考えられるのがすごい。
16リットルの瓶が完全な円柱だったり直方体だったりしたらうれしいんだけど。

コメントを投稿

Powered by
Movable Type 3.34