From 7e8e88e7faa5e8bc90b5ef0ca86094edb080d5ff Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Fri, 21 Feb 2020 16:07:38 +0000 Subject: - Added solutions by Arne Sommer. --- challenge-048/arne-sommer/blog.txt | 1 + challenge-048/arne-sommer/raku/ch-1.p6 | 21 ++++++++++++++++++ challenge-048/arne-sommer/raku/ch-2.p6 | 25 ++++++++++++++++++++++ .../arne-sommer/raku/palindrome-date-loop | 25 ++++++++++++++++++++++ .../arne-sommer/raku/palindrome-date-object | 11 ++++++++++ .../arne-sommer/raku/palindrome-date-object2 | 12 +++++++++++ challenge-048/arne-sommer/raku/survivor | 21 ++++++++++++++++++ challenge-048/mohammad-anwar/perl/ch-2.pl | 1 - challenge-048/mohammad-anwar/raku/ch-2.p6 | 2 +- 9 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 challenge-048/arne-sommer/blog.txt create mode 100755 challenge-048/arne-sommer/raku/ch-1.p6 create mode 100755 challenge-048/arne-sommer/raku/ch-2.p6 create mode 100755 challenge-048/arne-sommer/raku/palindrome-date-loop create mode 100755 challenge-048/arne-sommer/raku/palindrome-date-object create mode 100755 challenge-048/arne-sommer/raku/palindrome-date-object2 create mode 100755 challenge-048/arne-sommer/raku/survivor (limited to 'challenge-048') diff --git a/challenge-048/arne-sommer/blog.txt b/challenge-048/arne-sommer/blog.txt new file mode 100644 index 0000000000..97abe3101f --- /dev/null +++ b/challenge-048/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/surviving-dates.html diff --git a/challenge-048/arne-sommer/raku/ch-1.p6 b/challenge-048/arne-sommer/raku/ch-1.p6 new file mode 100755 index 0000000000..ca9519eaf1 --- /dev/null +++ b/challenge-048/arne-sommer/raku/ch-1.p6 @@ -0,0 +1,21 @@ +#! /usr/bin/env raku + +unit sub MAIN (:$verbose); + +my @people = 1 .. 50; + +my $next = 1; + +say ": @people[] [Index: $next]" if $verbose; + +while @people.elems > 1 +{ + my $killed = @people.splice($next, 1); + + $next++; + $next = 0 if $next > @people.end; + + say ": @people[] [K:$killed] [Next:$next]" if $verbose; +} + +say "Living: @people[]"; \ No newline at end of file diff --git a/challenge-048/arne-sommer/raku/ch-2.p6 b/challenge-048/arne-sommer/raku/ch-2.p6 new file mode 100755 index 0000000000..fe3f3a7547 --- /dev/null +++ b/challenge-048/arne-sommer/raku/ch-2.p6 @@ -0,0 +1,25 @@ +#! /usr/bin/env raku + +for 0..2 -> $y2 +{ + for 0..9 -> $y3 + { + for 0..1 -> $y4 + { + for 0..1 -> $m1 + { + for 0..9 -> $m2 + { + for 0..2 -> $d1 + { + next unless $m1 == $y4 && $m2 == $y3 && $d1 == $y2; + next if $m1 == 0 == $m2; + next if $m1 == 1 && $m2 > 2; + + say $m1 ~ $m2 ~ $d1 ~ '22' ~ $y2 ~ $y3 ~ $y4; + } + } + } + } + } +} diff --git a/challenge-048/arne-sommer/raku/palindrome-date-loop b/challenge-048/arne-sommer/raku/palindrome-date-loop new file mode 100755 index 0000000000..fe3f3a7547 --- /dev/null +++ b/challenge-048/arne-sommer/raku/palindrome-date-loop @@ -0,0 +1,25 @@ +#! /usr/bin/env raku + +for 0..2 -> $y2 +{ + for 0..9 -> $y3 + { + for 0..1 -> $y4 + { + for 0..1 -> $m1 + { + for 0..9 -> $m2 + { + for 0..2 -> $d1 + { + next unless $m1 == $y4 && $m2 == $y3 && $d1 == $y2; + next if $m1 == 0 == $m2; + next if $m1 == 1 && $m2 > 2; + + say $m1 ~ $m2 ~ $d1 ~ '22' ~ $y2 ~ $y3 ~ $y4; + } + } + } + } + } +} diff --git a/challenge-048/arne-sommer/raku/palindrome-date-object b/challenge-048/arne-sommer/raku/palindrome-date-object new file mode 100755 index 0000000000..ed0171be7f --- /dev/null +++ b/challenge-048/arne-sommer/raku/palindrome-date-object @@ -0,0 +1,11 @@ +#! /usr/bin/env raku + +my $date = Date.new('2000-01-01', + formatter => { sprintf "%02d%02d%04d", .month, .day, .year }); + +while $date.year < 3000 +{ + say $date if $date.Str eq $date.Str.flip; + + $date .= succ; +} diff --git a/challenge-048/arne-sommer/raku/palindrome-date-object2 b/challenge-048/arne-sommer/raku/palindrome-date-object2 new file mode 100755 index 0000000000..c8a2765db4 --- /dev/null +++ b/challenge-048/arne-sommer/raku/palindrome-date-object2 @@ -0,0 +1,12 @@ +#! /usr/bin/env raku + +my $date = Date.new('2000-01-01', + formatter => { sprintf "%02d%02d%04d", .month, .day, .year }); + +while $date.year < 3000 +{ + my $date-str = $date.Str; + say $date-str if $date-str eq $date-str.flip; + + $date .= succ; +} diff --git a/challenge-048/arne-sommer/raku/survivor b/challenge-048/arne-sommer/raku/survivor new file mode 100755 index 0000000000..ca9519eaf1 --- /dev/null +++ b/challenge-048/arne-sommer/raku/survivor @@ -0,0 +1,21 @@ +#! /usr/bin/env raku + +unit sub MAIN (:$verbose); + +my @people = 1 .. 50; + +my $next = 1; + +say ": @people[] [Index: $next]" if $verbose; + +while @people.elems > 1 +{ + my $killed = @people.splice($next, 1); + + $next++; + $next = 0 if $next > @people.end; + + say ": @people[] [K:$killed] [Next:$next]" if $verbose; +} + +say "Living: @people[]"; \ No newline at end of file diff --git a/challenge-048/mohammad-anwar/perl/ch-2.pl b/challenge-048/mohammad-anwar/perl/ch-2.pl index 6e1e51c504..5cc5cc7bdf 100644 --- a/challenge-048/mohammad-anwar/perl/ch-2.pl +++ b/challenge-048/mohammad-anwar/perl/ch-2.pl @@ -6,7 +6,6 @@ use Date::Tiny; my $date = Date::Tiny->new(year => 2000, month => 1, day => 1); -# Date cannot be higher than 31; thus year must be lower than 2300 while ($date->year <= 2299) { my $date_as_str = sprintf("%02d%02d%04d", $date->month, $date->day, $date->year); if ($date_as_str eq reverse($date_as_str)) { diff --git a/challenge-048/mohammad-anwar/raku/ch-2.p6 b/challenge-048/mohammad-anwar/raku/ch-2.p6 index 073072680b..ad2c46ef2b 100644 --- a/challenge-048/mohammad-anwar/raku/ch-2.p6 +++ b/challenge-048/mohammad-anwar/raku/ch-2.p6 @@ -5,7 +5,7 @@ use v6; sub MAIN() { my $fmt = { sprintf "%02d%02d%04d", .month, .day, .year }; my $date = Date.new(2000, 1, 1, formatter => $fmt); - while $date.year <= 2999 { + while $date.year <= 2299 { my $date-as-str = $date.Str; if $date-as-str eq $date-as-str.flip { say "$date-as-str is a Palindrome date."; -- cgit