aboutsummaryrefslogtreecommitdiff
path: root/challenge-007
diff options
context:
space:
mode:
authorchirvasitua <stuart-little@users.noreply.github.com>2020-11-26 09:30:17 -0500
committerchirvasitua <stuart-little@users.noreply.github.com>2020-11-26 09:30:17 -0500
commitd9ae8542049005ac7ff4bb40fa3e030bd0b27ae2 (patch)
treea0e2b2545457567161c988cc3ad5e7a29285787e /challenge-007
parent7e12ec84ba25873bf1f0bb594bf3c9148eed8acd (diff)
downloadperlweeklychallenge-club-d9ae8542049005ac7ff4bb40fa3e030bd0b27ae2.tar.gz
perlweeklychallenge-club-d9ae8542049005ac7ff4bb40fa3e030bd0b27ae2.tar.bz2
perlweeklychallenge-club-d9ae8542049005ac7ff4bb40fa3e030bd0b27ae2.zip
1st commit on 007-009,011
Diffstat (limited to 'challenge-007')
-rw-r--r--challenge-007/stuart-little/README1
-rwxr-xr-xchallenge-007/stuart-little/raku/ch-1.p67
-rwxr-xr-xchallenge-007/stuart-little/raku/ch-2.p643
3 files changed, 51 insertions, 0 deletions
diff --git a/challenge-007/stuart-little/README b/challenge-007/stuart-little/README
new file mode 100644
index 0000000000..78439907de
--- /dev/null
+++ b/challenge-007/stuart-little/README
@@ -0,0 +1 @@
+Solutions by Stuart Little
diff --git a/challenge-007/stuart-little/raku/ch-1.p6 b/challenge-007/stuart-little/raku/ch-1.p6
new file mode 100755
index 0000000000..5b6fd4b786
--- /dev/null
+++ b/challenge-007/stuart-little/raku/ch-1.p6
@@ -0,0 +1,7 @@
+#!/usr/bin/env perl6
+use v6;
+
+say 0;
+for (1..(@*ARGS[0] || 50).Int).grep({ $_ %% $_.comb.sum }) {.say}
+
+# run as <script> <upper bound> or just <script> to default to range <1..50>
diff --git a/challenge-007/stuart-little/raku/ch-2.p6 b/challenge-007/stuart-little/raku/ch-2.p6
new file mode 100755
index 0000000000..5d438ce3cf
--- /dev/null
+++ b/challenge-007/stuart-little/raku/ch-2.p6
@@ -0,0 +1,43 @@
+#!/usr/bin/env perl6
+use v6;
+
+my %*SUB-MAIN-OPTS=:named-anywhere,;
+sub MAIN(
+ $source-word,
+ $target-word,
+ Str :f(:$file),
+) {
+
+ my @words=($file) ?? ($file.IO.lines) !! ($=finish.lines);
+
+ my %conn=mkhash(@words); my %cur=($source-word=>True); my %vis=@words.map({ $_ => () }); %vis{$source-word}=($source-word,);
+
+ say fndpth($source-word,$target-word,%conn,%cur,%vis);
+
+}
+
+sub dist($w1,$w2) { ($w1.comb Zne $w2.comb).sum }; sub mkhash(@w) { @w.map({ $_ => @w.grep( -> $w {dist($_,$w)==1} ).Array }).Hash }
+
+sub fndpth($s,$t,%conn,%cur,%vis) {
+ while (
+ (%conn.{%cur.keys}.map(|*) (-) %vis.grep({ $_.value }).Hash.keys) && (! %vis{$t})
+ ) {
+ my %next=(%conn.{%cur.keys}.map(|*) (-) %vis.grep({ $_.value }).Hash.keys);
+ for %cur.keys {
+ %conn{$_}.map(-> $node {%vis{$node}||=(|%vis{$_},$node)})
+ }
+ %cur=%next;
+ }
+ (%vis{$t}) && %vis{$t} || ()
+}
+
+=finish
+cold
+cord
+core
+care
+card
+ward
+warm
+
+