diff options
| -rw-r--r-- | challenge-342/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-342/arne-sommer/raku/balance-string | 29 | ||||
| -rwxr-xr-x | challenge-342/arne-sommer/raku/ch-1.raku | 29 | ||||
| -rwxr-xr-x | challenge-342/arne-sommer/raku/ch-2.raku | 21 | ||||
| -rwxr-xr-x | challenge-342/arne-sommer/raku/max-score | 21 |
5 files changed, 101 insertions, 0 deletions
diff --git a/challenge-342/arne-sommer/blog.txt b/challenge-342/arne-sommer/blog.txt new file mode 100644 index 0000000000..9bd4ab84d9 --- /dev/null +++ b/challenge-342/arne-sommer/blog.txt @@ -0,0 +1 @@ +http://raku.local/maximum-balance.html
\ No newline at end of file diff --git a/challenge-342/arne-sommer/raku/balance-string b/challenge-342/arne-sommer/raku/balance-string new file mode 100755 index 0000000000..2e60a1eb78 --- /dev/null +++ b/challenge-342/arne-sommer/raku/balance-string @@ -0,0 +1,29 @@ +#! /usr/bin/env raku + +unit sub MAIN ($str where $str ~~ /^ <[0..9 a..z]>+ $/, + :v(:$verbose)); + +my @letters = $str.comb.grep( * eq any("a" .. "z") ).sort; +my @digits = $str.comb.grep( * eq any("0" .. "9") ).sort; + +my $letters = @letters.elems; +my $digits = @digits.elems; + +if $verbose +{ + say ": $letters letters: { @letters.join(", ") } (sorted)"; + say ": $digits digits: { @digits.join(", ") } (sorted)"; +} + +if $digits == $letters || $digits == $letters +1 +{ + say roundrobin(@digits, @letters).flat.join; +} +elsif $digits == $letters -1 +{ + say roundrobin(@letters, @digits).flat.join; +} +else +{ + say ""; +} diff --git a/challenge-342/arne-sommer/raku/ch-1.raku b/challenge-342/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..2e60a1eb78 --- /dev/null +++ b/challenge-342/arne-sommer/raku/ch-1.raku @@ -0,0 +1,29 @@ +#! /usr/bin/env raku + +unit sub MAIN ($str where $str ~~ /^ <[0..9 a..z]>+ $/, + :v(:$verbose)); + +my @letters = $str.comb.grep( * eq any("a" .. "z") ).sort; +my @digits = $str.comb.grep( * eq any("0" .. "9") ).sort; + +my $letters = @letters.elems; +my $digits = @digits.elems; + +if $verbose +{ + say ": $letters letters: { @letters.join(", ") } (sorted)"; + say ": $digits digits: { @digits.join(", ") } (sorted)"; +} + +if $digits == $letters || $digits == $letters +1 +{ + say roundrobin(@digits, @letters).flat.join; +} +elsif $digits == $letters -1 +{ + say roundrobin(@letters, @digits).flat.join; +} +else +{ + say ""; +} diff --git a/challenge-342/arne-sommer/raku/ch-2.raku b/challenge-342/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..1e0b6a0237 --- /dev/null +++ b/challenge-342/arne-sommer/raku/ch-2.raku @@ -0,0 +1,21 @@ +#! /usr/bin/env raku + +unit sub MAIN ($str where $str ~~ /^ <[01]> ** 2..* $/, + :v(:$verbose)); + +my $max = -Inf; + +for 1 .. $str.chars -1 -> $i +{ + my $left = $str.substr(0, $i); + my $right = $str.substr($i); + my $left-score = $left.comb.grep( * eq 0 ).elems; + my $right-score = $right.comb.sum; + my $score = $left-score + $right-score; + + say ": Index:$i: $left - $right | $left-score + $right-score = $score { $score > $max ?? "max" !! ""}" if $verbose; + + $max = $score if $score > $max; +} + +say $max; diff --git a/challenge-342/arne-sommer/raku/max-score b/challenge-342/arne-sommer/raku/max-score new file mode 100755 index 0000000000..1e0b6a0237 --- /dev/null +++ b/challenge-342/arne-sommer/raku/max-score @@ -0,0 +1,21 @@ +#! /usr/bin/env raku + +unit sub MAIN ($str where $str ~~ /^ <[01]> ** 2..* $/, + :v(:$verbose)); + +my $max = -Inf; + +for 1 .. $str.chars -1 -> $i +{ + my $left = $str.substr(0, $i); + my $right = $str.substr($i); + my $left-score = $left.comb.grep( * eq 0 ).elems; + my $right-score = $right.comb.sum; + my $score = $left-score + $right-score; + + say ": Index:$i: $left - $right | $left-score + $right-score = $score { $score > $max ?? "max" !! ""}" if $verbose; + + $max = $score if $score > $max; +} + +say $max; |
