From f99e141b646c9a9d3ff7b03685f38fa19de44d2a Mon Sep 17 00:00:00 2001 From: Ruben Westerberg Date: Sun, 26 May 2019 07:03:02 +1000 Subject: 3 of 4 solutions, also a bug --- challenge-009/ruben-westerberg/perl5/ch-1.pl | 12 +++++++++ challenge-009/ruben-westerberg/perl6/bug.p6 | 13 ++++++++++ challenge-009/ruben-westerberg/perl6/ch-1.p6 | 11 +++++++++ challenge-009/ruben-westerberg/perl6/ch-2.p6 | 37 ++++++++++++++++++++++++++++ 4 files changed, 73 insertions(+) create mode 100755 challenge-009/ruben-westerberg/perl5/ch-1.pl create mode 100755 challenge-009/ruben-westerberg/perl6/bug.p6 create mode 100755 challenge-009/ruben-westerberg/perl6/ch-1.p6 create mode 100755 challenge-009/ruben-westerberg/perl6/ch-2.p6 diff --git a/challenge-009/ruben-westerberg/perl5/ch-1.pl b/challenge-009/ruben-westerberg/perl5/ch-1.pl new file mode 100755 index 0000000000..5bd1b73815 --- /dev/null +++ b/challenge-009/ruben-westerberg/perl5/ch-1.pl @@ -0,0 +1,12 @@ +#!/usr/bin/env perl +# +my $result; +for(my $i=0; 1; $i++){ + my %bag; + my $sq= $i**2; + $bag{$_}++ foreach (split "", $sq); + $result=$sq; + last if keys %bag >= 5; +} +print $result ."\n"; + diff --git a/challenge-009/ruben-westerberg/perl6/bug.p6 b/challenge-009/ruben-westerberg/perl6/bug.p6 new file mode 100755 index 0000000000..85b4f6ff94 --- /dev/null +++ b/challenge-009/ruben-westerberg/perl6/bug.p6 @@ -0,0 +1,13 @@ +#!/usr/bin/env perl6 +my @inputs= [1,2,2,6]; +say do for @inputs { + state $prev=$_; + state $r=1; + NEXT { $prev=$_}; + $r= ($prev !== $_) ?? $r+1 !! $r; + say $r; + $r; +}; +say (for @inputs { + $_*2; +}); diff --git a/challenge-009/ruben-westerberg/perl6/ch-1.p6 b/challenge-009/ruben-westerberg/perl6/ch-1.p6 new file mode 100755 index 0000000000..a8aff4d55f --- /dev/null +++ b/challenge-009/ruben-westerberg/perl6/ch-1.p6 @@ -0,0 +1,11 @@ +#!/usr/bin/env perl6 +# +#Find the first square number that has at least 5 distinct digits +my $result; +(0..*).map({ + my $sq= $_**2; + $result=$sq; + last if ($sq.comb.Bag.keys)>=5; + +}); +say $result; diff --git a/challenge-009/ruben-westerberg/perl6/ch-2.p6 b/challenge-009/ruben-westerberg/perl6/ch-2.p6 new file mode 100755 index 0000000000..3c82c0ad59 --- /dev/null +++ b/challenge-009/ruben-westerberg/perl6/ch-2.p6 @@ -0,0 +1,37 @@ +#!/usr/bin/env perl6 + +my @inputs=@*ARGS>0??@*ARGS!![10,20,20,51]; + +sub rank1224 (@inputs) { + #my @d=reverse sort input; + my @r=(for @inputs.kv { + state $prev=-1; + state $count=1; + $count= $prev !== $^v ?? 1!! $count+1; + $prev=$v; + $^k; + $k+2-$count; + }); + #@r.elems +1 <<-<< @r.reverse + +} +sub rank1334 (@inputs) { + my @d=reverse @inputs; + my @r=rank1224(@d); + @r.elems +1 <<-<< @r.reverse +} + +sub rank1223 (@input) { + @input.map({ + state $prev=$_; + state $r=1; + NEXT { $prev=$_}; + $r= ($prev !== $_) ?? $r+1 !! $r; + #say $r; + $r; + }); +} + +say rank1224(@inputs); +say rank1334(@inputs); +say rank1223(@inputs); -- cgit From ac8aafccc1ec148e0673e58b05d0e67a9b4ef9db Mon Sep 17 00:00:00 2001 From: Ruben Westerberg Date: Sun, 26 May 2019 17:01:18 +1000 Subject: Complete solutions and prettier output for ch-2 --- challenge-009/ruben-westerberg/README | 6 ++-- challenge-009/ruben-westerberg/perl5/ch-2.pl | 45 ++++++++++++++++++++++++++++ challenge-009/ruben-westerberg/perl6/bug.p6 | 18 ++++++++--- challenge-009/ruben-westerberg/perl6/ch-2.p6 | 27 +++++++---------- 4 files changed, 73 insertions(+), 23 deletions(-) create mode 100755 challenge-009/ruben-westerberg/perl5/ch-2.pl diff --git a/challenge-009/ruben-westerberg/README b/challenge-009/ruben-westerberg/README index cdf9befd14..8ac9e1ff34 100644 --- a/challenge-009/ruben-westerberg/README +++ b/challenge-009/ruben-westerberg/README @@ -1,8 +1,8 @@ Solution by Ruben Westerberg ch-1.pl and ch-1.p6 -Simply run the program to generate perfect numbers +Simply run the programs ch-2.pl and ch-2.p6 -Run the program and type in lines. When finished press CTRL-D to finish input. -Centered lines will we output +When running the programs provide a space separeated list of numbers to rank. Input is sorted in assending order before ranking +If no command line arguments are specifed then a default list is used diff --git a/challenge-009/ruben-westerberg/perl5/ch-2.pl b/challenge-009/ruben-westerberg/perl5/ch-2.pl new file mode 100755 index 0000000000..4cbd06e2a2 --- /dev/null +++ b/challenge-009/ruben-westerberg/perl5/ch-2.pl @@ -0,0 +1,45 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use v5.26; + + +my @inputs=@ARGV > 0 ? @ARGV : (10,20,20,51); +@inputs =sort @inputs; + +sub rank1224 { + my $ref=sub {map { + state $prev=$_; + state $count=0; + $count= ($prev != $$_[1])? 1: $count +1; + $prev=$$_[1]; + $$_[0]+2-$count; + } + + (map {state $i;[$i++,$_]} @_); + }; + &$ref(@_); +} + +sub rank1334 { + my @r=rank1224(reverse @_); + map {@r+1 - $_} reverse @r; +} + +sub rank1223 { + map { + state $prev=$_; + state $r=1; + $r= ($prev != $_) ? $r+1: $r; + $prev=$_; + $r; + + } @_; +} +print "Inputs: ",join " ",@inputs; +print "\n"; +print "1224 Ranking: ",join ' ', rank1224(@inputs); +print "\n"; +print "1334 Ranking: ",join ' ', rank1334(@inputs); +print "\n"; +print "1223 Ranking: ", join ' ', rank1223(@inputs); diff --git a/challenge-009/ruben-westerberg/perl6/bug.p6 b/challenge-009/ruben-westerberg/perl6/bug.p6 index 85b4f6ff94..0cf1dcd8fa 100755 --- a/challenge-009/ruben-westerberg/perl6/bug.p6 +++ b/challenge-009/ruben-westerberg/perl6/bug.p6 @@ -6,8 +6,18 @@ say do for @inputs { NEXT { $prev=$_}; $r= ($prev !== $_) ?? $r+1 !! $r; say $r; - $r; + $r+0; # THIS IS REQUIRED for some reason }; -say (for @inputs { - $_*2; -}); + +sub bug (@vals) { + @vals.map: { + state $prev=$_; + state $r=1; + NEXT { $prev=$_}; + $r= ($prev !== $_) ?? $r+1 !! $r; + say $r; + $r; + }; +} + +say bug(@inputs); diff --git a/challenge-009/ruben-westerberg/perl6/ch-2.p6 b/challenge-009/ruben-westerberg/perl6/ch-2.p6 index 3c82c0ad59..e76f6a672a 100755 --- a/challenge-009/ruben-westerberg/perl6/ch-2.p6 +++ b/challenge-009/ruben-westerberg/perl6/ch-2.p6 @@ -1,19 +1,16 @@ #!/usr/bin/env perl6 my @inputs=@*ARGS>0??@*ARGS!![10,20,20,51]; - +@inputs.=sort; sub rank1224 (@inputs) { #my @d=reverse sort input; my @r=(for @inputs.kv { - state $prev=-1; - state $count=1; + state $prev=$^v; + state $count=0; + NEXT {$prev=$v}; $count= $prev !== $^v ?? 1!! $count+1; - $prev=$v; - $^k; - $k+2-$count; + $^k+2-$count; }); - #@r.elems +1 <<-<< @r.reverse - } sub rank1334 (@inputs) { my @d=reverse @inputs; @@ -22,16 +19,14 @@ sub rank1334 (@inputs) { } sub rank1223 (@input) { - @input.map({ + @input.map: { state $prev=$_; state $r=1; NEXT { $prev=$_}; $r= ($prev !== $_) ?? $r+1 !! $r; - #say $r; - $r; - }); + }; } - -say rank1224(@inputs); -say rank1334(@inputs); -say rank1223(@inputs); +say "Inputs: "~@inputs; +say "1224 Ranking: "~rank1224(@inputs); +say "1334 Ranking: "~rank1334(@inputs); +say "1223 Ranking: "~rank1223(@inputs); -- cgit