diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-01-11 09:23:15 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-01-11 09:23:15 +0000 |
| commit | 03a1b2abec04d76a7567deae863f7fe603a93965 (patch) | |
| tree | d8d773e96bc924737e37429949f4bf796f4f894e | |
| parent | 612d4c4f6c947d4aa461b71402a8fc87855bab54 (diff) | |
| parent | a8e7f1878d5f01fd933d0ea4a83b1226a56c747a (diff) | |
| download | perlweeklychallenge-club-03a1b2abec04d76a7567deae863f7fe603a93965.tar.gz perlweeklychallenge-club-03a1b2abec04d76a7567deae863f7fe603a93965.tar.bz2 perlweeklychallenge-club-03a1b2abec04d76a7567deae863f7fe603a93965.zip | |
Merge pull request #1126 from noudald/challenge-042-noud
Challenge 042 noud
| -rw-r--r-- | challenge-042/noud/perl6/ch-1.p6 | 18 | ||||
| -rw-r--r-- | challenge-042/noud/perl6/ch-2.p6 | 51 |
2 files changed, 69 insertions, 0 deletions
diff --git a/challenge-042/noud/perl6/ch-1.p6 b/challenge-042/noud/perl6/ch-1.p6 new file mode 100644 index 0000000000..21c3deec02 --- /dev/null +++ b/challenge-042/noud/perl6/ch-1.p6 @@ -0,0 +1,18 @@ +# Octal Number System +# +# Write a script to print decimal number 0 to 50 in Octal Number System. +# +# For example: +# Decimal 0 = Octal 0 +# Decimal 1 = Octal 1 +# Decimal 2 = Octal 2 +# Decimal 3 = Octal 3 +# Decimal 4 = Octal 4 +# Decimal 5 = Octal 5 +# Decimal 6 = Octal 6 +# Decimal 7 = Octal 7 +# Decimal 8 = Octal 10 +# +# and so on. + +say $_.fmt("Decimal $_ = Octal %o") for ^51; diff --git a/challenge-042/noud/perl6/ch-2.p6 b/challenge-042/noud/perl6/ch-2.p6 new file mode 100644 index 0000000000..59415fbd69 --- /dev/null +++ b/challenge-042/noud/perl6/ch-2.p6 @@ -0,0 +1,51 @@ +# Balanced Brackets +# +# Write a script to generate a string with random number of ( and ) brackets. +# Then make the script validate the string if it has balanced brackets. +# +# For example: +# () - OK +# (()) - OK +# )( - NOT OK +# ())() - NOT OK + +sub rand_brackets($size) { + return [~] (<( )>.pick() for ^$size); +} + +sub balanced($brackets) { + # Count the open ( and close ) brackets sequentially. ( is given +1, ) is + # given -1. If the count ever goes below zero there are more close + # brackets than open brackets, hence an unbalanced string. If at the end + # the count is more than zero there are more open brackets than close + # brackets, hence an unbalanced string. + my $c = 0; + + for $brackets.comb() -> $b { + if ($b === '(') { + $c++; + } elsif (--$c < 0) { + return False; + } + } + + return $c == 0; +} + +say "() - " ~ balanced("()"); +say "(()) - " ~ balanced("(())"); +say ")( - " ~ balanced(")("); +say "())() - " ~ balanced("())()"); + + +my $brackets = ''; +for 1..20 -> $i { + # Only generate bracket strings of length 4, because with higher lengths + # the randomly generated strings rarely are balanced. + $brackets = rand_brackets(4); + if (balanced($brackets)) { + say $brackets ~ ' is balanced.'; + } else { + say $brackets ~ ' is not balanced.'; + } +} |
