diff options
| -rw-r--r-- | challenge-343/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-343/arne-sommer/raku/ch-1.raku | 6 | ||||
| -rwxr-xr-x | challenge-343/arne-sommer/raku/ch-2.raku | 59 | ||||
| -rwxr-xr-x | challenge-343/arne-sommer/raku/champion-team | 69 | ||||
| -rwxr-xr-x | challenge-343/arne-sommer/raku/champion-team-loop | 59 | ||||
| -rwxr-xr-x | challenge-343/arne-sommer/raku/zero-friend | 6 | ||||
| -rwxr-xr-x | challenge-343/arne-sommer/raku/zero-friend-fixed | 6 | ||||
| -rwxr-xr-x | challenge-343/arne-sommer/raku/zero-friend-int | 5 |
8 files changed, 211 insertions, 0 deletions
diff --git a/challenge-343/arne-sommer/blog.txt b/challenge-343/arne-sommer/blog.txt new file mode 100644 index 0000000000..e9f6b6238e --- /dev/null +++ b/challenge-343/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/team-zero.html
\ No newline at end of file diff --git a/challenge-343/arne-sommer/raku/ch-1.raku b/challenge-343/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..c45164d0b1 --- /dev/null +++ b/challenge-343/arne-sommer/raku/ch-1.raku @@ -0,0 +1,6 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@nums where @nums.elems > 0 && all(@nums) ~~ Numeric); + +say @nums>>.Numeric>>.abs.min; + diff --git a/challenge-343/arne-sommer/raku/ch-2.raku b/challenge-343/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..aff7cf8af6 --- /dev/null +++ b/challenge-343/arne-sommer/raku/ch-2.raku @@ -0,0 +1,59 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@rows where @rows.elems == @rows[0].chars + && all(@rows) ~~ /^ <[01]> ** { @rows[0].chars } $/, + :v(:$verbose)); + +my @matrix = @rows>>.comb>>.Array; +my @team-numbers = ^@matrix.elems; +my $size = @matrix.elems; +my $iteration = 1; + +loop +{ + my %res = winners(@matrix, @team-numbers); + + @matrix = @(%res<matrix>); + @team-numbers = @(%res<team-numbers>); + + last if @team-numbers.elems == $size || @team-numbers.elems == 1; + $size = @team-numbers.elems; +} + +say @team-numbers.join(", "); + +sub winners (@matrix, @team-numbers) +{ + my @scores = @matrix>>.sum; + my $max = @scores.max; + + if $verbose + { + say ": Iteration { $iteration++ } (with size { @matrix.elems })"; + my $i = 0; + for ^@matrix.elems -> $team + { + say ": Team {@team-numbers[$i++]} has score @scores[$team] (values [ @matrix[$team].join(", ") ]) { @scores[$team] == $max ?? "MAX" !! "" }"; + } + } + + my @maxes = (0 .. @scores.end).grep({ @scores[$_] == $max }); + my @new-matrix; + my @new-team-numbers; + + # return { matrix => $max, team-numbers => @team-numbers[@maxes[0]] } if @maxes.elems == 1; + + for ^@matrix.elems -> $i + { + next unless $i == any(@maxes); + @new-team-numbers.push: @team-numbers[$i]; + my @row; + for ^@matrix.elems -> $j + { + next unless $j == any(@maxes); + @row.push: @matrix[$i;$j]; + } + @new-matrix.push: @row; + } + return { matrix => @new-matrix, team-numbers => @new-team-numbers }; +} diff --git a/challenge-343/arne-sommer/raku/champion-team b/challenge-343/arne-sommer/raku/champion-team new file mode 100755 index 0000000000..bedd3b00e7 --- /dev/null +++ b/challenge-343/arne-sommer/raku/champion-team @@ -0,0 +1,69 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@rows where @rows.elems == @rows[0].chars + ## && [==] @rows>>.chars, + && all(@rows) ~~ /^ <[01]> ** { @rows[0].chars } $/, + :v(:$verbose)); + +my @matrix = @rows>>.comb>>.Array; +my @scores = @matrix>>.sum; + +if $verbose +{ + for ^@matrix.elems -> $team + { + say ": Team $team has score @scores[$team] (values [ @matrix[$team].join(", ") ])"; + } +} + +my $max = @scores.max; +my $scores-b = @scores.Bag; + +if $scores-b{$max} == 1 +{ + my $winner = @scores.first($max, :k); + say ": One team ($winner) has the most wins ($max)" if $verbose; + say $winner; + exit; +} + +my @indices = (0 .. @scores.end).grep({ @scores[$_] == $max }); + +say ": Teams with the highest score ($max): { @indices.join(",") }" if $verbose; + +for 0 .. @scores.end -> $i +{ + for 0 .. @scores.end -> $j + { + next if $i == any(@indices) && $j == any(@indices); + @matrix[$i;$j] = 0; + say ": Clearing value for i:$i,j:$j" if $verbose; + } +} + +my @scores2 = @matrix>>.sum; + +if $verbose +{ + for ^@matrix.elems -> $team + { + say ": Team $team has score @scores2[$team] (values [ @matrix[$team].join(", ") ])"; + } +} + +my $max2 = @scores2.max; +my $scores2-b = @scores2.Bag; + +if $scores2-b{$max2} == 1 +{ + my $winner = @scores2.first($max2, :k); + say ": One team ($winner) has the most wins ($max2)" if $verbose; + say $winner; +} +else +{ + die "Not unique"; +} + + + diff --git a/challenge-343/arne-sommer/raku/champion-team-loop b/challenge-343/arne-sommer/raku/champion-team-loop new file mode 100755 index 0000000000..aff7cf8af6 --- /dev/null +++ b/challenge-343/arne-sommer/raku/champion-team-loop @@ -0,0 +1,59 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@rows where @rows.elems == @rows[0].chars + && all(@rows) ~~ /^ <[01]> ** { @rows[0].chars } $/, + :v(:$verbose)); + +my @matrix = @rows>>.comb>>.Array; +my @team-numbers = ^@matrix.elems; +my $size = @matrix.elems; +my $iteration = 1; + +loop +{ + my %res = winners(@matrix, @team-numbers); + + @matrix = @(%res<matrix>); + @team-numbers = @(%res<team-numbers>); + + last if @team-numbers.elems == $size || @team-numbers.elems == 1; + $size = @team-numbers.elems; +} + +say @team-numbers.join(", "); + +sub winners (@matrix, @team-numbers) +{ + my @scores = @matrix>>.sum; + my $max = @scores.max; + + if $verbose + { + say ": Iteration { $iteration++ } (with size { @matrix.elems })"; + my $i = 0; + for ^@matrix.elems -> $team + { + say ": Team {@team-numbers[$i++]} has score @scores[$team] (values [ @matrix[$team].join(", ") ]) { @scores[$team] == $max ?? "MAX" !! "" }"; + } + } + + my @maxes = (0 .. @scores.end).grep({ @scores[$_] == $max }); + my @new-matrix; + my @new-team-numbers; + + # return { matrix => $max, team-numbers => @team-numbers[@maxes[0]] } if @maxes.elems == 1; + + for ^@matrix.elems -> $i + { + next unless $i == any(@maxes); + @new-team-numbers.push: @team-numbers[$i]; + my @row; + for ^@matrix.elems -> $j + { + next unless $j == any(@maxes); + @row.push: @matrix[$i;$j]; + } + @new-matrix.push: @row; + } + return { matrix => @new-matrix, team-numbers => @new-team-numbers }; +} diff --git a/challenge-343/arne-sommer/raku/zero-friend b/challenge-343/arne-sommer/raku/zero-friend new file mode 100755 index 0000000000..420eb4bf87 --- /dev/null +++ b/challenge-343/arne-sommer/raku/zero-friend @@ -0,0 +1,6 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@nums where @nums.elems > 0 && all(@nums) ~~ Numeric); + +say @nums>>.abs.min; + diff --git a/challenge-343/arne-sommer/raku/zero-friend-fixed b/challenge-343/arne-sommer/raku/zero-friend-fixed new file mode 100755 index 0000000000..c45164d0b1 --- /dev/null +++ b/challenge-343/arne-sommer/raku/zero-friend-fixed @@ -0,0 +1,6 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@nums where @nums.elems > 0 && all(@nums) ~~ Numeric); + +say @nums>>.Numeric>>.abs.min; + diff --git a/challenge-343/arne-sommer/raku/zero-friend-int b/challenge-343/arne-sommer/raku/zero-friend-int new file mode 100755 index 0000000000..3d6b86233f --- /dev/null +++ b/challenge-343/arne-sommer/raku/zero-friend-int @@ -0,0 +1,5 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@nums where @nums.elems > 0 && all(@nums) ~~ Int) + +say @nums>>.abs.min; |
