From d88862c38829e35a41d41adde76d3855fa1ce921 Mon Sep 17 00:00:00 2001 From: Ruben Westerberg Date: Tue, 2 Jul 2019 14:52:49 +1000 Subject: Solutions to ch1. p5 and p6 --- challenge-015/ruben-westerberg/perl5/ch-1.pl | 37 ++++++++++++++++++++++++++++ challenge-015/ruben-westerberg/perl6/ch-1.p6 | 15 +++++++++++ 2 files changed, 52 insertions(+) create mode 100755 challenge-015/ruben-westerberg/perl5/ch-1.pl create mode 100755 challenge-015/ruben-westerberg/perl6/ch-1.p6 diff --git a/challenge-015/ruben-westerberg/perl5/ch-1.pl b/challenge-015/ruben-westerberg/perl5/ch-1.pl new file mode 100755 index 0000000000..2367eb08e4 --- /dev/null +++ b/challenge-015/ruben-westerberg/perl5/ch-1.pl @@ -0,0 +1,37 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use List::Util qw; +use v5.24; + +my (@week, @balanced, @strong); #Store the results here +my @p=\(@week,@balanced,@strong); #Make indexable +my @ps; #Primes shift reg +my $i=0; + +while ((@strong < 10) || (@week < 10) ){ + push @ps, nextPrime(); #Push the next prime into the shift reg + next if $i++ <2; #This line for priming buffer + push @{$p[($ps[1]<=>(sum(@ps[0,2])/2))+1]}, $ps[1]; #Do test + shift @ps; #Remove the oldest prime from shift reg +} + +print "Week: ",join(", ",@week[0..9]),"\n"; +print "Strong: ",join(", ",@strong[0..9]),"\n"; + + +sub nextPrime { + state $p=1; + $p+=1 until isPrime( $p); + $p++; +} + +sub isPrime { + my $t=shift; + my $sum=0; + for (1..(int $t/2)) { + $sum++ if $t % $_ == 0; + last if $sum >1; + } + $sum==1; +} diff --git a/challenge-015/ruben-westerberg/perl6/ch-1.p6 b/challenge-015/ruben-westerberg/perl6/ch-1.p6 new file mode 100755 index 0000000000..6536812b30 --- /dev/null +++ b/challenge-015/ruben-westerberg/perl6/ch-1.p6 @@ -0,0 +1,15 @@ +#!/usr/bin/env perl6 + +my (@week,@balanced, @strong); +my @p=(@week, @balanced, @strong); +my @ps; +my @primes=(2..*).grep: *.is-prime; +my $i=0; +while @week < 10 or @strong < 10 { + @ps.push: @primes[$i]; + next if $i++ < 2; + @p[((@ps[1] <=> (sum(@ps[0,2])/2)).value+1)].push: @ps[1]; + @ps.shift; +} +put "Week: ",@week[^10].join: ", "; +put "Strong: ",@strong[^10].join: ", "; -- cgit