diff options
| author | arnesom <arne@bbop.org> | 2023-10-12 16:44:38 +0200 |
|---|---|---|
| committer | arnesom <arne@bbop.org> | 2023-10-12 16:44:38 +0200 |
| commit | d7dc12414ef5e9ab8bb6d93e625e7d38d9a3344d (patch) | |
| tree | cd9ec00550f78ac5c49d077c7819c4e996ab9cd5 /challenge-238 | |
| parent | 3143f9657ea324e7588d575d67c35eb28bc276f3 (diff) | |
| download | perlweeklychallenge-club-d7dc12414ef5e9ab8bb6d93e625e7d38d9a3344d.tar.gz perlweeklychallenge-club-d7dc12414ef5e9ab8bb6d93e625e7d38d9a3344d.tar.bz2 perlweeklychallenge-club-d7dc12414ef5e9ab8bb6d93e625e7d38d9a3344d.zip | |
Arne Sommer
Diffstat (limited to 'challenge-238')
| -rw-r--r-- | challenge-238/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-238/arne-sommer/raku/ch-1.raku | 7 | ||||
| -rwxr-xr-x | challenge-238/arne-sommer/raku/ch-2.raku | 27 | ||||
| -rwxr-xr-x | challenge-238/arne-sommer/raku/persistent-sort | 27 | ||||
| -rwxr-xr-x | challenge-238/arne-sommer/raku/running-sum-gather | 15 | ||||
| -rwxr-xr-x | challenge-238/arne-sommer/raku/running-sum-map | 7 | ||||
| -rwxr-xr-x | challenge-238/arne-sommer/raku/running-sum-seq | 7 | ||||
| -rwxr-xr-x | challenge-238/arne-sommer/raku/running-sum-state | 7 |
8 files changed, 98 insertions, 0 deletions
diff --git a/challenge-238/arne-sommer/blog.txt b/challenge-238/arne-sommer/blog.txt new file mode 100644 index 0000000000..54e4a4fe0b --- /dev/null +++ b/challenge-238/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/persistently-running.html diff --git a/challenge-238/arne-sommer/raku/ch-1.raku b/challenge-238/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..9787e8015c --- /dev/null +++ b/challenge-238/arne-sommer/raku/ch-1.raku @@ -0,0 +1,7 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@int where all(@int) ~~ Int && @int.elems > 0); + +my $running-sum := (@int.first, * + @int[1 + state $index++] ... Inf); + +say '(' ~ $running-sum[0 .. @int.end].join(", ") ~ ')'; diff --git a/challenge-238/arne-sommer/raku/ch-2.raku b/challenge-238/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..88b9c523cd --- /dev/null +++ b/challenge-238/arne-sommer/raku/ch-2.raku @@ -0,0 +1,27 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@int where all(@int) ~~ UInt && all(@int) > 0 && @int.elems > 0, :v(:$verbose)); + +my %steps; + +for @int -> $int +{ + %steps{$int} = steps($int); +} + +say '(' ~ @int.sort({ %steps{$^a} <=> %steps{$^b} || $^a <=> $^b }).join(', ') ~ ')'; + +sub steps (Int $int is copy) +{ + print ": $int" if $verbose; + my $steps = 0; + while $int >= 10 + { + my @digits = $int.comb; + $int = [*] @digits; + print " => { @digits.join(' x ') } => $int" if $verbose; + $steps++; + } + say " ($steps step{ 's' if $steps != 1})" if $verbose; + return $steps; +} diff --git a/challenge-238/arne-sommer/raku/persistent-sort b/challenge-238/arne-sommer/raku/persistent-sort new file mode 100755 index 0000000000..88b9c523cd --- /dev/null +++ b/challenge-238/arne-sommer/raku/persistent-sort @@ -0,0 +1,27 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@int where all(@int) ~~ UInt && all(@int) > 0 && @int.elems > 0, :v(:$verbose)); + +my %steps; + +for @int -> $int +{ + %steps{$int} = steps($int); +} + +say '(' ~ @int.sort({ %steps{$^a} <=> %steps{$^b} || $^a <=> $^b }).join(', ') ~ ')'; + +sub steps (Int $int is copy) +{ + print ": $int" if $verbose; + my $steps = 0; + while $int >= 10 + { + my @digits = $int.comb; + $int = [*] @digits; + print " => { @digits.join(' x ') } => $int" if $verbose; + $steps++; + } + say " ($steps step{ 's' if $steps != 1})" if $verbose; + return $steps; +} diff --git a/challenge-238/arne-sommer/raku/running-sum-gather b/challenge-238/arne-sommer/raku/running-sum-gather new file mode 100755 index 0000000000..d71b09eb72 --- /dev/null +++ b/challenge-238/arne-sommer/raku/running-sum-gather @@ -0,0 +1,15 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@int where all(@int) ~~ Int && @int.elems > 0); + +my $running-sum := gather +{ + my $sum = 0; + for @int -> $current + { + $sum += $current; + take $sum; + } +} + +say '(' ~ $running-sum.join(", ") ~ ')'; diff --git a/challenge-238/arne-sommer/raku/running-sum-map b/challenge-238/arne-sommer/raku/running-sum-map new file mode 100755 index 0000000000..d4d8aaca70 --- /dev/null +++ b/challenge-238/arne-sommer/raku/running-sum-map @@ -0,0 +1,7 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@int where all(@int) ~~ Int && @int.elems > 0); + +my @running-sum = (^@int.elems).map({ [+] @int[0..$_] } ); + +say '(' ~ @running-sum.join(", ") ~ ')'; diff --git a/challenge-238/arne-sommer/raku/running-sum-seq b/challenge-238/arne-sommer/raku/running-sum-seq new file mode 100755 index 0000000000..b63729ab54 --- /dev/null +++ b/challenge-238/arne-sommer/raku/running-sum-seq @@ -0,0 +1,7 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@int where all(@int) ~~ Int && @int.elems > 0); + +my $running-sum := (@int.first, * + @int[1 + state $index++] ... @int.sum ); + +say '(' ~ $running-sum.join(", ") ~ ')'; diff --git a/challenge-238/arne-sommer/raku/running-sum-state b/challenge-238/arne-sommer/raku/running-sum-state new file mode 100755 index 0000000000..9787e8015c --- /dev/null +++ b/challenge-238/arne-sommer/raku/running-sum-state @@ -0,0 +1,7 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@int where all(@int) ~~ Int && @int.elems > 0); + +my $running-sum := (@int.first, * + @int[1 + state $index++] ... Inf); + +say '(' ~ $running-sum[0 .. @int.end].join(", ") ~ ')'; |
