diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2025-01-31 23:13:56 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-31 23:13:56 +0000 |
| commit | 9aa51e49fa1f5513fb72bf41813df4969383c2c7 (patch) | |
| tree | df9d7aa3b10286305f4db2c1e29749224e0be846 | |
| parent | b9a02c397c36e2f53a4bb4ec76325552a164f5eb (diff) | |
| parent | 5af61d45f5ddbcea01ee0250f411de8396ee09e3 (diff) | |
| download | perlweeklychallenge-club-9aa51e49fa1f5513fb72bf41813df4969383c2c7.tar.gz perlweeklychallenge-club-9aa51e49fa1f5513fb72bf41813df4969383c2c7.tar.bz2 perlweeklychallenge-club-9aa51e49fa1f5513fb72bf41813df4969383c2c7.zip | |
Merge pull request #11512 from arnesom/branch-for-challenge-306
Arne Sommer
| -rw-r--r-- | challenge-306/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-306/arne-sommer/raku/ch-1.raku | 22 | ||||
| -rwxr-xr-x | challenge-306/arne-sommer/raku/ch-2.raku | 31 | ||||
| -rwxr-xr-x | challenge-306/arne-sommer/raku/last-element | 31 | ||||
| -rwxr-xr-x | challenge-306/arne-sommer/raku/last-element-sort | 28 | ||||
| -rwxr-xr-x | challenge-306/arne-sommer/raku/odd-sum | 22 |
6 files changed, 135 insertions, 0 deletions
diff --git a/challenge-306/arne-sommer/blog.txt b/challenge-306/arne-sommer/blog.txt new file mode 100644 index 0000000000..571da8edc5 --- /dev/null +++ b/challenge-306/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/elementary-odd.html diff --git a/challenge-306/arne-sommer/raku/ch-1.raku b/challenge-306/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..8b6a3633a5 --- /dev/null +++ b/challenge-306/arne-sommer/raku/ch-1.raku @@ -0,0 +1,22 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where all(@ints) ~~ Int && all(@ints) > 0, + :v(:$verbose)); + +my $end = @ints.end; +my $sum = 0; + +for 0 .. $end -> $start +{ + for $start .. $end -> $stop + { + next unless ($stop - $start) %% 2; + my @slice = @ints[$start .. $stop]; + my $total = @slice.sum; + $sum += $total; + + say ": Slice Indices:$start:$stop Values:({ @slice.join(",") }) Sum:$total Total:$sum" if $verbose; + } +} + +say $sum; diff --git a/challenge-306/arne-sommer/raku/ch-2.raku b/challenge-306/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..8709e83d53 --- /dev/null +++ b/challenge-306/arne-sommer/raku/ch-2.raku @@ -0,0 +1,31 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where all(@ints) ~~ Int, + :v(:$verbose)); + +while @ints.elems >= 2 +{ + my @x-index = @ints.max(:k); + my $x = @ints[@x-index[0]]; + + sink @ints.splice(@x-index[0], 1); + + if @x-index.elems > 1 + { + my @y-index = @ints.max(:k); + sink @ints.splice(@y-index[0], 1); + say ": Removed x:$x and y:$x -> ({ @ints.join(",") })" if $verbose; + } + else + { + my @y-index = @ints.max(:k); + my $y = @ints[@y-index[0]]; + my $replace = $x - $y; + + sink @ints.splice(@y-index[0], 1, $replace); + + say ": Removed x:$x, replaced y:$y with $replace -> ({ @ints.join(",") })" if $verbose; + } +} + +say @ints.elems ?? @ints.head !! 0; diff --git a/challenge-306/arne-sommer/raku/last-element b/challenge-306/arne-sommer/raku/last-element new file mode 100755 index 0000000000..8709e83d53 --- /dev/null +++ b/challenge-306/arne-sommer/raku/last-element @@ -0,0 +1,31 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where all(@ints) ~~ Int, + :v(:$verbose)); + +while @ints.elems >= 2 +{ + my @x-index = @ints.max(:k); + my $x = @ints[@x-index[0]]; + + sink @ints.splice(@x-index[0], 1); + + if @x-index.elems > 1 + { + my @y-index = @ints.max(:k); + sink @ints.splice(@y-index[0], 1); + say ": Removed x:$x and y:$x -> ({ @ints.join(",") })" if $verbose; + } + else + { + my @y-index = @ints.max(:k); + my $y = @ints[@y-index[0]]; + my $replace = $x - $y; + + sink @ints.splice(@y-index[0], 1, $replace); + + say ": Removed x:$x, replaced y:$y with $replace -> ({ @ints.join(",") })" if $verbose; + } +} + +say @ints.elems ?? @ints.head !! 0; diff --git a/challenge-306/arne-sommer/raku/last-element-sort b/challenge-306/arne-sommer/raku/last-element-sort new file mode 100755 index 0000000000..91ba72492d --- /dev/null +++ b/challenge-306/arne-sommer/raku/last-element-sort @@ -0,0 +1,28 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where all(@ints) ~~ Int, + :v(:$verbose)); + +my @sorted = @ints.sort(-*); + +say ":Sorted: { @sorted.join(",") }" if $verbose; + +while @sorted.elems >= 2 +{ + my $y = @sorted.shift; + my $x = @sorted.shift; + + if $x == $y + { + say ":Removed x:$x and y:$y -> ({ @sorted.join(",") })" if $verbose; + } + else + { + my $replace = $y - $x; + @sorted.push: $replace; + @sorted .= sort(-*); + say ":Replaced x:$x and y:$y with $replace -> ({ @sorted.join(",") })" if $verbose; + } +} + +say @sorted.elems ?? @sorted.head !! 0; diff --git a/challenge-306/arne-sommer/raku/odd-sum b/challenge-306/arne-sommer/raku/odd-sum new file mode 100755 index 0000000000..8b6a3633a5 --- /dev/null +++ b/challenge-306/arne-sommer/raku/odd-sum @@ -0,0 +1,22 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where all(@ints) ~~ Int && all(@ints) > 0, + :v(:$verbose)); + +my $end = @ints.end; +my $sum = 0; + +for 0 .. $end -> $start +{ + for $start .. $end -> $stop + { + next unless ($stop - $start) %% 2; + my @slice = @ints[$start .. $stop]; + my $total = @slice.sum; + $sum += $total; + + say ": Slice Indices:$start:$stop Values:({ @slice.join(",") }) Sum:$total Total:$sum" if $verbose; + } +} + +say $sum; |
