diff options
Diffstat (limited to 'challenge-042')
| -rw-r--r-- | challenge-042/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-042/arne-sommer/raku/brackets | 37 | ||||
| -rwxr-xr-x | challenge-042/arne-sommer/raku/brackets-mono | 30 | ||||
| -rwxr-xr-x | challenge-042/arne-sommer/raku/ch-1.p6 | 3 | ||||
| -rwxr-xr-x | challenge-042/arne-sommer/raku/ch-2.p6 | 37 | ||||
| -rwxr-xr-x | challenge-042/arne-sommer/raku/octal-base | 3 | ||||
| -rwxr-xr-x | challenge-042/arne-sommer/raku/octal-fmt | 3 |
7 files changed, 114 insertions, 0 deletions
diff --git a/challenge-042/arne-sommer/blog.txt b/challenge-042/arne-sommer/blog.txt new file mode 100644 index 0000000000..98a68df7f8 --- /dev/null +++ b/challenge-042/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/octal-brace.html diff --git a/challenge-042/arne-sommer/raku/brackets b/challenge-042/arne-sommer/raku/brackets new file mode 100755 index 0000000000..fb40dbe06c --- /dev/null +++ b/challenge-042/arne-sommer/raku/brackets @@ -0,0 +1,37 @@ +#! /usr/bin/env raku + +unit sub MAIN (:$maxchars = 6, :$iterations = 10, :$color); + +sub brackets ($count = (1 .. $maxchars).pick) +{ + return (^$count).map({ <( )>.pick }).join; +} + +sub is-balanced ($brackets) +{ + return False if $brackets.chars % 2; # An odd number + return False if $brackets.substr(0, 1) eq ')'; + return False if $brackets.substr(*-1,1) eq '('; + + my $count = 0; + + for $brackets.comb -> $char + { + if $char eq '(' { $count++; } + elsif $char eq ')' { $count--; } + else { die "Illegal character $char"; } + + return False if $count < 0; # Unbalanced inside + } + + return $count == 0; +} + +for ^$iterations +{ + my $brackets = brackets; + + $color + ?? say "$brackets - { is-balanced($brackets) ?? "\x1b[42m" ~ "OK" !! "\x1b[41m" ~ "NOT OK" }" ~ "\x1b[0m" + !! say "$brackets - { is-balanced($brackets) ?? "OK" !! "NOT OK" }"; +} diff --git a/challenge-042/arne-sommer/raku/brackets-mono b/challenge-042/arne-sommer/raku/brackets-mono new file mode 100755 index 0000000000..41e7cc2c17 --- /dev/null +++ b/challenge-042/arne-sommer/raku/brackets-mono @@ -0,0 +1,30 @@ +#! /usr/bin/env raku + +unit sub MAIN (:$maxchars = 6, :$iterations = 10); + +sub brackets ($count = (1 .. $maxchars).pick) +{ + return (^$count).map({ <( )>.pick }).join; +} + +sub is-balanced ($brackets) +{ + my $count = 0; + + for $brackets.comb -> $char + { + if $char eq '(' { $count++; } + elsif $char eq ')' { $count--; } + else { die "Illegal character $char"; } + + return False if $count < 0; # Unbalanced inside + } + + return $count == 0; +} + +for ^$iterations +{ + my $brackets = brackets; + say "$brackets - { is-balanced($brackets) ?? "OK" !! "NOT OK" }"; +} diff --git a/challenge-042/arne-sommer/raku/ch-1.p6 b/challenge-042/arne-sommer/raku/ch-1.p6 new file mode 100755 index 0000000000..75b45f9b0f --- /dev/null +++ b/challenge-042/arne-sommer/raku/ch-1.p6 @@ -0,0 +1,3 @@ +#! /usr/bin/env raku + +say "Decimal $_ = Octal { $_.base(8) }" for ^51; diff --git a/challenge-042/arne-sommer/raku/ch-2.p6 b/challenge-042/arne-sommer/raku/ch-2.p6 new file mode 100755 index 0000000000..fb40dbe06c --- /dev/null +++ b/challenge-042/arne-sommer/raku/ch-2.p6 @@ -0,0 +1,37 @@ +#! /usr/bin/env raku + +unit sub MAIN (:$maxchars = 6, :$iterations = 10, :$color); + +sub brackets ($count = (1 .. $maxchars).pick) +{ + return (^$count).map({ <( )>.pick }).join; +} + +sub is-balanced ($brackets) +{ + return False if $brackets.chars % 2; # An odd number + return False if $brackets.substr(0, 1) eq ')'; + return False if $brackets.substr(*-1,1) eq '('; + + my $count = 0; + + for $brackets.comb -> $char + { + if $char eq '(' { $count++; } + elsif $char eq ')' { $count--; } + else { die "Illegal character $char"; } + + return False if $count < 0; # Unbalanced inside + } + + return $count == 0; +} + +for ^$iterations +{ + my $brackets = brackets; + + $color + ?? say "$brackets - { is-balanced($brackets) ?? "\x1b[42m" ~ "OK" !! "\x1b[41m" ~ "NOT OK" }" ~ "\x1b[0m" + !! say "$brackets - { is-balanced($brackets) ?? "OK" !! "NOT OK" }"; +} diff --git a/challenge-042/arne-sommer/raku/octal-base b/challenge-042/arne-sommer/raku/octal-base new file mode 100755 index 0000000000..75b45f9b0f --- /dev/null +++ b/challenge-042/arne-sommer/raku/octal-base @@ -0,0 +1,3 @@ +#! /usr/bin/env raku + +say "Decimal $_ = Octal { $_.base(8) }" for ^51; diff --git a/challenge-042/arne-sommer/raku/octal-fmt b/challenge-042/arne-sommer/raku/octal-fmt new file mode 100755 index 0000000000..dd33111e62 --- /dev/null +++ b/challenge-042/arne-sommer/raku/octal-fmt @@ -0,0 +1,3 @@ +#! /usr/bin/env raku + +say "Decimal $_ = Octal { $_.fmt('%o') }" for ^51; |
