aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2021-11-15 10:14:47 +0000
committerRoger Bell_West <roger@firedrake.org>2021-11-15 10:14:47 +0000
commit9b6ae0f319fb88603ae3aa76ecd323bf09b36601 (patch)
treefdfc7e2865aa301730ae1ffb92fbc3bcd9089a1d
parent253e59bd48e295150f8dd52a89e77933e34db7d8 (diff)
downloadperlweeklychallenge-club-9b6ae0f319fb88603ae3aa76ecd323bf09b36601.tar.gz
perlweeklychallenge-club-9b6ae0f319fb88603ae3aa76ecd323bf09b36601.tar.bz2
perlweeklychallenge-club-9b6ae0f319fb88603ae3aa76ecd323bf09b36601.zip
Solutions for challenge #139
-rwxr-xr-xchallenge-139/roger-bell-west/perl/ch-1.pl19
-rwxr-xr-xchallenge-139/roger-bell-west/perl/ch-2.pl66
-rw-r--r--challenge-139/roger-bell-west/postscript/ch-1.ps19
-rw-r--r--challenge-139/roger-bell-west/postscript/ch-2.ps73
-rwxr-xr-xchallenge-139/roger-bell-west/python/ch-1.py23
-rwxr-xr-xchallenge-139/roger-bell-west/python/ch-2.py55
-rwxr-xr-xchallenge-139/roger-bell-west/raku/ch-1.p617
-rwxr-xr-xchallenge-139/roger-bell-west/raku/ch-2.p663
-rwxr-xr-xchallenge-139/roger-bell-west/ruby/ch-1.rb24
-rwxr-xr-xchallenge-139/roger-bell-west/ruby/ch-2.rb69
-rwxr-xr-xchallenge-139/roger-bell-west/rust/ch-1.rs21
-rwxr-xr-xchallenge-139/roger-bell-west/rust/ch-2.rs66
12 files changed, 515 insertions, 0 deletions
diff --git a/challenge-139/roger-bell-west/perl/ch-1.pl b/challenge-139/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..dcf01e3ca2
--- /dev/null
+++ b/challenge-139/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,19 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+
+is(jortsort([1,2,3,4,5]),1,'example 1');
+is(jortsort([1,3,2,4,5]),0,'example 2');
+
+sub jortsort {
+ my $a=shift;
+ foreach my $i (1..$#{$a}) {
+ if ($a->[$i-1] > $a->[$i]) {
+ return 0;
+ }
+ }
+ return 1;
+}
diff --git a/challenge-139/roger-bell-west/perl/ch-2.pl b/challenge-139/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..c8e4e4d3f2
--- /dev/null
+++ b/challenge-139/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,66 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+
+is_deeply(longprime(5),[7, 17, 19, 23, 29],'example 1');
+
+is_deeply(longprime(60),[7, 17, 19, 23, 29, 47, 59, 61, 97, 109, 113, 131, 149, 167, 179, 181, 193, 223, 229, 233, 257, 263, 269, 313, 337, 367, 379, 383, 389, 419, 433, 461, 487, 491, 499, 503, 509, 541, 571, 577, 593, 619, 647, 659, 701, 709, 727, 743, 811, 821, 823, 857, 863, 887, 937, 941, 953, 971, 977, 983],'example 2');
+
+sub is_prime {
+ my $n=shift;
+ if ($n>2 && $n%2==0) {
+ return 0;
+ }
+ if ($n>3 && $n%3==0) {
+ return 0;
+ }
+ my $lim=sqrt($n);
+ my $k6=0;
+ while (1) {
+ $k6+=6;
+ foreach my $t ($k6-1,$k6+1) {
+ if ($t<=$lim) {
+ if ($n % $t == 0) {
+ return 0;
+ }
+ } else {
+ return 1;
+ }
+ }
+ }
+}
+
+sub longprime {
+ my $n=shift;
+ my $nn=$n;
+ my @o;
+ my @ba=(7);
+ my $k6=6;
+ while ($nn) {
+ unless (@ba) {
+ $k6+=6;
+ @ba=($k6+1,$k6-1);
+ }
+ my $b=pop @ba;
+ if (is_prime($b)) {
+ my $k=1;
+ my $l=0;
+ while (1) {
+ $k*=10;
+ $l++;
+ $k %= $b;
+ if ($k==1) {
+ last;
+ }
+ }
+ if ($l==$b-1) {
+ push @o,$b;
+ $nn--;
+ }
+ }
+ }
+ return \@o;
+}
diff --git a/challenge-139/roger-bell-west/postscript/ch-1.ps b/challenge-139/roger-bell-west/postscript/ch-1.ps
new file mode 100644
index 0000000000..b575b6675e
--- /dev/null
+++ b/challenge-139/roger-bell-west/postscript/ch-1.ps
@@ -0,0 +1,19 @@
+%!PS
+
+/jortsort {
+ /a exch def
+ /ret true def
+ 1 1 a length 1 sub {
+ dup
+ 1 sub a exch get exch
+ a exch get
+ gt {
+ /ret false def
+ exit
+ } if
+ } for
+ ret
+} bind def
+
+[ 1 2 3 4 5] jortsort true eq { (Pass) } { (FAIL) } ifelse print ( ) print
+[ 1 3 2 4 5] jortsort false eq { (Pass) } { (FAIL) } ifelse =
diff --git a/challenge-139/roger-bell-west/postscript/ch-2.ps b/challenge-139/roger-bell-west/postscript/ch-2.ps
new file mode 100644
index 0000000000..8b917ed672
--- /dev/null
+++ b/challenge-139/roger-bell-west/postscript/ch-2.ps
@@ -0,0 +1,73 @@
+%!PS
+
+/apush { % [a b] c -> [a b c]
+ /t exch def
+ [ exch aload pop t ]
+} bind def
+
+/is_prime {
+ currentdict /ret undef
+ /n exch def
+ n 2 gt n 2 mod 0 eq and {
+ /ret false def
+ } if
+ n 3 gt n 3 mod 0 eq and {
+ /ret false def
+ } if
+ currentdict /ret known not {
+ /lim n sqrt cvi def
+ /k6 0 def
+ {
+ /k6 k6 6 add def
+ [ k6 1 sub k6 1 add ] {
+ /t exch def
+ t lim le {
+ n t mod 0 eq {
+ /ret false def
+ exit
+ } if
+ } {
+ /ret true def
+ exit
+ } ifelse
+ } forall
+ currentdict /ret known {
+ exit
+ } if
+ } loop
+ } if
+ ret
+} bind def
+
+/longprime {
+ /nn exch def
+ /o 0 array def
+ /b 5 def
+ {
+ /b b 2 add def
+ b is_prime {
+ /k 1 def
+ /l 0 def
+ {
+ /k k 10 mul def
+ /l l 1 add def
+ /k k b mod def
+ k 1 eq {
+ exit
+ } if
+ } loop
+ l b 1 sub eq {
+ /o o b apush def
+ /nn nn 1 sub def
+ } if
+ } if
+ nn 0 le {
+ exit
+ } if
+ } loop
+ o
+} bind def
+
+5 longprime ==
+
+60 longprime ==
diff --git a/challenge-139/roger-bell-west/python/ch-1.py b/challenge-139/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..c985e03544
--- /dev/null
+++ b/challenge-139/roger-bell-west/python/ch-1.py
@@ -0,0 +1,23 @@
+#! /usr/bin/python3
+
+import unittest
+
+from itertools import tee
+
+def jortsort(a):
+ j, k = tee(a)
+ next(k,None)
+ for i in zip(j,k):
+ if i[0] > i[1]:
+ return False
+ return True
+
+class TestJortsort(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(jortsort([1,2,3,4,5]),True,'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(jortsort([1,3,2,4,5]),False,'example 2')
+
+unittest.main()
diff --git a/challenge-139/roger-bell-west/python/ch-2.py b/challenge-139/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..6a9d90c5ea
--- /dev/null
+++ b/challenge-139/roger-bell-west/python/ch-2.py
@@ -0,0 +1,55 @@
+#! /usr/bin/python3
+
+import unittest
+
+from math import sqrt
+
+def is_prime(n):
+ if n>2 and n%2==0:
+ return 0
+ if n>3 and n%3==0:
+ return 0
+ lim=int(sqrt(n))
+ k6=0
+ while 1:
+ k6+=6
+ for t in [k6-1,k6+1]:
+ if t <= lim:
+ if n % t == 0:
+ return False
+ else:
+ return True
+
+def longprime(n):
+ nn=n
+ o=[]
+ ba=[7]
+ k6=6
+ while nn>0:
+ if len(ba)==0:
+ k6+=6
+ ba=[k6+1,k6-1]
+ b=ba.pop()
+ if is_prime(b):
+ k=1
+ l=0
+ while 1:
+ k*=10
+ l+=1
+ k %= b
+ if k==1:
+ break
+ if l==b-1:
+ o.append(b)
+ nn-=1
+ return o
+
+class TestLongprime(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(longprime(5),[7, 17, 19, 23, 29],'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(longprime(60),[7, 17, 19, 23, 29, 47, 59, 61, 97, 109, 113, 131, 149, 167, 179, 181, 193, 223, 229, 233, 257, 263, 269, 313, 337, 367, 379, 383, 389, 419, 433, 461, 487, 491, 499, 503, 509, 541, 571, 577, 593, 619, 647, 659, 701, 709, 727, 743, 811, 821, 823, 857, 863, 887, 937, 941, 953, 971, 977, 983],'example 1')
+
+unittest.main()
diff --git a/challenge-139/roger-bell-west/raku/ch-1.p6 b/challenge-139/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..dfbb3583d4
--- /dev/null
+++ b/challenge-139/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,17 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 2;
+
+is(jortsort([1,2,3,4,5]),True,'example 1');
+is(jortsort([1,3,2,4,5]),False,'example 2');
+
+sub jortsort(@a) {
+ for @a.rotor(2 => -1) -> @i {
+ if (@i[0] > @i[1]) {
+ return False;
+ }
+ }
+ return True;
+}
diff --git a/challenge-139/roger-bell-west/raku/ch-2.p6 b/challenge-139/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..bcc9af69d5
--- /dev/null
+++ b/challenge-139/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,63 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 2;
+
+is-deeply(longprime(5),[7, 17, 19, 23, 29],'example 1');
+
+is-deeply(longprime(60),[7, 17, 19, 23, 29, 47, 59, 61, 97, 109, 113, 131, 149, 167, 179, 181, 193, 223, 229, 233, 257, 263, 269, 313, 337, 367, 379, 383, 389, 419, 433, 461, 487, 491, 499, 503, 509, 541, 571, 577, 593, 619, 647, 659, 701, 709, 727, 743, 811, 821, 823, 857, 863, 887, 937, 941, 953, 971, 977, 983],'example 2');
+
+sub is_prime($n) {
+ if ($n>2 && $n%2==0) {
+ return 0;
+ }
+ if ($n>3 && $n%3==0) {
+ return 0;
+ }
+ my $lim=sqrt($n);
+ my $k6=0;
+ while (1) {
+ $k6+=6;
+ for ($k6-1,$k6+1) -> $t {
+ if ($t <= $lim) {
+ if ($n % $t == 0) {
+ return 0;
+ }
+ } else {
+ return 1;
+ }
+ }
+ }
+}
+
+sub longprime($n) {
+ my $nn=$n;
+ my @o;
+ my @ba=(7);
+ my $k6=6;
+ while ($nn) {
+ unless (@ba) {
+ $k6+=6;
+ @ba=[$k6+1,$k6-1];
+ }
+ my $b=@ba.pop;
+ if (is_prime($b)) {
+ my $k=1;
+ my $l=0;
+ while (1) {
+ $k*=10;
+ $l++;
+ $k %= $b;
+ if ($k==1) {
+ last;
+ }
+ }
+ if ($l==$b-1) {
+ push @o,$b;
+ $nn--;
+ }
+ }
+ }
+ return @o;
+}
diff --git a/challenge-139/roger-bell-west/ruby/ch-1.rb b/challenge-139/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..2aea17d923
--- /dev/null
+++ b/challenge-139/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,24 @@
+#! /usr/bin/ruby
+
+def jortsort(a)
+ a.each_cons(2) { |i|
+ if i[0] > i[1] then
+ return false
+ end
+ }
+ return true
+end
+
+require 'test/unit'
+
+class TestJortsort < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(true,jortsort([1,2,3,4,5]))
+ end
+
+ def test_ex2
+ assert_equal(false,jortsort([1,3,2,4,5]))
+ end
+
+end
diff --git a/challenge-139/roger-bell-west/ruby/ch-2.rb b/challenge-139/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..021b9f24a9
--- /dev/null
+++ b/challenge-139/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,69 @@
+#! /usr/bin/ruby
+
+def is_prime(n)
+ if n>2 && n%2==0 then
+ return 0
+ end
+ if n>3 && n%3==0 then
+ return 0
+ end
+ lim=Integer.sqrt(n)
+ k6=0
+ while 1
+ k6+=6
+ [k6-1,k6+1].each do |t|
+ if t<=lim then
+ if n%t == 0 then
+ return false
+ end
+ else
+ return true
+ end
+ end
+ end
+end
+
+def longprime(n)
+ nn=n
+ o=[]
+ ba=[7]
+ k6=6
+ while nn>0
+ if ba.length==0 then
+ k6+=6
+ ba=[k6+1,k6-1]
+ end
+ b=ba.pop
+ if is_prime(b) then
+ k=1
+ l=0
+ while 1
+ k*=10
+ l+=1
+ k%=b
+ if k==1 then
+ break
+ end
+ end
+ if l==b-1 then
+ o.push(b)
+ nn-=1
+ end
+ end
+ end
+ return o
+end
+
+require 'test/unit'
+
+class TestLongprime < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal([7, 17, 19, 23, 29],longprime(5))
+ end
+
+ def test_ex2
+ assert_equal([7, 17, 19, 23, 29, 47, 59, 61, 97, 109, 113, 131, 149, 167, 179, 181, 193, 223, 229, 233, 257, 263, 269, 313, 337, 367, 379, 383, 389, 419, 433, 461, 487, 491, 499, 503, 509, 541, 571, 577, 593, 619, 647, 659, 701, 709, 727, 743, 811, 821, 823, 857, 863, 887, 937, 941, 953, 971, 977, 983],longprime(60))
+ end
+
+end
diff --git a/challenge-139/roger-bell-west/rust/ch-1.rs b/challenge-139/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..9ca707af28
--- /dev/null
+++ b/challenge-139/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,21 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(jortsort(vec![1,2,3,4,5]),true);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(jortsort(vec![1,3,2,4,5]),false);
+}
+
+fn jortsort(a: Vec<i32>) -> bool {
+ for i in a.windows(2) {
+ if i[0] > i[1] {
+ return false;
+ }
+ }
+ true
+}
diff --git a/challenge-139/roger-bell-west/rust/ch-2.rs b/challenge-139/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..392de2dfa0
--- /dev/null
+++ b/challenge-139/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,66 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(longprime(5),vec![7, 17, 19, 23, 29]);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(longprime(60),vec![7, 17, 19, 23, 29, 47, 59, 61, 97, 109, 113, 131, 149, 167, 179, 181, 193, 223, 229, 233, 257, 263, 269, 313, 337, 367, 379, 383, 389, 419, 433, 461, 487, 491, 499, 503, 509, 541, 571, 577, 593, 619, 647, 659, 701, 709, 727, 743, 811, 821, 823, 857, 863, 887, 937, 941, 953, 971, 977, 983]);
+}
+
+fn is_prime(n: u32) -> bool {
+ if n>2 && n%2==0 {
+ return false;
+ }
+ if n>3 && n%3==0 {
+ return false;
+ }
+ let lim=(n as f64).sqrt() as u32;
+ let mut k6=0;
+ loop {
+ k6+=6;
+ for t in [k6-1,k6+1] {
+ if t <= lim {
+ if n % t == 0 {
+ return false;
+ }
+ } else {
+ return true;
+ }
+ }
+ }
+}
+
+fn longprime(n: u32) -> Vec<u32> {
+ let mut nn=n;
+ let mut o=vec![];
+ let mut ba=vec![7];
+ let mut k6=6;
+ while nn>0 {
+ if ba.len()==0 {
+ k6+=6;
+ ba=vec![k6+1,k6-1];
+ }
+ let b=ba.pop().unwrap();
+ if is_prime(b) {
+ let mut k=1;
+ let mut l=0;
+ loop {
+ k *= 10;
+ l += 1;
+ k %= b;
+ if k==1 {
+ break;
+ }
+ }
+ if l==b-1 {
+ o.push(b);
+ nn-=1;
+ }
+ }
+ }
+ o
+}