diff options
| -rw-r--r-- | challenge-003/ruben-westerberg/README | 6 | ||||
| -rwxr-xr-x | challenge-003/ruben-westerberg/perl5/ch-1.pl | 35 | ||||
| -rwxr-xr-x | challenge-003/ruben-westerberg/perl5/ch-2.pl | 30 | ||||
| -rwxr-xr-x | challenge-003/ruben-westerberg/perl6/ch-1.p6 | 22 | ||||
| -rwxr-xr-x | challenge-003/ruben-westerberg/perl6/ch-2.p6 | 23 |
5 files changed, 115 insertions, 1 deletions
diff --git a/challenge-003/ruben-westerberg/README b/challenge-003/ruben-westerberg/README index 58eaaedd18..c2873957a1 100644 --- a/challenge-003/ruben-westerberg/README +++ b/challenge-003/ruben-westerberg/README @@ -1,3 +1,7 @@ Solution by Ruben Westerberg -inputs via command line arguments + +Challange 1 (5-Smooth p5 and p6) does not require command input and runs indefinately + +Challenge 2 (pascal triangle p5 and p6) dies if user supplies less then 3 as input on the command line + diff --git a/challenge-003/ruben-westerberg/perl5/ch-1.pl b/challenge-003/ruben-westerberg/perl5/ch-1.pl new file mode 100755 index 0000000000..9b7c193e2c --- /dev/null +++ b/challenge-003/ruben-westerberg/perl5/ch-1.pl @@ -0,0 +1,35 @@ +#!/usr/bin/env perl +# +#Smooth numbersI +my @primes=(2,3,5); +my $power=0; +while (1) { + $power++; + my @smooth=(); + my $t=60**$power; + foreach my $s (1 .. ($t/2)-1) { + foreach my $p (@primes) { + #printf "Prime $p, $s\n"; + my $smooth1=$s*$p; + my $val=$t/$smooth1; + my $test=($t%$smooth1); + if (($test == 0) && ($val >= 2)) { + #printf "smooth: $smooth1, val: $val test: $test\n"; + unless (grep $smooth1 == $_, @smooth) { + push @smooth, $smooth1; + } + unless ( grep $val == $_, @smooth) { + push @smooth, $val; + } + + } + } + } + + printf "5-Smooth numbers for 60^$power\n"; + @smooth=sort { $a <=> $b} @smooth; + foreach (@smooth) { + printf "$_ "; + } + print"\n\n"; +} diff --git a/challenge-003/ruben-westerberg/perl5/ch-2.pl b/challenge-003/ruben-westerberg/perl5/ch-2.pl new file mode 100755 index 0000000000..8ba5a76e5a --- /dev/null +++ b/challenge-003/ruben-westerberg/perl5/ch-2.pl @@ -0,0 +1,30 @@ +#!/usr/bin/env perl +use warnings; + +my $lines=$ARGV[0]; +die "Rows must be 3 or greater." unless ($lines >= 3); +my $current=[1]; +foreach (1 .. $lines) { + printRow($current); #print the current row + $current= makeRow($current) #make the next row; +} + +sub printRow { + $in=shift; + foreach (@$in) { + #TODO: Add centralised format + printf "%d ", $_;; + } + print "\n"; +} +sub makeRow { + my $in=shift; + my @row=(@$in,0); + my @outRow; + my $previous=0; + foreach (@row) { + push @outRow, $_+ $previous; + $previous=$_; + } + return \@outRow; +} diff --git a/challenge-003/ruben-westerberg/perl6/ch-1.p6 b/challenge-003/ruben-westerberg/perl6/ch-1.p6 new file mode 100755 index 0000000000..d13a499237 --- /dev/null +++ b/challenge-003/ruben-westerberg/perl6/ch-1.p6 @@ -0,0 +1,22 @@ +#!/usr/bin/env perl6 +# +my $powers=(1 ... *) ; +my $primes=(2,3,5); +for $powers<> { + my $smooth=[]; + my $t=60**$_; + for 1..($t/2) -> $s { + append $smooth, + ((do for $primes<> -> $p { + my $smooth1=$s*$p; + my $val=Int($t/$smooth1); + my $test= ($t%%($smooth1)); + ($test && ($val >= 2)) ?? ($smooth1,$val) !! (); + }).flat); + } + say "5-Smooth Numbers for 60^$_: "; + say $smooth.Bag.pairs>>.key.sort.join: " "; + say ""; + sleep 1; + +} diff --git a/challenge-003/ruben-westerberg/perl6/ch-2.p6 b/challenge-003/ruben-westerberg/perl6/ch-2.p6 new file mode 100755 index 0000000000..f970db6dc8 --- /dev/null +++ b/challenge-003/ruben-westerberg/perl6/ch-2.p6 @@ -0,0 +1,23 @@ +#!/usr/bin/env perl6 + +my $lines=@*ARGS[0]; +die "Rows must be 3 or greater." unless $lines >=3; + + +for 1..$lines { + state @current=(1); + say @current.join(" "); #TODO: make a better formating sub + @current=makeRow(@current); + +} +sub makeRow(@current) { + my @next=@current.push: 0; + my @outRow; + gather { + for @next { + state $previous=0; + take $_+$previous; + $previous=$_; + } + } +} |
