diff options
| author | Arne Sommer <arne@bbop.org> | 2025-01-26 17:14:41 +0100 |
|---|---|---|
| committer | Arne Sommer <arne@bbop.org> | 2025-01-26 17:14:41 +0100 |
| commit | 5e5b5b100586fe780993c93a68fd4af995489709 (patch) | |
| tree | 5e98f5b2ace4fdd18cdec87850f251bca67239d3 | |
| parent | c1693f44771d7a0b9aad77ebca07be3a6d01242f (diff) | |
| download | perlweeklychallenge-club-5e5b5b100586fe780993c93a68fd4af995489709.tar.gz perlweeklychallenge-club-5e5b5b100586fe780993c93a68fd4af995489709.tar.bz2 perlweeklychallenge-club-5e5b5b100586fe780993c93a68fd4af995489709.zip | |
Arne Sommer
| -rw-r--r-- | challenge-305/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-305/arne-sommer/raku/alien-dictionary | 36 | ||||
| -rwxr-xr-x | challenge-305/arne-sommer/raku/binary-prefix | 20 | ||||
| -rwxr-xr-x | challenge-305/arne-sommer/raku/ch-1.raku | 20 | ||||
| -rwxr-xr-x | challenge-305/arne-sommer/raku/ch-2.raku | 36 |
5 files changed, 113 insertions, 0 deletions
diff --git a/challenge-305/arne-sommer/blog.txt b/challenge-305/arne-sommer/blog.txt new file mode 100644 index 0000000000..9c8cbf17a9 --- /dev/null +++ b/challenge-305/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/prefixed-alien.html diff --git a/challenge-305/arne-sommer/raku/alien-dictionary b/challenge-305/arne-sommer/raku/alien-dictionary new file mode 100755 index 0000000000..6893591bb8 --- /dev/null +++ b/challenge-305/arne-sommer/raku/alien-dictionary @@ -0,0 +1,36 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@words where @words.elems > 1 && all(@words) ~~ /^<[a..z]>+$/, + :a(:$alien) where $alien.comb.sort.join eq "abcdefghijklmnopqrstuvwxyz", + :v(:$verbose)); + +my @alien = $alien.comb; +my @alpha = 'a' .. 'z'; +my %alien; +my %words; + +for @alpha -> $char +{ + %alien{$char} = @alien.shift; + say ": char $char -> %alien{$char}" if $verbose; +} + +for @words -> $word +{ + %words{$word} = alienate($word); + say ": word $word -> %words{$word}" if $verbose; +} + +sub alien ($char) +{ + return %alien{$char}; +} + +sub alienate ($string) +{ + return $string.comb>>.&alien.join; +} + +my @sorted = @words.sort({ %words{$^a} cmp %words{$^b} }); + +say "({ @sorted.map('"' ~ * ~ '"').join(", ") })"; diff --git a/challenge-305/arne-sommer/raku/binary-prefix b/challenge-305/arne-sommer/raku/binary-prefix new file mode 100755 index 0000000000..f6c8558c50 --- /dev/null +++ b/challenge-305/arne-sommer/raku/binary-prefix @@ -0,0 +1,20 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@binary where @binary.elems > 0 && all(@binary) eq any(0,1), + :v(:$verbose)); + +my $current = ""; +my @result; + +for @binary -> $digit +{ + $current ~= $digit; + + my $int = $current.parse-base(2); + my $prime = $int.is-prime; + + say ": Binary:$current Int:$int { $prime ?? "prime" !! "not prime" }" if $verbose; + @result.push: $prime; +} + +say "({ @result.join(", ") })"; diff --git a/challenge-305/arne-sommer/raku/ch-1.raku b/challenge-305/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..f6c8558c50 --- /dev/null +++ b/challenge-305/arne-sommer/raku/ch-1.raku @@ -0,0 +1,20 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@binary where @binary.elems > 0 && all(@binary) eq any(0,1), + :v(:$verbose)); + +my $current = ""; +my @result; + +for @binary -> $digit +{ + $current ~= $digit; + + my $int = $current.parse-base(2); + my $prime = $int.is-prime; + + say ": Binary:$current Int:$int { $prime ?? "prime" !! "not prime" }" if $verbose; + @result.push: $prime; +} + +say "({ @result.join(", ") })"; diff --git a/challenge-305/arne-sommer/raku/ch-2.raku b/challenge-305/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..6893591bb8 --- /dev/null +++ b/challenge-305/arne-sommer/raku/ch-2.raku @@ -0,0 +1,36 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@words where @words.elems > 1 && all(@words) ~~ /^<[a..z]>+$/, + :a(:$alien) where $alien.comb.sort.join eq "abcdefghijklmnopqrstuvwxyz", + :v(:$verbose)); + +my @alien = $alien.comb; +my @alpha = 'a' .. 'z'; +my %alien; +my %words; + +for @alpha -> $char +{ + %alien{$char} = @alien.shift; + say ": char $char -> %alien{$char}" if $verbose; +} + +for @words -> $word +{ + %words{$word} = alienate($word); + say ": word $word -> %words{$word}" if $verbose; +} + +sub alien ($char) +{ + return %alien{$char}; +} + +sub alienate ($string) +{ + return $string.comb>>.&alien.join; +} + +my @sorted = @words.sort({ %words{$^a} cmp %words{$^b} }); + +say "({ @sorted.map('"' ~ * ~ '"').join(", ") })"; |
