Skip to content

Commit 42f29cc

Browse files
committed
- Added solution by Sol DeMuth.
1 parent 96209d3 commit 42f29cc

15 files changed

+1321
-1217
lines changed

challenge-048/sol-demuth/README

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Solutions by Sol DeMuth.

challenge-048/sol-demuth/perl/ch-2.pl

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#!/usr/bin/perl
2+
3+
use strict;
4+
use warnings;
5+
6+
my $leapDay = '0229';
7+
my ($minYr, $maxYr) = (2000, 2999);
8+
my @palDates = ();
9+
10+
my $mm = '01';
11+
my $dd = '01';
12+
13+
while ($mm < 13) {
14+
my $yr = validYear("$mm$dd");
15+
16+
if ($yr) {
17+
push @palDates, "$mm$dd$yr";
18+
}
19+
20+
incr(\$dd);
21+
22+
if (monthLength($mm) < $dd) {
23+
# special leap case
24+
if ("$mm$dd" eq $leapDay) {
25+
my $yr = validYear($leapDay);
26+
27+
if (isLeap($yr)) {
28+
push @palDates, "$leapDay$yr";
29+
warn "LEAP! $mm$dd$yr\n\n";
30+
}
31+
}
32+
33+
# roll monthy/day
34+
incr(\$mm);
35+
$dd = '01';
36+
}
37+
}
38+
39+
foreach my $dt (sort { yyyymmdd($a) <=> yyyymmdd($b) } @palDates) {
40+
print $dt . "\n";
41+
}
42+
43+
sub incr { # zero-padded increment
44+
${$_[0]} = sprintf '%02d', ${$_[0]} + 1;
45+
}
46+
47+
sub isLeap { # doesn't merit datetime
48+
my ($year) = @_;
49+
50+
return $year && (!($year % 4) && (!!($year % 100) || !($year % 400)));
51+
}
52+
53+
sub monthLength { # nucks (we don't need datetime...)
54+
my $mm = sprintf '%02d', $_[0];
55+
my $moLen = 31;
56+
57+
if ($mm == 2) {
58+
$moLen = 28;
59+
} elsif ($mm =~ /^(?:04|06|09|11)$/) {
60+
$moLen = 30;
61+
}
62+
63+
return $moLen;
64+
}
65+
66+
sub validYear { # palindrome test
67+
my $yr = join('', reverse split('', $_[0]));
68+
69+
if (
70+
$yr >= $minYr
71+
&& $yr <= $maxYr
72+
) {
73+
return $yr;
74+
}
75+
}
76+
77+
sub yyyymmdd { # for sorting output
78+
return substr($_[0], 4, 4) . substr($_[0], 0, 4);
79+
}

members.json

+1
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@
127127
"simon-miner" : "Simon Miner",
128128
"simon-proctor" : "Simon Proctor",
129129
"simon-reinhardt" : "Simon Reinhardt",
130+
"sol-demuth" : "Sol DeMuth",
130131
"southpawgeek" : "Jen Guerra",
131132
"steve-rogerson" : "Steve Rogerson",
132133
"steven-lembark" : "Steven Lembark",

0 commit comments

Comments
 (0)