diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-11-16 20:50:02 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-16 20:50:02 +0000 |
| commit | 2fcff12ce4075bdda901db9e56c573aba9a66430 (patch) | |
| tree | f55572a4273a7c1ddf73e2599e41418268aa2e40 | |
| parent | 612d6ce45f06d3e54c9b4045972890b0963848e5 (diff) | |
| parent | 9b6ae0f319fb88603ae3aa76ecd323bf09b36601 (diff) | |
| download | perlweeklychallenge-club-2fcff12ce4075bdda901db9e56c573aba9a66430.tar.gz perlweeklychallenge-club-2fcff12ce4075bdda901db9e56c573aba9a66430.tar.bz2 perlweeklychallenge-club-2fcff12ce4075bdda901db9e56c573aba9a66430.zip | |
Merge pull request #5226 from Firedrake/rogerbw-challenge-139
Solutions for challenge #139
| -rwxr-xr-x | challenge-139/roger-bell-west/perl/ch-1.pl | 19 | ||||
| -rwxr-xr-x | challenge-139/roger-bell-west/perl/ch-2.pl | 66 | ||||
| -rw-r--r-- | challenge-139/roger-bell-west/postscript/ch-1.ps | 19 | ||||
| -rw-r--r-- | challenge-139/roger-bell-west/postscript/ch-2.ps | 73 | ||||
| -rwxr-xr-x | challenge-139/roger-bell-west/python/ch-1.py | 23 | ||||
| -rwxr-xr-x | challenge-139/roger-bell-west/python/ch-2.py | 55 | ||||
| -rwxr-xr-x | challenge-139/roger-bell-west/raku/ch-1.p6 | 17 | ||||
| -rwxr-xr-x | challenge-139/roger-bell-west/raku/ch-2.p6 | 63 | ||||
| -rwxr-xr-x | challenge-139/roger-bell-west/ruby/ch-1.rb | 24 | ||||
| -rwxr-xr-x | challenge-139/roger-bell-west/ruby/ch-2.rb | 69 | ||||
| -rwxr-xr-x | challenge-139/roger-bell-west/rust/ch-1.rs | 21 | ||||
| -rwxr-xr-x | challenge-139/roger-bell-west/rust/ch-2.rs | 66 |
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 +} |
