読者です 読者をやめる 読者になる 読者になる

初代Masteries

きっとモヒカンにもなれないお前たちに告げる!!!

Project Euler - Problem 4

Problem 4

3桁×3桁の積で表される最大の回文積を求める問題.
「工夫がない」と言われればそれまでですが, 2重のforループでひたすら積を計算して, その答えと答えをreverseしたものと等しいなら回文積と判定しています.
あとはその中で一番大きいものを保有しておいて, 最後に表示する... という感じです.

use strict;
use warnings;

my $max = {
    n => 0,
};

for my $left (reverse 100..999) {
    for my $right (reverse 100..999) {
        my $mul = $left * $right;
        my $reverse = reverse $mul;

        if ($mul == $reverse && $max->{n} <= $mul) {
            $max->{n} = $mul;
            $max->{r} = $right;
            $max->{l} = $left;
        }
    }
}

print "$max->{l} * $max->{r} = $max->{n}\n";

最初に見つかる回文積が最大の回文積ではないので, 最後まで探索する必要があるのが気持ち悪いですね...