diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-08-04 04:48:03 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-04 04:48:03 +0100 |
| commit | eca006c0a5bb885b19a58865773bc945c092959a (patch) | |
| tree | 7721bf91502f3442eac71f55e64ad7b31031b1e6 | |
| parent | 831db365b80ec3e27574881583a23d6cb02db1d2 (diff) | |
| parent | bec1ced3637dd6309e4b844370107e29c8b724e9 (diff) | |
| download | perlweeklychallenge-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/README | 1 | ||||
| -rw-r--r-- | challenge-124/kjetillll/perl/ch-1.pl | 2 | ||||
| -rw-r--r-- | challenge-124/kjetillll/perl/ch-2.pl | 31 |
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(@$_); +} |
