aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-080/alexander-pankoff/perl/ch-2.pl41
1 files changed, 41 insertions, 0 deletions
diff --git a/challenge-080/alexander-pankoff/perl/ch-2.pl b/challenge-080/alexander-pankoff/perl/ch-2.pl
new file mode 100644
index 0000000000..b30e3c2cf0
--- /dev/null
+++ b/challenge-080/alexander-pankoff/perl/ch-2.pl
@@ -0,0 +1,41 @@
+#!/usr/bin/env perl
+use v5.20;
+use utf8;
+use strict;
+use warnings;
+use autodie;
+use feature qw(say signatures);
+no warnings 'experimental::signatures';
+
+use List::Util qw(max sum0);
+
+say count_candies(@ARGV);
+
+sub count_candies(@candidates) {
+ my $descending;
+ my @candies;
+ for my $i ( 0 .. $#candidates ) {
+
+ if ( $i > 0 && $candidates[ $i - 1 ] < $candidates[$i] ) {
+ $candies[$i] = $candies[ $i - 1 ] + 1;
+ }
+ else {
+ $candies[$i] = 1;
+ }
+
+ if ( $i < $#candidates && $candidates[$i] > $candidates[ $i + 1 ] ) {
+ $descending++;
+ }
+ else {
+ while ($descending) {
+ my $candies = $descending + 1;
+ if ( $candies[ $i - $descending ] < $candies ) {
+ $candies[ $i - $descending ] = $candies;
+ }
+ $descending--;
+ }
+ }
+ }
+ return sum0(@candies);
+}
+