aboutsummaryrefslogtreecommitdiff
path: root/challenge-044/javier-luque
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-01-29 05:42:44 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-01-29 05:42:44 +0000
commit32d92f6e8d7ec356dc1a33b1b464da7382de5747 (patch)
tree69fc1a22eebeddfd83562844c99f0b7f7470ca36 /challenge-044/javier-luque
parentb44b4b7025056aed3f7023a66dd8eda44a6d65bc (diff)
downloadperlweeklychallenge-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.txt1
-rw-r--r--challenge-044/javier-luque/perl/ch-1.pl22
-rw-r--r--challenge-044/javier-luque/perl/ch-2.pl36
-rw-r--r--challenge-044/javier-luque/raku/ch-1.p619
-rw-r--r--challenge-044/javier-luque/raku/ch-2.p636
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');
+ }
+}