aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-08-04 04:48:03 +0100
committerGitHub <noreply@github.com>2021-08-04 04:48:03 +0100
commiteca006c0a5bb885b19a58865773bc945c092959a (patch)
tree7721bf91502f3442eac71f55e64ad7b31031b1e6
parent831db365b80ec3e27574881583a23d6cb02db1d2 (diff)
parentbec1ced3637dd6309e4b844370107e29c8b724e9 (diff)
downloadperlweeklychallenge-club-eca006c0a5bb885b19a58865773bc945c092959a.tar.gz
perlweeklychallenge-club-eca006c0a5bb885b19a58865773bc945c092959a.tar.bz2
perlweeklychallenge-club-eca006c0a5bb885b19a58865773bc945c092959a.zip
Merge pull request #4650 from kjetillll/ch124-kjetillll-happy-women-of-war
challenge 124, ch-1.pl and ch-2.pl
-rw-r--r--challenge-124/kjetillll/README1
-rw-r--r--challenge-124/kjetillll/perl/ch-1.pl2
-rw-r--r--challenge-124/kjetillll/perl/ch-2.pl31
3 files changed, 34 insertions, 0 deletions
diff --git a/challenge-124/kjetillll/README b/challenge-124/kjetillll/README
new file mode 100644
index 0000000000..15198597ff
--- /dev/null
+++ b/challenge-124/kjetillll/README
@@ -0,0 +1 @@
+Solution by kjetillll
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(@$_);
+}