From 03ba649798e788e41d1c190434c5917848764966 Mon Sep 17 00:00:00 2001 From: Ruben Westerberg Date: Fri, 10 May 2019 11:30:06 +1000 Subject: Working version of ch-2.p6 --- challenge-007/ruben-westerberg/perl5/ch-1.pl | 3 ++ challenge-007/ruben-westerberg/perl6/ch-1.p6 | 6 +++ challenge-007/ruben-westerberg/perl6/ch-2.p6 | 79 ++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100755 challenge-007/ruben-westerberg/perl5/ch-1.pl create mode 100755 challenge-007/ruben-westerberg/perl6/ch-1.p6 create mode 100755 challenge-007/ruben-westerberg/perl6/ch-2.p6 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); + 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; + #@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; + last if $parent eq $word; + $parent=$parent; + } + @path.reverse; +} + + -- cgit