diff options
| -rw-r--r-- | challenge-124/kjetillll/perl/ch-1.pl | 2 | ||||
| -rw-r--r-- | challenge-124/kjetillll/perl/ch-2.pl | 31 |
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(@$_); +} |
