aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2024-05-13 23:29:03 +0200
committerarnesom <arne@bbop.org>2024-05-13 23:29:03 +0200
commit41142acb132fa0fc3f0bcb62bca01666cdca754e (patch)
tree641ccd85b2a266553f1f139d397ac7c5de29f6df
parent02e309b3d451fff60404eb5ab3e539056f99ce0d (diff)
downloadperlweeklychallenge-club-41142acb132fa0fc3f0bcb62bca01666cdca754e.tar.gz
perlweeklychallenge-club-41142acb132fa0fc3f0bcb62bca01666cdca754e.tar.bz2
perlweeklychallenge-club-41142acb132fa0fc3f0bcb62bca01666cdca754e.zip
Arne Sommer
-rw-r--r--challenge-269/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-269/arne-sommer/raku/bitwise-or20
-rwxr-xr-xchallenge-269/arne-sommer/raku/bitwise-or-all22
-rwxr-xr-xchallenge-269/arne-sommer/raku/ch-1.raku20
-rwxr-xr-xchallenge-269/arne-sommer/raku/ch-2.raku42
-rwxr-xr-xchallenge-269/arne-sommer/raku/distribute-elements42
6 files changed, 147 insertions, 0 deletions
diff --git a/challenge-269/arne-sommer/blog.txt b/challenge-269/arne-sommer/blog.txt
new file mode 100644
index 0000000000..8359414368
--- /dev/null
+++ b/challenge-269/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/distribute-or.html
diff --git a/challenge-269/arne-sommer/raku/bitwise-or b/challenge-269/arne-sommer/raku/bitwise-or
new file mode 100755
index 0000000000..727da39fc6
--- /dev/null
+++ b/challenge-269/arne-sommer/raku/bitwise-or
@@ -0,0 +1,20 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where @ints.elems > 1 && all(@ints) ~~ UInt && all(@ints) > 0, :v(:$verbose));
+
+for @ints.combinations(2..*) -> @combination
+{
+ my $or = [+|] @combination;
+ my $binary = $or.fmt('%b');
+ my $trailing = so ($binary ~~ /.0$/);
+
+ say ": Combination: { @combination.join(",") } -> or: $or -> binary: $binary | trailing 0: $trailing" if $verbose;
+
+ if $trailing
+ {
+ say True;
+ exit;
+ }
+}
+
+say False;
diff --git a/challenge-269/arne-sommer/raku/bitwise-or-all b/challenge-269/arne-sommer/raku/bitwise-or-all
new file mode 100755
index 0000000000..e3513fdee0
--- /dev/null
+++ b/challenge-269/arne-sommer/raku/bitwise-or-all
@@ -0,0 +1,22 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where @ints.elems > 1 && all(@ints) ~~ UInt && all(@ints) > 0, :a(:$all) = False, :v(:$verbose) = $all);
+
+my $found = False;
+
+for @ints.combinations(2..*) -> @combination
+{
+ my $or = [+|] @combination;
+ my $binary = $or.fmt('%b');
+ my $trailing = so ($binary ~~ /.0$/);
+
+ say ": Combination: { @combination.join(",") } -> or: $or -> binary: $binary | trailing 0: $trailing" if $verbose;
+
+ if $trailing
+ {
+ $found = True;
+ last unless $all;
+ }
+}
+
+say $found; \ No newline at end of file
diff --git a/challenge-269/arne-sommer/raku/ch-1.raku b/challenge-269/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..727da39fc6
--- /dev/null
+++ b/challenge-269/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,20 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where @ints.elems > 1 && all(@ints) ~~ UInt && all(@ints) > 0, :v(:$verbose));
+
+for @ints.combinations(2..*) -> @combination
+{
+ my $or = [+|] @combination;
+ my $binary = $or.fmt('%b');
+ my $trailing = so ($binary ~~ /.0$/);
+
+ say ": Combination: { @combination.join(",") } -> or: $or -> binary: $binary | trailing 0: $trailing" if $verbose;
+
+ if $trailing
+ {
+ say True;
+ exit;
+ }
+}
+
+say False;
diff --git a/challenge-269/arne-sommer/raku/ch-2.raku b/challenge-269/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..7b20457bb4
--- /dev/null
+++ b/challenge-269/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,42 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where @ints.elems > 1 && @ints.unique.elems == @ints.elems && all(@ints) ~~ Int, :v(:$verbose));
+
+my @arr1 = @ints.shift.Int;
+my @arr2 = @ints.shift.Int;
+
+if $verbose
+{
+ say ": 1st operation. Add { @arr1[*-1] } to @arr1 = ({ @arr1.join(", ") })";
+ say ": 2nd operation. Add { @arr2[*-1] } to @arr2 = ({ @arr2.join(", ") })";
+}
+
+my $counter = 3;
+
+while @ints.elems
+{
+ my $int = @ints.shift.Int;
+ my $last1 = @arr1.tail;
+ my $last2 = @arr2[*-1];
+
+ if $last1 > $last2
+ {
+ @arr1.push: $int;
+ say ": {$counter++}rd operation. Last of @ints1 > last of @ints2: Add $int to @arr1 = ({ @arr1.join(", ") })" if $verbose;
+ }
+ else
+ {
+ @arr2.push: $int;
+ say ": {$counter++}rd operation. Last of @ints2 <= last of @ints2: Add $int to @arr2 = ({ @arr2.join(", ") })" if $verbose;
+ }
+}
+
+if $verbose
+{
+ say ": @arr1 = ({ @arr1.join(", ") })";
+ say ": @arr2 = ({ @arr2.join(", ") })";
+}
+
+my @result = (@arr1, @arr2).flat;
+
+say "({ @result.join(", ") })";
diff --git a/challenge-269/arne-sommer/raku/distribute-elements b/challenge-269/arne-sommer/raku/distribute-elements
new file mode 100755
index 0000000000..7b20457bb4
--- /dev/null
+++ b/challenge-269/arne-sommer/raku/distribute-elements
@@ -0,0 +1,42 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where @ints.elems > 1 && @ints.unique.elems == @ints.elems && all(@ints) ~~ Int, :v(:$verbose));
+
+my @arr1 = @ints.shift.Int;
+my @arr2 = @ints.shift.Int;
+
+if $verbose
+{
+ say ": 1st operation. Add { @arr1[*-1] } to @arr1 = ({ @arr1.join(", ") })";
+ say ": 2nd operation. Add { @arr2[*-1] } to @arr2 = ({ @arr2.join(", ") })";
+}
+
+my $counter = 3;
+
+while @ints.elems
+{
+ my $int = @ints.shift.Int;
+ my $last1 = @arr1.tail;
+ my $last2 = @arr2[*-1];
+
+ if $last1 > $last2
+ {
+ @arr1.push: $int;
+ say ": {$counter++}rd operation. Last of @ints1 > last of @ints2: Add $int to @arr1 = ({ @arr1.join(", ") })" if $verbose;
+ }
+ else
+ {
+ @arr2.push: $int;
+ say ": {$counter++}rd operation. Last of @ints2 <= last of @ints2: Add $int to @arr2 = ({ @arr2.join(", ") })" if $verbose;
+ }
+}
+
+if $verbose
+{
+ say ": @arr1 = ({ @arr1.join(", ") })";
+ say ": @arr2 = ({ @arr2.join(", ") })";
+}
+
+my @result = (@arr1, @arr2).flat;
+
+say "({ @result.join(", ") })";