From adec2daa379ba2058fbe00b56f00188748d1b73b Mon Sep 17 00:00:00 2001 From: Roger Bell_West Date: Mon, 25 Oct 2021 12:34:30 +0100 Subject: Solutions for challenge #136 --- challenge-136/roger-bell-west/perl/ch-1.pl | 31 +++++++++++++++++ challenge-136/roger-bell-west/perl/ch-2.pl | 23 +++++++++++++ challenge-136/roger-bell-west/postscript/ch-1.ps | 41 ++++++++++++++++++++++ challenge-136/roger-bell-west/postscript/ch-2.ps | 29 ++++++++++++++++ challenge-136/roger-bell-west/python/ch-1.py | 29 ++++++++++++++++ challenge-136/roger-bell-west/python/ch-2.py | 25 ++++++++++++++ challenge-136/roger-bell-west/raku/ch-1.p6 | 21 +++++++++++ challenge-136/roger-bell-west/raku/ch-2.p6 | 22 ++++++++++++ challenge-136/roger-bell-west/ruby/ch-1.rb | 34 ++++++++++++++++++ challenge-136/roger-bell-west/ruby/ch-2.rb | 31 +++++++++++++++++ challenge-136/roger-bell-west/rust/ch-1.rs | 44 ++++++++++++++++++++++++ challenge-136/roger-bell-west/rust/ch-2.rs | 29 ++++++++++++++++ 12 files changed, 359 insertions(+) create mode 100755 challenge-136/roger-bell-west/perl/ch-1.pl create mode 100755 challenge-136/roger-bell-west/perl/ch-2.pl create mode 100644 challenge-136/roger-bell-west/postscript/ch-1.ps create mode 100644 challenge-136/roger-bell-west/postscript/ch-2.ps create mode 100755 challenge-136/roger-bell-west/python/ch-1.py create mode 100755 challenge-136/roger-bell-west/python/ch-2.py create mode 100755 challenge-136/roger-bell-west/raku/ch-1.p6 create mode 100755 challenge-136/roger-bell-west/raku/ch-2.p6 create mode 100755 challenge-136/roger-bell-west/ruby/ch-1.rb create mode 100755 challenge-136/roger-bell-west/ruby/ch-2.rb create mode 100755 challenge-136/roger-bell-west/rust/ch-1.rs create mode 100755 challenge-136/roger-bell-west/rust/ch-2.rs 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 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 i32 { + f(m,1,1) +} -- cgit