diff options
| -rw-r--r-- | challenge-009/ruben-westerberg/README | 6 | ||||
| -rwxr-xr-x | challenge-009/ruben-westerberg/perl5/ch-1.pl | 12 | ||||
| -rwxr-xr-x | challenge-009/ruben-westerberg/perl5/ch-2.pl | 45 | ||||
| -rwxr-xr-x | challenge-009/ruben-westerberg/perl6/bug.p6 | 23 | ||||
| -rwxr-xr-x | challenge-009/ruben-westerberg/perl6/ch-1.p6 | 11 | ||||
| -rwxr-xr-x | challenge-009/ruben-westerberg/perl6/ch-2.p6 | 32 |
6 files changed, 126 insertions, 3 deletions
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-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/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 new file mode 100755 index 0000000000..0cf1dcd8fa --- /dev/null +++ b/challenge-009/ruben-westerberg/perl6/bug.p6 @@ -0,0 +1,23 @@ +#!/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+0; # THIS IS REQUIRED for some reason +}; + +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-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..e76f6a672a --- /dev/null +++ b/challenge-009/ruben-westerberg/perl6/ch-2.p6 @@ -0,0 +1,32 @@ +#!/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=$^v; + state $count=0; + NEXT {$prev=$v}; + $count= $prev !== $^v ?? 1!! $count+1; + $^k+2-$count; + }); +} +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 "Inputs: "~@inputs; +say "1224 Ranking: "~rank1224(@inputs); +say "1334 Ranking: "~rank1334(@inputs); +say "1223 Ranking: "~rank1223(@inputs); |
