From 65711d11f0b9f9a44fadf576655066add0926406 Mon Sep 17 00:00:00 2001 From: Arne Sommer Date: Fri, 27 Jun 2025 17:57:29 +0200 Subject: Arne Sommer --- challenge-327/arne-sommer/blog.txt | 1 + challenge-327/arne-sommer/raku/ch-1.raku | 17 +++++++++++++++ challenge-327/arne-sommer/raku/ch-2.raku | 28 +++++++++++++++++++++++++ challenge-327/arne-sommer/raku/mad | 28 +++++++++++++++++++++++++ challenge-327/arne-sommer/raku/missing-integers | 17 +++++++++++++++ 5 files changed, 91 insertions(+) create mode 100644 challenge-327/arne-sommer/blog.txt create mode 100755 challenge-327/arne-sommer/raku/ch-1.raku create mode 100755 challenge-327/arne-sommer/raku/ch-2.raku create mode 100755 challenge-327/arne-sommer/raku/mad create mode 100755 challenge-327/arne-sommer/raku/missing-integers diff --git a/challenge-327/arne-sommer/blog.txt b/challenge-327/arne-sommer/blog.txt new file mode 100644 index 0000000000..63680a2da1 --- /dev/null +++ b/challenge-327/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/missing-mad.html diff --git a/challenge-327/arne-sommer/raku/ch-1.raku b/challenge-327/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..52a084114f --- /dev/null +++ b/challenge-327/arne-sommer/raku/ch-1.raku @@ -0,0 +1,17 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems > 0 && all(@ints) ~~ Int, + :v(:$verbose)); + +my $max = @ints.elems; +my $set = @ints>>.Int.grep( 0 < * <= $max).Set; + +if $verbose +{ + say ": Range: 1 .. $max"; + say ": Matches: { $set.keys.sort.join(", ") }"; +} + +my @missing = (1..$max).grep({ ! so $set{$_} }); + +say "({ @missing.join(", ") })"; diff --git a/challenge-327/arne-sommer/raku/ch-2.raku b/challenge-327/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..dd15888081 --- /dev/null +++ b/challenge-327/arne-sommer/raku/ch-2.raku @@ -0,0 +1,28 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems > 0 && all(@ints) ~~ Int + && @ints.elems == @ints.unique.elems, + :v(:$verbose)); + +my @sort = @ints.sort; +my @diff = (1 .. @sort.end).map({ @sort[$_] - @sort[$_ -1] }); +my $mad = @diff.min; +my $set = @ints>>.Int.Set; +my @result; + +if $verbose +{ + say ": Sorted: @sort[]"; + say ": Diff: @diff[]"; +} + +for sort $set.keys -> $k +{ + my $is-mad = so $set{$k + $mad}; + + @result.push: ($k, $k + $mad) if $is-mad; + + say ": $k, { $k + $mad } { $is-mad ?? "is MAD" !! "does not exist" }" if $verbose; +} + +say @result.raku; \ No newline at end of file diff --git a/challenge-327/arne-sommer/raku/mad b/challenge-327/arne-sommer/raku/mad new file mode 100755 index 0000000000..dd15888081 --- /dev/null +++ b/challenge-327/arne-sommer/raku/mad @@ -0,0 +1,28 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems > 0 && all(@ints) ~~ Int + && @ints.elems == @ints.unique.elems, + :v(:$verbose)); + +my @sort = @ints.sort; +my @diff = (1 .. @sort.end).map({ @sort[$_] - @sort[$_ -1] }); +my $mad = @diff.min; +my $set = @ints>>.Int.Set; +my @result; + +if $verbose +{ + say ": Sorted: @sort[]"; + say ": Diff: @diff[]"; +} + +for sort $set.keys -> $k +{ + my $is-mad = so $set{$k + $mad}; + + @result.push: ($k, $k + $mad) if $is-mad; + + say ": $k, { $k + $mad } { $is-mad ?? "is MAD" !! "does not exist" }" if $verbose; +} + +say @result.raku; \ No newline at end of file diff --git a/challenge-327/arne-sommer/raku/missing-integers b/challenge-327/arne-sommer/raku/missing-integers new file mode 100755 index 0000000000..52a084114f --- /dev/null +++ b/challenge-327/arne-sommer/raku/missing-integers @@ -0,0 +1,17 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems > 0 && all(@ints) ~~ Int, + :v(:$verbose)); + +my $max = @ints.elems; +my $set = @ints>>.Int.grep( 0 < * <= $max).Set; + +if $verbose +{ + say ": Range: 1 .. $max"; + say ": Matches: { $set.keys.sort.join(", ") }"; +} + +my @missing = (1..$max).grep({ ! so $set{$_} }); + +say "({ @missing.join(", ") })"; -- cgit