aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-228/mark-anderson/perl/ch-1.pl17
-rw-r--r--challenge-228/mark-anderson/perl/ch-2.pl25
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
+}