aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-136/roger-bell-west/perl/ch-1.pl31
-rwxr-xr-xchallenge-136/roger-bell-west/perl/ch-2.pl23
-rw-r--r--challenge-136/roger-bell-west/postscript/ch-1.ps41
-rw-r--r--challenge-136/roger-bell-west/postscript/ch-2.ps29
-rwxr-xr-xchallenge-136/roger-bell-west/python/ch-1.py29
-rwxr-xr-xchallenge-136/roger-bell-west/python/ch-2.py25
-rwxr-xr-xchallenge-136/roger-bell-west/raku/ch-1.p621
-rwxr-xr-xchallenge-136/roger-bell-west/raku/ch-2.p622
-rwxr-xr-xchallenge-136/roger-bell-west/ruby/ch-1.rb34
-rwxr-xr-xchallenge-136/roger-bell-west/ruby/ch-2.rb31
-rwxr-xr-xchallenge-136/roger-bell-west/rust/ch-1.rs44
-rwxr-xr-xchallenge-136/roger-bell-west/rust/ch-2.rs29
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)
+}