レイトン教授と水汲み問題とブルートフォースなねぎぽ
母親に以前脳トレと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";
}
もう完璧なまでの力技。再帰とか書かない書かない。エレガントさのかけらも無し。
もーこれでいいだろと思って実行した。
...全然答えが返って来ない。