aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-003/ruben-westerberg/README6
-rwxr-xr-xchallenge-003/ruben-westerberg/perl5/ch-1.pl35
-rwxr-xr-xchallenge-003/ruben-westerberg/perl5/ch-2.pl30
-rwxr-xr-xchallenge-003/ruben-westerberg/perl6/ch-1.p622
-rwxr-xr-xchallenge-003/ruben-westerberg/perl6/ch-2.p623
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=$_;
+ }
+ }
+}