Subscribed unsubscribe Subscribe Subscribe

円周率クイズをPerlで解く

今日が円周率の日だったとは気付かなかった…
クイズにチャレンジ。
2009-03-14 - 結城浩のはてな日記

#!/usr/bin/perl
# pi2date.pl
use strict;
use warnings;

use Math::BigFloat qw(bpi);

my @days = qw(31 29 31 30 31 30 31 31 30 31 30 31);

my $max_length = 1000;
my $pi = bpi($max_length);

for (0 .. $max_length - 10) {
    my $str = substr($pi, $_ + 2, 10);
    if (&judge($str)) {
        print $_ + 1, ":$str\n";
        last;
    }
}

sub judge {
    my $digits = shift;
    my $month  = substr($digits, 0, 2);
    my $day    = substr($digits, 2, 2);
    my $hour   = substr($digits, 4, 2);
    my $minute = substr($digits, 6, 2);
    my $second = substr($digits, 8, 2);

    return 0 if ($month > 12 || $month == 0);
    return 0 if ($day > $days[$month - 1]);
    return 0 if ($hour > 23);
    return 0 if ($minute > 59);
    return 0 if ($second > 59);

    return 1;
}
$ perl pi2date.pl
287:0726024914

答えは287桁目?
7月26日02時49分14秒。
もっとあとの方に出てくると思ってたけど意外と早かった。これなら自分の目で数えていって調べた方が早かった…