aboutsummaryrefslogtreecommitdiff
path: root/challenge-043
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-01-14 12:29:54 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-01-14 12:29:54 +0000
commit3f9544c868fc0509aaacafd021663b5db7d3e83d (patch)
treeca4404170f350bb25e4e76ea228d013fb4f40c31 /challenge-043
parentfac9200e6513364d542a7e0bd07b7ddfa2ee48e6 (diff)
downloadperlweeklychallenge-club-3f9544c868fc0509aaacafd021663b5db7d3e83d.tar.gz
perlweeklychallenge-club-3f9544c868fc0509aaacafd021663b5db7d3e83d.tar.bz2
perlweeklychallenge-club-3f9544c868fc0509aaacafd021663b5db7d3e83d.zip
- Updated solutions by Javier Luque.
Diffstat (limited to 'challenge-043')
-rw-r--r--challenge-043/javier-luque/perl/ch-1.pl47
-rw-r--r--challenge-043/javier-luque/raku/ch-1.p644
2 files changed, 58 insertions, 33 deletions
diff --git a/challenge-043/javier-luque/perl/ch-1.pl b/challenge-043/javier-luque/perl/ch-1.pl
index b7e90ef3db..43e3bc3f0c 100644
--- a/challenge-043/javier-luque/perl/ch-1.pl
+++ b/challenge-043/javier-luque/perl/ch-1.pl
@@ -1,28 +1,41 @@
#!/usr/bin/perl
-# Test: ./ch-1.pl
+# Test: ./ch1.pl
use strict;
use warnings;
use feature qw /say/;
+use Algorithm::Combinatorics qw(permutations);
my @numbers = (1, 2, 3, 4, 6);
-my %rings = (
- blue => 8,
- yellow => 7,
- green => 5,
- red => 9,
- black => 0
-);
+my $rings = {
+ blue => 8, yellow => 7,
+ green => 5, red => 9,
+};
-for my $ring ( keys %rings ) {
- my $total = $rings{$ring};
- my @additional_numbers;
- for my $i (sort { $b <=> $a } @numbers) {
- if ($total + $i <= 11) {
- $total += $i;
- push @additional_numbers, $i;
+my $iter = permutations(\@numbers);
+while (my $p = $iter->next) {
+ my $slots = {
+ redgreen => $p->[0],
+ greenblack => $p->[1],
+ black => $p->[2],
+ blackyellow => $p->[3],
+ yellowblue => $p->[4]
+ };
+
+ if (validate_answer($rings, $slots)) {
+ for my $key (keys %$slots) {
+ say 'Slot: ' . $key .
+ ' value: ' . $slots->{$key};
}
}
+}
+
+sub validate_answer {
+ my ($r, $s) = @_; # rings and slots
- say 'Color: ' . $ring . ' - ' .
- join ', ', @additional_numbers;
+ return
+ ( $s->{redgreen} + $r->{red} == 11 &&
+ $s->{redgreen} + $r->{green} + $s->{greenblack} == 11 &&
+ $s->{greenblack} + $s->{black} + $s->{blackyellow} == 11 &&
+ $s->{blackyellow} + $r->{yellow} + $s->{yellowblue} == 11 &&
+ $r->{blue} + $s->{yellowblue} == 11 );
}
diff --git a/challenge-043/javier-luque/raku/ch-1.p6 b/challenge-043/javier-luque/raku/ch-1.p6
index c4e3c27fb1..9b80bf5090 100644
--- a/challenge-043/javier-luque/raku/ch-1.p6
+++ b/challenge-043/javier-luque/raku/ch-1.p6
@@ -1,28 +1,40 @@
-# Test: perl6 ch-1.p6
+# Test: perl6 ch1.p6
use v6.d;
my @numbers = (1, 2, 3, 4, 6);
my %rings = (
- blue => 8,
- yellow => 7,
- green => 5,
- red => 9,
- black => 0
+ blue => 8, yellow => 7,
+ green => 5, red => 9,
);
sub MAIN() {
- for ( %rings.keys ) -> $ring {
- my $total = %rings.{$ring};
- my @additional_numbers;
+ my @perms = @numbers.permutations;
- for ( @numbers.sort.reverse ) -> $i {
- if ($total + $i <= 11) {
- $total += $i;
- push @additional_numbers, $i;
+ for @perms -> $perm {
+ my %slots = (
+ redgreen => $perm[0],
+ greenblack => $perm[1],
+ black => $perm[2],
+ blackyellow => $perm[3],
+ yellowblue => $perm[4]
+ );
+
+ if (validate-answer(%rings, %slots)) {
+ for (%slots.keys) -> $key {
+ say 'Slot: ' ~ $key ~
+ ' value: ' ~ %slots.{$key};
}
}
-
- say 'Color: ' ~ $ring ~ ' - ' ~
- @additional_numbers.join(', ');
}
}
+
+
+sub validate-answer(%r, %s) { # rings and slots
+
+ return
+ ( %s.<redgreen> + %r.<red> == 11 &&
+ %s.<redgreen> + %r.<green> + %s.<greenblack> == 11 &&
+ %s.<greenblack> + %s.<black> + %s.<blackyellow> == 11 &&
+ %s.<blackyellow> + %r.<yellow> + %s.<yellowblue> == 11 &&
+ %r.<blue> + %s.<yellowblue> == 11 );
+}