diff options
| -rwxr-xr-x | challenge-109/stuart-little/perl/ch-1.pl | 7 | ||||
| -rwxr-xr-x | challenge-109/stuart-little/perl/ch-2.pl | 30 |
2 files changed, 37 insertions, 0 deletions
diff --git a/challenge-109/stuart-little/perl/ch-1.pl b/challenge-109/stuart-little/perl/ch-1.pl new file mode 100755 index 0000000000..40c307afbc --- /dev/null +++ b/challenge-109/stuart-little/perl/ch-1.pl @@ -0,0 +1,7 @@ +#!/usr/bin/perl +use warnings; +use v5.12; + +# run <script> + +say "0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21"; diff --git a/challenge-109/stuart-little/perl/ch-2.pl b/challenge-109/stuart-little/perl/ch-2.pl new file mode 100755 index 0000000000..da8429bebf --- /dev/null +++ b/challenge-109/stuart-little/perl/ch-2.pl @@ -0,0 +1,30 @@ +#!/usr/bin/perl +use warnings; +use v5.12; + +# run <script> <space-separated numbers> + +use feature qw(signatures); +no warnings qw(experimental::signatures); + +use Algorithm::Permute qw(permute); +use List::AllUtils qw(sum min all pairwise); + +sub checkSameSums($aref) { + my $len = scalar @{$aref}; + return all {$_ == sum $aref->@[0,1]} map {sum $aref->@[2*$_-1..(min(2*$_+1,$len-1))]} (1..(int $len/2)); +} + +sub pprnt($aref) { + my @letters = ('a'..'g'); + my @strngs = pairwise {qq|$a = $b|} @letters, @{$aref}; + return join(', ', @strngs); +} + +my $solCount=0; + +permute { if (checkSameSums(\@ARGV)) {$solCount++; my $out = pprnt(\@ARGV); say "Solution: $out\nSum: ${\ do{sum @ARGV[0,1]}}\n"} } @ARGV; + +(! $solCount) && do { + say "No solution." +} |
