aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2023-06-05 23:15:00 +0200
committerarnesom <arne@bbop.org>2023-06-05 23:15:00 +0200
commit44e32b041c03e02f4ec0a1e119dff7840bdb2111 (patch)
tree2bb59051ab8ca366530794ffeb93beb7d4033676
parent401be1861472af6d62bbdeb0fe65f6ced1ca8f31 (diff)
downloadperlweeklychallenge-club-44e32b041c03e02f4ec0a1e119dff7840bdb2111.tar.gz
perlweeklychallenge-club-44e32b041c03e02f4ec0a1e119dff7840bdb2111.tar.bz2
perlweeklychallenge-club-44e32b041c03e02f4ec0a1e119dff7840bdb2111.zip
Arne Sommer
-rw-r--r--challenge-220/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-220/arne-sommer/raku/ch-1.raku9
-rwxr-xr-xchallenge-220/arne-sommer/raku/ch-2.raku21
-rwxr-xr-xchallenge-220/arne-sommer/raku/common-characters9
-rwxr-xr-xchallenge-220/arne-sommer/raku/squareful21
5 files changed, 61 insertions, 0 deletions
diff --git a/challenge-220/arne-sommer/blog.txt b/challenge-220/arne-sommer/blog.txt
new file mode 100644
index 0000000000..b651a9bf4b
--- /dev/null
+++ b/challenge-220/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/squarefully-common.html
diff --git a/challenge-220/arne-sommer/raku/ch-1.raku b/challenge-220/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..cf1a0759e2
--- /dev/null
+++ b/challenge-220/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,9 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@words where @words.elems > 1 && all(@words) ~~ /^<[a..zA..Z]>+$/, :v(:$verbose));
+
+my $set = [(&)] @words>>.lc>>.comb;
+
+say ":Set: { $set.raku }" if $verbose;
+
+say '(' ~ $set.keys.sort.map({ '"' ~ $_ ~ '"' }).join(", ") ~ ')';
diff --git a/challenge-220/arne-sommer/raku/ch-2.raku b/challenge-220/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..fad02576a5
--- /dev/null
+++ b/challenge-220/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,21 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where @ints.elems > 1 && all(@ints) ~~ Int);
+
+my $length = @ints.elems;
+my @squareful;
+
+PERM-LOOP:
+for @ints.permutations.unique(:with(&[eqv])) -> @permutation
+{
+ for 0 .. $length -2 -> $index
+ {
+ my $sum = @permutation[$index] + @permutation[$index +1];
+ my $root = $sum.sqrt;
+ next PERM-LOOP unless $root.Int == $root;
+ }
+
+ push(@squareful, @permutation);
+}
+
+say @squareful;
diff --git a/challenge-220/arne-sommer/raku/common-characters b/challenge-220/arne-sommer/raku/common-characters
new file mode 100755
index 0000000000..cf1a0759e2
--- /dev/null
+++ b/challenge-220/arne-sommer/raku/common-characters
@@ -0,0 +1,9 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@words where @words.elems > 1 && all(@words) ~~ /^<[a..zA..Z]>+$/, :v(:$verbose));
+
+my $set = [(&)] @words>>.lc>>.comb;
+
+say ":Set: { $set.raku }" if $verbose;
+
+say '(' ~ $set.keys.sort.map({ '"' ~ $_ ~ '"' }).join(", ") ~ ')';
diff --git a/challenge-220/arne-sommer/raku/squareful b/challenge-220/arne-sommer/raku/squareful
new file mode 100755
index 0000000000..fad02576a5
--- /dev/null
+++ b/challenge-220/arne-sommer/raku/squareful
@@ -0,0 +1,21 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where @ints.elems > 1 && all(@ints) ~~ Int);
+
+my $length = @ints.elems;
+my @squareful;
+
+PERM-LOOP:
+for @ints.permutations.unique(:with(&[eqv])) -> @permutation
+{
+ for 0 .. $length -2 -> $index
+ {
+ my $sum = @permutation[$index] + @permutation[$index +1];
+ my $root = $sum.sqrt;
+ next PERM-LOOP unless $root.Int == $root;
+ }
+
+ push(@squareful, @permutation);
+}
+
+say @squareful;