diff options
Diffstat (limited to 'challenge-042')
| -rw-r--r-- | challenge-042/javier-luque/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-042/javier-luque/perl/ch-1.pl | 14 | ||||
| -rw-r--r-- | challenge-042/javier-luque/perl/ch-2.pl | 38 | ||||
| -rw-r--r-- | challenge-042/javier-luque/raku/ch-1.p6 | 13 | ||||
| -rw-r--r-- | challenge-042/javier-luque/raku/ch-2.p6 | 29 |
5 files changed, 95 insertions, 0 deletions
diff --git a/challenge-042/javier-luque/blog.txt b/challenge-042/javier-luque/blog.txt new file mode 100644 index 0000000000..b23134bfd4 --- /dev/null +++ b/challenge-042/javier-luque/blog.txt @@ -0,0 +1 @@ +https://perlchallenges.wordpress.com/2020/01/06/perl-weekly-challenge-042/ diff --git a/challenge-042/javier-luque/perl/ch-1.pl b/challenge-042/javier-luque/perl/ch-1.pl new file mode 100644 index 0000000000..5a58151aa2 --- /dev/null +++ b/challenge-042/javier-luque/perl/ch-1.pl @@ -0,0 +1,14 @@ +#!/usr/bin/perl +# Test: ./ch-1.pl +use strict; +use warnings; +use feature qw /say/; + +for my $i (1..50) { + say 'Decimal ' . $i . + ' = Octal ' . to_octal($i); +} + +sub to_octal { + return sprintf('%o', shift); +} diff --git a/challenge-042/javier-luque/perl/ch-2.pl b/challenge-042/javier-luque/perl/ch-2.pl new file mode 100644 index 0000000000..04a6078fd6 --- /dev/null +++ b/challenge-042/javier-luque/perl/ch-2.pl @@ -0,0 +1,38 @@ +#!/usr/bin/perl +# test: ./ch2.pl +use strict; +use warnings; +use feature qw /say/; +use constant { + MAX_STRING_LENGTH => 4 +}; + +for my $i ( 1 .. 20 ) { + my $string = generate_random_string(); + my $ok = (validate_string($string)) ? 'OK ' : 'NOT OK'; + say $string . ' - ' . $ok; +} + +sub generate_random_string { + my $length = int(rand(MAX_STRING_LENGTH - 1) + 2); + my $string; + + for my $i (1 .. $length ) { + $string .= (int(rand(2))) ? '(' : ')'; + } + + return $string; +} + +sub validate_string { + my $open_p; + + for my $char (split('', shift)) { + $open_p++ if ($char eq '('); + $open_p-- if ($char eq ')'); + + return 0 if ($open_p < 0); + } + + return ($open_p == 0); +} diff --git a/challenge-042/javier-luque/raku/ch-1.p6 b/challenge-042/javier-luque/raku/ch-1.p6 new file mode 100644 index 0000000000..97022c1f81 --- /dev/null +++ b/challenge-042/javier-luque/raku/ch-1.p6 @@ -0,0 +1,13 @@ +# Test: perl6 ch-1.p6 +use v6.d; + +sub MAIN() { + for (1..50) -> $i { + say 'Decimal ' ~ $i ~ + ' = Octal ' ~ to-octal($i); + } +} + +sub to-octal(Int $i) { + return sprintf('%o', $i); +} diff --git a/challenge-042/javier-luque/raku/ch-2.p6 b/challenge-042/javier-luque/raku/ch-2.p6 new file mode 100644 index 0000000000..8d19010e59 --- /dev/null +++ b/challenge-042/javier-luque/raku/ch-2.p6 @@ -0,0 +1,29 @@ +# Test: perl6 ./ch-2.p6 +use v6.d; +constant $MAX_STRING_LENGTH = 4; + +sub MAIN () { + for ( 1 .. 20 ) { + my $string = generate-random-string(); + my $ok = (validate-string($string)) ?? 'OK ' !! 'NOT OK'; + say $string ~ ' - ' ~ $ok; + } +} + +sub generate-random-string { + return <( )>.roll( + Int((2 .. $MAX_STRING_LENGTH + 1).rand) + ).join; +} + +sub validate-string(Str $word) { + my $open_p; + + for $word.comb -> $letter { + $open_p++ if ($letter eq '('); + $open_p-- if ($letter eq ')'); + return 0 if ($open_p < 0); + } + + return ($open_p == 0); +} |
