From 3f9544c868fc0509aaacafd021663b5db7d3e83d Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Tue, 14 Jan 2020 12:29:54 +0000 Subject: - Updated solutions by Javier Luque. --- challenge-043/javier-luque/perl/ch-1.pl | 47 +++++++++++++++++++++------------ challenge-043/javier-luque/raku/ch-1.p6 | 44 +++++++++++++++++++----------- 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. + %r. == 11 && + %s. + %r. + %s. == 11 && + %s. + %s. + %s. == 11 && + %s. + %r. + %s. == 11 && + %r. + %s. == 11 ); +} -- cgit