From e56dfa0bf4fe2f732ac89f6e88559d8475c321a7 Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Mon, 17 Feb 2020 10:39:10 +0000 Subject: - Added solutions by Dave Cross. --- challenge-048/dave-cross/perl/ch-01.pl | 50 ---------------------------------- challenge-048/dave-cross/perl/ch-02.pl | 25 ----------------- challenge-048/dave-cross/perl/ch-1.pl | 50 ++++++++++++++++++++++++++++++++++ challenge-048/dave-cross/perl/ch-2.pl | 25 +++++++++++++++++ 4 files changed, 75 insertions(+), 75 deletions(-) delete mode 100644 challenge-048/dave-cross/perl/ch-01.pl delete mode 100644 challenge-048/dave-cross/perl/ch-02.pl create mode 100644 challenge-048/dave-cross/perl/ch-1.pl create mode 100644 challenge-048/dave-cross/perl/ch-2.pl (limited to 'challenge-048') diff --git a/challenge-048/dave-cross/perl/ch-01.pl b/challenge-048/dave-cross/perl/ch-01.pl deleted file mode 100644 index 3330d5a952..0000000000 --- a/challenge-048/dave-cross/perl/ch-01.pl +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/perl - -use strict; -use warnings; -use feature 'say'; - -my @people = (undef, (1) x 50); - -my $person_with_sword = 1; - -while () { - kill_someone($person_with_sword, \@people); - last unless more_than_one_person(@people); - $person_with_sword = hand_over_sword($person_with_sword, \@people); -} - -say "Last living person is #$person_with_sword"; - -sub more_than_one_person { - my $count = grep { $_ } @_; - return $count > 1; -} - -sub get_next_living_person { - my ($curr_person, $people) = @_; - - while (1) { - ++$curr_person; - $curr_person = 1 if $curr_person > $#$people; - - return $curr_person if $people->[$curr_person]; - } -} - -sub kill_someone { - my ($curr_person, $people) = @_; - - my $person_to_kill = get_next_living_person($curr_person, $people); - $people->[$person_to_kill] = 0; - - # say "$curr_person killed $person_to_kill"; - - return $person_to_kill; -} - -sub hand_over_sword { - my ($curr_person, $people) = @_; - - return get_next_living_person($curr_person, $people); -} diff --git a/challenge-048/dave-cross/perl/ch-02.pl b/challenge-048/dave-cross/perl/ch-02.pl deleted file mode 100644 index 41d93def5c..0000000000 --- a/challenge-048/dave-cross/perl/ch-02.pl +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/perl -# -# The original question appears to contain a typo as it suggests we use -# the illogical 'mmddyyyy' date format. My solution uses 'ddmmyyyy' instead. - -use strict; -use warnings; -use feature 'say'; - -use Time::Piece; -use Time::Seconds; - -my $fmt = '%d%m%Y'; - -my ($y, $m, $d) = (2000, 1, 1); -my $str_date = sprintf '%02d%02d%d', $d, $m, $y; -my $date = Time::Piece->strptime($str_date, $fmt); - -while ($date->year <= 2999) { - $str_date = $date->strftime($fmt); - if ($str_date eq reverse $str_date) { - say $date->ymd, " is a palindrome ($str_date)"; - } - $date += ONE_DAY; -} diff --git a/challenge-048/dave-cross/perl/ch-1.pl b/challenge-048/dave-cross/perl/ch-1.pl new file mode 100644 index 0000000000..3330d5a952 --- /dev/null +++ b/challenge-048/dave-cross/perl/ch-1.pl @@ -0,0 +1,50 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use feature 'say'; + +my @people = (undef, (1) x 50); + +my $person_with_sword = 1; + +while () { + kill_someone($person_with_sword, \@people); + last unless more_than_one_person(@people); + $person_with_sword = hand_over_sword($person_with_sword, \@people); +} + +say "Last living person is #$person_with_sword"; + +sub more_than_one_person { + my $count = grep { $_ } @_; + return $count > 1; +} + +sub get_next_living_person { + my ($curr_person, $people) = @_; + + while (1) { + ++$curr_person; + $curr_person = 1 if $curr_person > $#$people; + + return $curr_person if $people->[$curr_person]; + } +} + +sub kill_someone { + my ($curr_person, $people) = @_; + + my $person_to_kill = get_next_living_person($curr_person, $people); + $people->[$person_to_kill] = 0; + + # say "$curr_person killed $person_to_kill"; + + return $person_to_kill; +} + +sub hand_over_sword { + my ($curr_person, $people) = @_; + + return get_next_living_person($curr_person, $people); +} diff --git a/challenge-048/dave-cross/perl/ch-2.pl b/challenge-048/dave-cross/perl/ch-2.pl new file mode 100644 index 0000000000..41d93def5c --- /dev/null +++ b/challenge-048/dave-cross/perl/ch-2.pl @@ -0,0 +1,25 @@ +#!/usr/bin/perl +# +# The original question appears to contain a typo as it suggests we use +# the illogical 'mmddyyyy' date format. My solution uses 'ddmmyyyy' instead. + +use strict; +use warnings; +use feature 'say'; + +use Time::Piece; +use Time::Seconds; + +my $fmt = '%d%m%Y'; + +my ($y, $m, $d) = (2000, 1, 1); +my $str_date = sprintf '%02d%02d%d', $d, $m, $y; +my $date = Time::Piece->strptime($str_date, $fmt); + +while ($date->year <= 2999) { + $str_date = $date->strftime($fmt); + if ($str_date eq reverse $str_date) { + say $date->ymd, " is a palindrome ($str_date)"; + } + $date += ONE_DAY; +} -- cgit