aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-343/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-343/arne-sommer/raku/ch-1.raku6
-rwxr-xr-xchallenge-343/arne-sommer/raku/ch-2.raku59
-rwxr-xr-xchallenge-343/arne-sommer/raku/champion-team69
-rwxr-xr-xchallenge-343/arne-sommer/raku/champion-team-loop59
-rwxr-xr-xchallenge-343/arne-sommer/raku/zero-friend6
-rwxr-xr-xchallenge-343/arne-sommer/raku/zero-friend-fixed6
-rwxr-xr-xchallenge-343/arne-sommer/raku/zero-friend-int5
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;