aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchirvasitua <stuart-little@users.noreply.github.com>2021-02-15 19:47:22 -0500
committerchirvasitua <stuart-little@users.noreply.github.com>2021-02-15 19:47:22 -0500
commit2762fab82edee5032fe6192b07c8bb7113fca31c (patch)
treeaa089cf4649e18310dfe7737c74b677e8209944e
parentdf9a999a83bb0cc92a5e260ac246604b69c511e7 (diff)
downloadperlweeklychallenge-club-2762fab82edee5032fe6192b07c8bb7113fca31c.tar.gz
perlweeklychallenge-club-2762fab82edee5032fe6192b07c8bb7113fca31c.tar.bz2
perlweeklychallenge-club-2762fab82edee5032fe6192b07c8bb7113fca31c.zip
1st commit on 100_perl
-rwxr-xr-xchallenge-100/stuart-little/perl/ch-1.pl22
-rwxr-xr-xchallenge-100/stuart-little/perl/ch-2.pl30
2 files changed, 52 insertions, 0 deletions
diff --git a/challenge-100/stuart-little/perl/ch-1.pl b/challenge-100/stuart-little/perl/ch-1.pl
new file mode 100755
index 0000000000..9a83d2dc3f
--- /dev/null
+++ b/challenge-100/stuart-little/perl/ch-1.pl
@@ -0,0 +1,22 @@
+#!/usr/bin/perl
+use warnings;
+use v5.12;
+
+# run <script> <time in format hh:mm[am/pm]; 'am' or 'pm' can be capitalized or surrounded by spaces>
+
+use feature qw(signatures);
+no warnings qw(experimental::signatures);
+use List::MoreUtils qw(any);
+
+sub convTime ($time) {
+ $time =~ m/(\d+)\:(\d+)(.*)/;
+ my ($h,$m) = ($1,$2);
+ my $mode = $3;
+ (index(lc $mode, "am") != -1) && return qq|${\ do {sprintf("%02d", $h % 12)}}:$m|;
+ (index(lc $mode, "pm") != -1) && return qq|${\ do {sprintf("%02d", ($h % 12) + 12)}}:$m|;
+ my $mer = (any {$_ == $h} (0..11)) ? (" am") : (" pm");
+ my $modh = (any {$_ == $h} (1..12)) ? ($h) : (($h-12) % 24);
+ return qq|${\ do {sprintf("%02d", $modh)}}:$m$mer|;
+}
+
+say convTime(join "", @ARGV);
diff --git a/challenge-100/stuart-little/perl/ch-2.pl b/challenge-100/stuart-little/perl/ch-2.pl
new file mode 100755
index 0000000000..958c998619
--- /dev/null
+++ b/challenge-100/stuart-little/perl/ch-2.pl
@@ -0,0 +1,30 @@
+#!/usr/bin/perl
+use warnings;
+use v5.12;
+
+# run <script> <space-separated array entries, right-to-left and top-to-bottom>
+
+use feature qw(signatures);
+no warnings qw(experimental::signatures);
+use List::AllUtils qw(min zip_by);
+
+sub mins($ar) {
+ my @mins = ($ar->[0], (map {min $ar->[$_], $ar->[$_+1]} (0..(scalar @{$ar}-2))), $ar->[-1]);
+ return \@mins;
+}
+
+sub redStep($sm,$bg) {
+ my $size=scalar @{$sm};
+ my @zipped = zip_by {$_[0] + $_[1]} mins($sm), [$bg->@[0..$size]];
+ return [@zipped, $bg->@[$size+1..scalar @{$bg}-1]];
+}
+
+my $sm = [@ARGV[0,]];
+my $bg = [@ARGV[1..$#ARGV]];
+while ((scalar @$bg) > (my $size=scalar @$sm)) {
+ my $processed = redStep($sm,$bg);
+ $sm = [$processed->@[0..$size]];
+ $bg = [$processed->@[$size+1..scalar @{$processed}-1]];
+}
+
+say min @$sm;