diff options
| -rw-r--r-- | challenge-269/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-269/arne-sommer/raku/bitwise-or | 20 | ||||
| -rwxr-xr-x | challenge-269/arne-sommer/raku/bitwise-or-all | 22 | ||||
| -rwxr-xr-x | challenge-269/arne-sommer/raku/ch-1.raku | 20 | ||||
| -rwxr-xr-x | challenge-269/arne-sommer/raku/ch-2.raku | 42 | ||||
| -rwxr-xr-x | challenge-269/arne-sommer/raku/distribute-elements | 42 |
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(", ") })"; |
