logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

[SPOILER] novice quiz week 2: msg#00190

Subject: [SPOILER] novice quiz week 2
this is what I came up with, it will only work if you use the Gregorian
calendar

#!perl

use strict;
use warnings;

my $test1 = days_diff("Wed Oct 16 2002","Wed Oct 16 2001");

print $test1;

sub days_diff {
    my @daysinmonth = (31,28,31,30,31,30,31,31,30,31,30,31);
    my @month = qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/;
    my @day1 = split /\s/, shift;
    my @day2 = split /\s/, shift;

    my $ordinals;                      # array reference
    foreach my $day (\@day1,\2) {
        for my $mon (0..11) {         # convert month name to number
            $day->[1] = $mon if($day->[1] eq $month[$mon]);
        }
        my $ordinal = 000;
        for my $mon (0..$day->[1]) {
            my $lastday;
            if ($mon == $day->[1]) {
                $lastday = $day->[2];
            } else {
                $lastday = $daysinmonth[$mon];
                $lastday += leapyear($day->[3]) if ($mon == 1); # adds extra
day in Feb for Leap Years
            }
            for my $days (1..$lastday) {
                $ordinal++;
            }
        }
        push @{$ordinals}, join($ordinal);
    }
    if ( $day1[3] == $day2[3]) {
        return $ordinals->[1]-$ordinals->[0];
    } elsif ($day1[3] < $day2[3]) {
        my $total = $ordinals->[1];
        $total += $day1[3].(365 + $day1[4]) - $ordinals->[0];
        for my $year ($day1[3]+1..$day2[3]-1) {
            $total += 365 + leapyear($year);
        }
        return $total;
    } else {
        my $total = $ordinals->[0] - ($day1[3].'000');
        $total += $day2[3].(365 + $day2[4]) - $ordinals->[1];
        for my $year ($day2[3]+1..$day1[3]-1) {
            $total += 365 + leapyear($year);
        }
        return -$total;
    }
}

sub leapyear {
    my $year = shift;
    return ((!($year % 4) && ($year % 100)) || !($year % 400));
}

 TTYL

Joseph Jones




<Prev in Thread] Current Thread [Next in Thread>