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

初代Masteries

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

Project Euler - Problem 19

Problem 19

20世紀中に, 月の始めが月曜日日曜日である日は何回あるか求める問題.
とりあえず素直に実装してみた.

use strict;
use warnings;

my @days = qw/ 31 28 31 30 31 30 31 31 30 31 30 31 /;

my ($y, $m, $d) = (1900, 1, 1);
my ($now, $sum) = (0, 0);

while ($y <= 2000) {
    $sum++ if $y >= 1901 && $d == 1 && $now % 7 == 6;

    $now++;
    $d++;

    if ($d > $days[$m-1]) {
        if ($m == 2) {
            $now++ unless $y % 4 != 0 || ($y % 400 != 0 && $y % 100 == 0);
        }
        $m++;
        $d = 1;
    }

    if ($m > 12) {
        $y++;
        $m = 1;
    }
}

print "$sum\n";

...もう少しシンプルにできそうな気もしますね.