aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Westerberg <drclaw@mac.com>2019-05-10 11:30:06 +1000
committerRuben Westerberg <drclaw@mac.com>2019-05-10 11:30:06 +1000
commit03ba649798e788e41d1c190434c5917848764966 (patch)
treed22a7a232c7961fc47f907b691b983d1b4509eff
parent351d32b9d89a68ae127143fad5a7b0bad4cefcdb (diff)
downloadperlweeklychallenge-club-03ba649798e788e41d1c190434c5917848764966.tar.gz
perlweeklychallenge-club-03ba649798e788e41d1c190434c5917848764966.tar.bz2
perlweeklychallenge-club-03ba649798e788e41d1c190434c5917848764966.zip
Working version of ch-2.p6
-rwxr-xr-xchallenge-007/ruben-westerberg/perl5/ch-1.pl3
-rwxr-xr-xchallenge-007/ruben-westerberg/perl6/ch-1.p66
-rwxr-xr-xchallenge-007/ruben-westerberg/perl6/ch-2.p679
3 files changed, 88 insertions, 0 deletions
diff --git a/challenge-007/ruben-westerberg/perl5/ch-1.pl b/challenge-007/ruben-westerberg/perl5/ch-1.pl
new file mode 100755
index 0000000000..60facccdd1
--- /dev/null
+++ b/challenge-007/ruben-westerberg/perl5/ch-1.pl
@@ -0,0 +1,3 @@
+#!/usr/bin/env perl
+#niven numbers
+print join "\n" ,grep { my $sum=0; $sum += $_ for (split "", $_); ($_> 0)&&(($_ % $sum) == 0)} (0..50);
diff --git a/challenge-007/ruben-westerberg/perl6/ch-1.p6 b/challenge-007/ruben-westerberg/perl6/ch-1.p6
new file mode 100755
index 0000000000..9dd2f11cc7
--- /dev/null
+++ b/challenge-007/ruben-westerberg/perl6/ch-1.p6
@@ -0,0 +1,6 @@
+#!/usr/bin/env perl6
+#
+#niven numbers
+
+say join "\n", (0..50) .grep({($_ > 0) && $_ %% (.Str.comb>>.Int .sum)});
+
diff --git a/challenge-007/ruben-westerberg/perl6/ch-2.p6 b/challenge-007/ruben-westerberg/perl6/ch-2.p6
new file mode 100755
index 0000000000..531b73e0f7
--- /dev/null
+++ b/challenge-007/ruben-westerberg/perl6/ch-2.p6
@@ -0,0 +1,79 @@
+#!/usr/bin/env perl6
+#
+#word ladder
+#read arguments, first is start word second is end word
+die "Need three arguments, start and end words" if @*ARGS.elems != 3;
+my ($start,$end, $wordFileName)=@*ARGS[0..2];
+
+my @words=$wordFileName.IO.lines.grep({.chars == $start.chars});
+unless $start.chars == $end.chars && @words.grep( { $_ eq all ($start, $end)} ) {
+ say ((););
+}
+
+say "Testing against @words.elems()";
+my @seen;
+my $s={word=>$start,parent=>Any};
+#my $node=transforms($start,$s);
+my @transforms;
+my $found=False;
+my $result;
+@transforms.push: $s;
+while @transforms > 0 && !$found {
+ my $current= @transforms.shift;
+ #make new transforms
+
+ @seen.push($current<word>);
+ my @toAdd=transforms($current);
+ #say @toAdd;
+ @transforms.append: @toAdd;
+ #say @transforms.elems;
+
+}
+#say $result;
+say pathFromParent($result, $start);
+
+
+#read word list from file and filter by word length
+sub transforms($parent is rw) {
+ my $word=$parent<word>;
+ #@seen.push($word) ;
+ #my $node={:$word, parent=>$parent};
+ #say $word;
+ $found = $word eq $end;
+ $result=$parent if ($word eq $end) && (! so $result);
+
+ return if $found;
+
+ my @c=$word.comb;
+ constant @letters="a".."z";
+
+ #say $word;
+ my @transforms=gather {
+ for ^@c -> $c {
+ for @letters -> $l {
+ my @tmp=@c;
+ @tmp[$c]=$l;
+ my $w=@tmp.join;
+ if ( @seen.grep($w) == 0) {
+# say $w;
+
+ take {word=>$w, parent=>$parent};
+ }
+ }
+ }
+ }
+ @transforms;
+}
+
+sub pathFromParent($node, $word) {
+ my @path;
+ my $parent=$node;
+ while ($parent) {
+ @path.push: $parent<word>;
+ last if $parent<word> eq $word;
+ $parent=$parent<parent>;
+ }
+ @path.reverse;
+}
+
+