diff options
| -rwxr-xr-x | challenge-136/roger-bell-west/perl/ch-1.pl | 31 | ||||
| -rwxr-xr-x | challenge-136/roger-bell-west/perl/ch-2.pl | 23 | ||||
| -rw-r--r-- | challenge-136/roger-bell-west/postscript/ch-1.ps | 41 | ||||
| -rw-r--r-- | challenge-136/roger-bell-west/postscript/ch-2.ps | 29 | ||||
| -rwxr-xr-x | challenge-136/roger-bell-west/python/ch-1.py | 29 | ||||
| -rwxr-xr-x | challenge-136/roger-bell-west/python/ch-2.py | 25 | ||||
| -rwxr-xr-x | challenge-136/roger-bell-west/raku/ch-1.p6 | 21 | ||||
| -rwxr-xr-x | challenge-136/roger-bell-west/raku/ch-2.p6 | 22 | ||||
| -rwxr-xr-x | challenge-136/roger-bell-west/ruby/ch-1.rb | 34 | ||||
| -rwxr-xr-x | challenge-136/roger-bell-west/ruby/ch-2.rb | 31 | ||||
| -rwxr-xr-x | challenge-136/roger-bell-west/rust/ch-1.rs | 44 | ||||
| -rwxr-xr-x | challenge-136/roger-bell-west/rust/ch-2.rs | 29 |
12 files changed, 359 insertions, 0 deletions
diff --git a/challenge-136/roger-bell-west/perl/ch-1.pl b/challenge-136/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..f21d9316d8 --- /dev/null +++ b/challenge-136/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,31 @@ +#! /usr/bin/perl + +use strict; + +use Test::More tests => 4; + +is(twofriendly(8,24),1,'example 1'); +is(twofriendly(26,39),0,'example 2'); +is(twofriendly(4,10),1,'example 3'); +is(twofriendly(1,2),0,'example 4'); + +sub gcd { + my ($m,$n)=@_; + while ($n!=0) { + ($m,$n)=($n,$m % $n); + } + return $m; +} + +sub ispower2 { + my $n=shift; + if ($n<2) { + return 0; + } + return ($n & ($n-1))==0; +} + +sub twofriendly { + my ($m,$n)=@_; + return ispower2(gcd($m,$n))?1:0; +} diff --git a/challenge-136/roger-bell-west/perl/ch-2.pl b/challenge-136/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..dc0c011d56 --- /dev/null +++ b/challenge-136/roger-bell-west/perl/ch-2.pl @@ -0,0 +1,23 @@ +#! /usr/bin/perl + +use strict; + +use Test::More tests => 3; + +is(fibseq(16),4,'example 1'); +is(fibseq(9),2,'example 2'); +is(fibseq(15),2,'example 3'); + +sub fibseq { + my $m=shift; + return f($m,1,1); +} + +sub f { + my ($x,$y,$z)=@_; + if ($x < $y) { + return ($x==0)?1:0; + } else { + return f($x-$y,$y+$z,$y)+f($x,$y+$z,$y); + } +} diff --git a/challenge-136/roger-bell-west/postscript/ch-1.ps b/challenge-136/roger-bell-west/postscript/ch-1.ps new file mode 100644 index 0000000000..c7874180ff --- /dev/null +++ b/challenge-136/roger-bell-west/postscript/ch-1.ps @@ -0,0 +1,41 @@ +%!PS + +/gcd { + { + dup + 3 1 roll + mod + dup 0 eq { + pop exit + } if + } loop +} bind def + +48 18 gcd 6 eq { (Pass) } { (FAIL) } ifelse print ( ) print +18 48 gcd 6 eq { (Pass) } { (FAIL) } ifelse print ( ) print +24 54 gcd 6 eq { (Pass) } { (FAIL) } ifelse print ( ) print +54 24 gcd 6 eq { (Pass) } { (FAIL) } ifelse print ( ) print +12 8 gcd 4 eq { (Pass) } { (FAIL) } ifelse print ( ) print +8 12 gcd 4 eq { (Pass) } { (FAIL) } ifelse = + +/ispower2 { + dup 2 lt { + pop false + } { + dup 1 sub and 0 eq + } ifelse +} bind def + +1 ispower2 false eq { (Pass) } { (FAIL) } ifelse print ( ) print +2 ispower2 true eq { (Pass) } { (FAIL) } ifelse print ( ) print +17 ispower2 false eq { (Pass) } { (FAIL) } ifelse print ( ) print +16 ispower2 true eq { (Pass) } { (FAIL) } ifelse = + +/twofriendly { + gcd ispower2 +} bind def + +8 24 twofriendly true eq { (Pass) } { (FAIL) } ifelse print ( ) print +26 39 twofriendly false eq { (Pass) } { (FAIL) } ifelse print ( ) print +4 10 twofriendly true eq { (Pass) } { (FAIL) } ifelse print ( ) print +1 2 twofriendly false eq { (Pass) } { (FAIL) } ifelse = diff --git a/challenge-136/roger-bell-west/postscript/ch-2.ps b/challenge-136/roger-bell-west/postscript/ch-2.ps new file mode 100644 index 0000000000..6c65912987 --- /dev/null +++ b/challenge-136/roger-bell-west/postscript/ch-2.ps @@ -0,0 +1,29 @@ +%!PS + +/fibseq { + 1 1 f +} bind def + +/f { + 3 dict begin + /z exch def + /y exch def + /x exch def + x y lt { + x 0 eq { + 1 + } { + 0 + } ifelse + } { + x y sub y z add y f + x y z add y f + add + } ifelse + end +} bind def + +16 fibseq 4 eq { (Pass) } { (FAIL) } ifelse print ( ) print +9 fibseq 2 eq { (Pass) } { (FAIL) } ifelse print ( ) print +15 fibseq 2 eq { (Pass) } { (FAIL) } ifelse = + diff --git a/challenge-136/roger-bell-west/python/ch-1.py b/challenge-136/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..2636b1661f --- /dev/null +++ b/challenge-136/roger-bell-west/python/ch-1.py @@ -0,0 +1,29 @@ +#! /usr/bin/python3 + +import unittest + +from math import gcd + +def ispower2(n): + if n<2: + return False + return (n & (n-1))==0 + +def twofriendly(m,n): + return 1 if ispower2(gcd(m,n)) else 0 + +class TestTwofriendly(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(twofriendly(8,24),1,'example 1') + + def test_ex2(self): + self.assertEqual(twofriendly(26,39),0,'example 2') + + def test_ex3(self): + self.assertEqual(twofriendly(4,10),1,'example 3') + + def test_ex4(self): + self.assertEqual(twofriendly(1,2),0,'example 4') + +unittest.main() diff --git a/challenge-136/roger-bell-west/python/ch-2.py b/challenge-136/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..bd1045ac5a --- /dev/null +++ b/challenge-136/roger-bell-west/python/ch-2.py @@ -0,0 +1,25 @@ +#! /usr/bin/python3 + +import unittest + +def fibseq(m): + return f(m,1,1) + +def f(x,y,z): + if x<y: + return 1 if x==0 else 0 + else: + return f(x-y,y+z,y)+f(x,y+z,y) + +class TestFibseq(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(fibseq(16),4,'example 1') + + def test_ex2(self): + self.assertEqual(fibseq(9),2,'example 2') + + def test_ex3(self): + self.assertEqual(fibseq(15),2,'example 3') + +unittest.main() diff --git a/challenge-136/roger-bell-west/raku/ch-1.p6 b/challenge-136/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..56a5a5e533 --- /dev/null +++ b/challenge-136/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,21 @@ +#! /usr/bin/perl6 + +use Test; + +plan 4; + +is(twofriendly(8,24),1,'example 1'); +is(twofriendly(26,39),0,'example 2'); +is(twofriendly(4,10),1,'example 3'); +is(twofriendly(1,2),0,'example 4'); + +sub ispower2($n) { + if ($n < 2) { + return 0; + } + return ($n +& ($n-1))==0; +} + +sub twofriendly($m,$n) { + return ispower2($m gcd $n) ?? 1 !! 0; +} diff --git a/challenge-136/roger-bell-west/raku/ch-2.p6 b/challenge-136/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..7bc0392895 --- /dev/null +++ b/challenge-136/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,22 @@ +#! /usr/bin/perl6 + +use Test; + +plan 3; + +is(fibseq(16),4,'example 1'); +is(fibseq(9),2,'example 2'); +is(fibseq(15),2,'example 3'); + +sub fibseq($m) { + return f($m,1,1); +} + +sub f($x,$y,$z) { + if ($x < $y) { + return 1 if $x==0; + return 0; + } else { + return f($x-$y,$y+$z,$y)+f($x,$y+$z,$y); + } +} diff --git a/challenge-136/roger-bell-west/ruby/ch-1.rb b/challenge-136/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..a1515c047a --- /dev/null +++ b/challenge-136/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,34 @@ +#! /usr/bin/ruby + +def ispower2(n) + if n<2 then + return false + end + return (n & (n-1))==0 +end + +def twofriendly(m,n) + return ispower2(m.gcd(n))?1:0; +end + +require 'test/unit' + +class TestTwofriendly < Test::Unit::TestCase + + def test_ex1 + assert_equal(1,twofriendly(8,24)) + end + + def test_ex2 + assert_equal(0,twofriendly(26,39)) + end + + def test_ex3 + assert_equal(1,twofriendly(4,10)) + end + + def test_ex4 + assert_equal(0,twofriendly(1,2)) + end + +end diff --git a/challenge-136/roger-bell-west/ruby/ch-2.rb b/challenge-136/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..882c9e0f0c --- /dev/null +++ b/challenge-136/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,31 @@ +#! /usr/bin/ruby + +def fibseq(m) + return f(m,1,1) +end + +def f(x,y,z) + if x<y then + return (x==0)?1:0 + else + return f(x-y,y+z,y)+f(x,y+z,y) + end +end + +require 'test/unit' + +class TestFibseq < Test::Unit::TestCase + + def test_ex1 + assert_equal(4,fibseq(16)) + end + + def test_ex2 + assert_equal(2,fibseq(9)) + end + + def test_ex3 + assert_equal(2,fibseq(15)) + end + +end diff --git a/challenge-136/roger-bell-west/rust/ch-1.rs b/challenge-136/roger-bell-west/rust/ch-1.rs new file mode 100755 index 0000000000..191a23d507 --- /dev/null +++ b/challenge-136/roger-bell-west/rust/ch-1.rs @@ -0,0 +1,44 @@ +#! /bin/sh +//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit + +#[test] +fn test_ex1() { + assert_eq!(twofriendly(8,24),1); +} + +#[test] +fn test_ex2() { + assert_eq!(twofriendly(26,39),0); +} + +#[test] +fn test_ex3() { + assert_eq!(twofriendly(4,10),1); +} + +#[test] +fn test_ex4() { + assert_eq!(twofriendly(1,2),0); +} + +fn gcd(m: i32,n: i32) -> i32 { + let mut mm=m; + let mut nn=n; + while nn!=0 { + let t=mm; + mm=nn; + nn=t%nn; + } + mm +} + +fn ispower2(n: i32) -> bool { + if n<2 { + return false; + } + (n & (n-1))==0 +} + +fn twofriendly(m: i32, n: i32) -> u8 { + if ispower2(gcd(m,n)) { 1 } else { 0 } +} diff --git a/challenge-136/roger-bell-west/rust/ch-2.rs b/challenge-136/roger-bell-west/rust/ch-2.rs new file mode 100755 index 0000000000..f1b60fd19d --- /dev/null +++ b/challenge-136/roger-bell-west/rust/ch-2.rs @@ -0,0 +1,29 @@ +#! /bin/sh +//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit + +#[test] +fn test_ex1() { + assert_eq!(fibseq(16),4); +} + +#[test] +fn test_ex2() { + assert_eq!(fibseq(9),2); +} + +#[test] +fn test_ex3() { + assert_eq!(fibseq(15),2); +} + +fn f (x: i32,y: i32,z: i32) -> i32 { + if x<y { + return if x==0 { 1 } else { 0 }; + } else { + return f(x-y,y+z,y)+f(x,y+z,y); + } +} + +fn fibseq(m: i32) -> i32 { + f(m,1,1) +} |
