diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-01-29 05:42:44 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-01-29 05:42:44 +0000 |
| commit | 32d92f6e8d7ec356dc1a33b1b464da7382de5747 (patch) | |
| tree | 69fc1a22eebeddfd83562844c99f0b7f7470ca36 /challenge-044/javier-luque | |
| parent | b44b4b7025056aed3f7023a66dd8eda44a6d65bc (diff) | |
| download | perlweeklychallenge-club-32d92f6e8d7ec356dc1a33b1b464da7382de5747.tar.gz perlweeklychallenge-club-32d92f6e8d7ec356dc1a33b1b464da7382de5747.tar.bz2 perlweeklychallenge-club-32d92f6e8d7ec356dc1a33b1b464da7382de5747.zip | |
- Added solutions by Javier Luque.
Diffstat (limited to 'challenge-044/javier-luque')
| -rw-r--r-- | challenge-044/javier-luque/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-044/javier-luque/perl/ch-1.pl | 22 | ||||
| -rw-r--r-- | challenge-044/javier-luque/perl/ch-2.pl | 36 | ||||
| -rw-r--r-- | challenge-044/javier-luque/raku/ch-1.p6 | 19 | ||||
| -rw-r--r-- | challenge-044/javier-luque/raku/ch-2.p6 | 36 |
5 files changed, 114 insertions, 0 deletions
diff --git a/challenge-044/javier-luque/blog.txt b/challenge-044/javier-luque/blog.txt new file mode 100644 index 0000000000..fd8c2aca47 --- /dev/null +++ b/challenge-044/javier-luque/blog.txt @@ -0,0 +1 @@ +https://perlchallenges.wordpress.com/2020/01/21/perl-weekly-challenge-044/ diff --git a/challenge-044/javier-luque/perl/ch-1.pl b/challenge-044/javier-luque/perl/ch-1.pl new file mode 100644 index 0000000000..2d982eb115 --- /dev/null +++ b/challenge-044/javier-luque/perl/ch-1.pl @@ -0,0 +1,22 @@ +#!/usr/bin/perl +# Test: ./ch-1.pl +use strict; +use warnings; +use feature qw /say/; + +my $numbers = '123456789'; +check_numbers('', $numbers, 100); + +sub check_numbers { + my ($n, $nums, $goal) = @_; + + if ($nums) { + my ($n2, $new_numbers) = split('', $nums, 2); + check_numbers($n . '+' . $n2, $new_numbers, $goal); + check_numbers($n . '-' . $n2, $new_numbers, $goal); + check_numbers($n . $n2, $new_numbers, $goal); + } else { + my $total = eval $n; + say $n if ($total == $goal) + } +} diff --git a/challenge-044/javier-luque/perl/ch-2.pl b/challenge-044/javier-luque/perl/ch-2.pl new file mode 100644 index 0000000000..fa7e49029e --- /dev/null +++ b/challenge-044/javier-luque/perl/ch-2.pl @@ -0,0 +1,36 @@ +#!/usr/bin/perl +# test: ./ch-2.pl +use strict; +use warnings; +use feature qw /say/; + +my $min_steps = 15; +my $min_solution; + +add_or_double(1, 0, ''); +say 'Found smallest solution in ' . $min_steps . ' steps: ' . $min_solution; + +sub add_or_double { + my ($cash, $steps, $solution) = @_; + $steps++; + + # Let's not deep recurse past 15 + if ($steps > 15) { + return undef; + } + + if ($cash == 200) { + if ($min_steps > $steps) { + $min_steps = $steps; + $min_solution = $solution; + } + } + + if ($cash * 2 <= 200 ) { + add_or_double($cash * 2, $steps, $solution . 'd' ); + } + + if ($cash + 1 <= 200) { + add_or_double($cash + 1, $steps, $solution . 'a'); + } +} diff --git a/challenge-044/javier-luque/raku/ch-1.p6 b/challenge-044/javier-luque/raku/ch-1.p6 new file mode 100644 index 0000000000..f3d7836cb4 --- /dev/null +++ b/challenge-044/javier-luque/raku/ch-1.p6 @@ -0,0 +1,19 @@ +use v6.d; +use MONKEY-SEE-NO-EVAL; + +sub MAIN() { + my $numbers = '123456789'; + check-numbers('', $numbers, 100); +} + +sub check-numbers(Str $n, $nums, Int $goal) { + if ($nums) { + my ($n2, $new_numbers) = $nums.split("", 2, :skip-empty); + check-numbers($n ~ '+' ~ $n2, $new_numbers, $goal); + check-numbers($n ~ '-' ~ $n2, $new_numbers, $goal); + check-numbers($n ~ $n2, $new_numbers, $goal); + } else { + my $total = EVAL $n; #too lazy to do this better + say $n if ($total == $goal); + } +} diff --git a/challenge-044/javier-luque/raku/ch-2.p6 b/challenge-044/javier-luque/raku/ch-2.p6 new file mode 100644 index 0000000000..db880ef971 --- /dev/null +++ b/challenge-044/javier-luque/raku/ch-2.p6 @@ -0,0 +1,36 @@ +# Test: perl6 ./ch-2.p6 +use v6.d; + +our $min_steps = 15; +our $min_solution; + +sub MAIN () { + add-or-double(1, 0, ''); + say 'Found smallest solution in ' ~ $min_steps ~ + ' steps: ' ~ $min_solution; +} + + +sub add-or-double(Int $cash, Int $current_steps, Str $solution) { + my $steps = $current_steps + 1; + + # Let's not deep recurse past 15 + if ($steps > 15) { + return Nil; + } + + if ($cash == 200) { + if ($min_steps > $steps) { + $min_steps = $steps; + $min_solution = $solution; + } + } + + if ($cash * 2 <= 200 ) { + add-or-double($cash * 2, $steps, $solution ~ 'd' ); + } + + if ($cash + 1 <= 200) { + add-or-double($cash + 1, $steps, $solution ~ 'a'); + } +} |
