aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Sommer <arne@bbop.org>2025-01-26 17:14:41 +0100
committerArne Sommer <arne@bbop.org>2025-01-26 17:14:41 +0100
commit5e5b5b100586fe780993c93a68fd4af995489709 (patch)
tree5e98f5b2ace4fdd18cdec87850f251bca67239d3
parentc1693f44771d7a0b9aad77ebca07be3a6d01242f (diff)
downloadperlweeklychallenge-club-5e5b5b100586fe780993c93a68fd4af995489709.tar.gz
perlweeklychallenge-club-5e5b5b100586fe780993c93a68fd4af995489709.tar.bz2
perlweeklychallenge-club-5e5b5b100586fe780993c93a68fd4af995489709.zip
Arne Sommer
-rw-r--r--challenge-305/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-305/arne-sommer/raku/alien-dictionary36
-rwxr-xr-xchallenge-305/arne-sommer/raku/binary-prefix20
-rwxr-xr-xchallenge-305/arne-sommer/raku/ch-1.raku20
-rwxr-xr-xchallenge-305/arne-sommer/raku/ch-2.raku36
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(", ") })";