aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-124/kjetillll/perl/ch-1.pl2
-rw-r--r--challenge-124/kjetillll/perl/ch-2.pl31
2 files changed, 33 insertions, 0 deletions
diff --git a/challenge-124/kjetillll/perl/ch-1.pl b/challenge-124/kjetillll/perl/ch-1.pl
new file mode 100644
index 0000000000..dbfb4cbf8a
--- /dev/null
+++ b/challenge-124/kjetillll/perl/ch-1.pl
@@ -0,0 +1,2 @@
+#!/usr/bin/env perl
+print qx(curl -si https://theweeklychallenge.org/blog/perl-weekly-challenge-124/)=~m|<code>([\s^]+)</code>| ? $1 : ''
diff --git a/challenge-124/kjetillll/perl/ch-2.pl b/challenge-124/kjetillll/perl/ch-2.pl
new file mode 100644
index 0000000000..17bf7bb83e
--- /dev/null
+++ b/challenge-124/kjetillll/perl/ch-2.pl
@@ -0,0 +1,31 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+sub sum{my$s;map$s+=$_,@_;$s}
+
+sub div{
+ my %least;
+ for my $div (0..2**@_-1){
+ my @ss=([],[]);
+ push( @{ $ss[$div%2] }, $_) and $div>>=1 for @_;
+ next if @{$ss[0]} != @{$ss[1]} + @_%2;
+ my $diff=abs( sum(@{$ss[0]}) - sum(@{$ss[1]}) );
+ %least=(diff=>$diff,subsets=>\@ss)
+ if not exists $least{diff}
+ or $diff < $least{diff};
+ }
+ @{$least{subsets}}
+}
+
+#Run on input list given as command line args
+#or two test cases if no input args is given.
+
+my @cases = @ARGV ? ( [@ARGV] )
+ : ( [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
+ [10, -15, 20, 30, -25, 0, 5, 40, -5] );
+for ( @cases ) {
+ print "-" x 50, "\n";
+ print "Input: @$_\n";
+ print "Output sum ".sum(@$_).": @$_\n" for div(@$_);
+}