diff options
| -rw-r--r-- | challenge-228/mark-anderson/perl/ch-1.pl | 17 | ||||
| -rw-r--r-- | challenge-228/mark-anderson/perl/ch-2.pl | 25 |
2 files changed, 42 insertions, 0 deletions
diff --git a/challenge-228/mark-anderson/perl/ch-1.pl b/challenge-228/mark-anderson/perl/ch-1.pl new file mode 100644 index 0000000000..3e5bc20ff8 --- /dev/null +++ b/challenge-228/mark-anderson/perl/ch-1.pl @@ -0,0 +1,17 @@ +#!/usr/bin/env perl +use v5.32; +use List::Util qw/sum0/; +use Test::More; +use experimental qw/signatures/; + +is unique_sum(2,1,3,2), 4; +is unique_sum(1,1,1,1), 0; +is unique_sum(2,1,3,4), 10; +done_testing; + +sub unique_sum(@a) +{ + my %bag; + $bag{$_}++ for @a; + sum0 grep { $bag{$_} == 1 } keys %bag +} diff --git a/challenge-228/mark-anderson/perl/ch-2.pl b/challenge-228/mark-anderson/perl/ch-2.pl new file mode 100644 index 0000000000..f5be9a5542 --- /dev/null +++ b/challenge-228/mark-anderson/perl/ch-2.pl @@ -0,0 +1,25 @@ +#!/usr/bin/env perl +use v5.32; +use List::Util qw/min/; +use List::MoreUtils qw/first_index/; +use Test::More; +use experimental qw/signatures/; + +is empty_array(3,4,2), 5; +is empty_array(1,2,3), 3; +is empty_array(16,17,8,15,13,11,19,5,12,6,20,2,4,10,3,14,1,7,9,18), 127; +done_testing; + +sub empty_array(@a) +{ + my $total; + + while(@a) + { + my $i = first_index { $_ == min @a } @a; + @a = (@a[$i+1..$#a], @a[0..$i-1]); + $total += $i+1 + } + + $total +} |
