From a9602085f421e3277ba85daeeda08d596df1c903 Mon Sep 17 00:00:00 2001 From: Roger Bell_West Date: Mon, 22 Nov 2021 09:40:37 +0000 Subject: Solutions for challenge #140 --- challenge-140/roger-bell-west/perl/ch-1.pl | 37 ++++++++++++++++++++ challenge-140/roger-bell-west/perl/ch-2.pl | 19 +++++++++++ challenge-140/roger-bell-west/postscript/ch-1.ps | 40 ++++++++++++++++++++++ challenge-140/roger-bell-west/postscript/ch-2.ps | 38 +++++++++++++++++++++ challenge-140/roger-bell-west/python/ch-1.py | 35 +++++++++++++++++++ challenge-140/roger-bell-west/python/ch-2.py | 21 ++++++++++++ challenge-140/roger-bell-west/raku/ch-1.p6 | 34 +++++++++++++++++++ challenge-140/roger-bell-west/raku/ch-2.p6 | 17 ++++++++++ challenge-140/roger-bell-west/ruby/ch-1.rb | 42 +++++++++++++++++++++++ challenge-140/roger-bell-west/ruby/ch-2.rb | 26 ++++++++++++++ challenge-140/roger-bell-west/rust/ch-1.rs | 43 ++++++++++++++++++++++++ challenge-140/roger-bell-west/rust/ch-2.rs | 23 +++++++++++++ 12 files changed, 375 insertions(+) create mode 100755 challenge-140/roger-bell-west/perl/ch-1.pl create mode 100755 challenge-140/roger-bell-west/perl/ch-2.pl create mode 100644 challenge-140/roger-bell-west/postscript/ch-1.ps create mode 100644 challenge-140/roger-bell-west/postscript/ch-2.ps create mode 100755 challenge-140/roger-bell-west/python/ch-1.py create mode 100755 challenge-140/roger-bell-west/python/ch-2.py create mode 100755 challenge-140/roger-bell-west/raku/ch-1.p6 create mode 100755 challenge-140/roger-bell-west/raku/ch-2.p6 create mode 100755 challenge-140/roger-bell-west/ruby/ch-1.rb create mode 100755 challenge-140/roger-bell-west/ruby/ch-2.rb create mode 100755 challenge-140/roger-bell-west/rust/ch-1.rs create mode 100755 challenge-140/roger-bell-west/rust/ch-2.rs diff --git a/challenge-140/roger-bell-west/perl/ch-1.pl b/challenge-140/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..969b4aeabc --- /dev/null +++ b/challenge-140/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,37 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 3; + +is(dcbadd(11,1),100,'example 1'); +is(dcbadd(101,1),110,'example 2'); +is(dcbadd(100,11),111,'example 3'); + +sub cvradix { + my ($n,$r,$tf)=@_; + my $o=0; + my $nn=$n; + my $m=1; + my $ra; + my $rb; + if ($tf==0) { # convert to radix-format + $ra=$r; + $rb=10; + } else { # convert from radix-format + $ra=10; + $rb=$r; + } + while ($nn > 0) { + $o+=($nn % $ra)*$m; + $nn=int($nn/$ra); + $m*=$rb; + } + return $o; +} + +sub dcbadd { + my ($a,$b)=@_; + return cvradix(cvradix($a,2,1)+cvradix($b,2,1),2,0); +} diff --git a/challenge-140/roger-bell-west/perl/ch-2.pl b/challenge-140/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..80c9da7e5f --- /dev/null +++ b/challenge-140/roger-bell-west/perl/ch-2.pl @@ -0,0 +1,19 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 2; + +is(mtable(2,3,4),3,'example 1'); +is(mtable(3,3,6),4,'example 2'); + +sub mtable { + my ($i,$j,$k)=@_; + my @l; + foreach my $a (1..$i) { + push @l,map {$a*$_} (1..$j); + } + @l=sort @l; + return $l[$k-1]; +} diff --git a/challenge-140/roger-bell-west/postscript/ch-1.ps b/challenge-140/roger-bell-west/postscript/ch-1.ps new file mode 100644 index 0000000000..40f6a8e8e8 --- /dev/null +++ b/challenge-140/roger-bell-west/postscript/ch-1.ps @@ -0,0 +1,40 @@ +%!PS + +/cvradix { + /tf exch def + /r exch def + /n exch def + /o 0 def + /m 1 def + tf 0 eq { + /ra r def + /rb 10 def + } { + /ra 10 def + /rb r def + } ifelse + { + /o o n ra mod m mul add def + /n n ra div cvi def + /m m rb mul def + n 0 le { + exit + } if + } loop + o +} bind def + +11 2 1 cvradix 3 eq { (Pass) } { (FAIL) } ifelse print ( ) print +3 2 0 cvradix 11 eq { (Pass) } { (FAIL) } ifelse = + +/dcbadd { + 2 1 cvradix + exch + 2 1 cvradix + add + 2 0 cvradix +} bind def + +11 1 dcbadd 100 eq { (Pass) } { (FAIL) } ifelse print ( ) print +101 1 dcbadd 110 eq { (Pass) } { (FAIL) } ifelse print ( ) print +100 11 dcbadd 111 eq { (Pass) } { (FAIL) } ifelse = diff --git a/challenge-140/roger-bell-west/postscript/ch-2.ps b/challenge-140/roger-bell-west/postscript/ch-2.ps new file mode 100644 index 0000000000..81716eaa0c --- /dev/null +++ b/challenge-140/roger-bell-west/postscript/ch-2.ps @@ -0,0 +1,38 @@ +%!PS + +/bubblesort { + mark exch aload pop counttomark /idx + exch store + { + 0 1 idx 1 sub { + pop 2 copy gt { + exch + } if idx 1 roll + } for + idx 1 roll /idx idx 1 sub store + idx 0 eq { + exit + } if + } loop +] +} store + +/mtable { + /k exch def + /j exch def + /i exch def + /l i j mul array def + /li 0 def + 1 1 i { + /ix exch def + 1 1 j { + ix mul l exch li exch put + /li li 1 add def + } for + } for + /l l bubblesort def + l k 1 sub get +} bind def + +2 3 4 mtable 3 eq { (Pass) } { (FAIL) } ifelse print ( ) print +3 3 6 mtable 4 eq { (Pass) } { (FAIL) } ifelse = diff --git a/challenge-140/roger-bell-west/python/ch-1.py b/challenge-140/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..71868bc49a --- /dev/null +++ b/challenge-140/roger-bell-west/python/ch-1.py @@ -0,0 +1,35 @@ +#! /usr/bin/python3 + +import unittest + +def cvradix(n,r,tf): + o=0 + nn=n + m=1 + if tf==0: + ra=r + rb=10 + else: + ra=10 + rb=r + while nn>0: + o+=(nn % ra) * m + nn=int(nn/ra) + m*=rb + return o + +def dcbadd(a,b): + return cvradix(cvradix(a,2,1)+cvradix(b,2,1),2,0) + +class TestDcbadd(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(dcbadd(11,1),100,'example 1') + + def test_ex2(self): + self.assertEqual(dcbadd(101,1),110,'example 2') + + def test_ex3(self): + self.assertEqual(dcbadd(100,11),111,'example 3') + +unittest.main() diff --git a/challenge-140/roger-bell-west/python/ch-2.py b/challenge-140/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..5066ed6ee9 --- /dev/null +++ b/challenge-140/roger-bell-west/python/ch-2.py @@ -0,0 +1,21 @@ +#! /usr/bin/python3 + +import unittest + +def mtable(i,j,k): + l=[] + for ix in range(1,i+1): + for jx in range(1,j+1): + l.append(ix*jx) + l.sort() + return l[k-1] + +class TestMtable(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(mtable(2,3,4),3,'example 1') + + def test_ex2(self): + self.assertEqual(mtable(3,3,6),4,'example 2') + +unittest.main() diff --git a/challenge-140/roger-bell-west/raku/ch-1.p6 b/challenge-140/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..45a03ef0ec --- /dev/null +++ b/challenge-140/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,34 @@ +#! /usr/bin/perl6 + +use Test; + +plan 3; + +is(dcbadd(11,1),100,'example 1'); +is(dcbadd(101,1),110,'example 2'); +is(dcbadd(100,11),111,'example 3'); + +sub cvradix($n,$r,$tf) { + my $o=0; + my $nn=$n; + my $m=1; + my $ra; + my $rb; + if ($tf==0) { # convert to radix-format + $ra=$r; + $rb=10; + } else { # convert from radix-format + $ra=10; + $rb=$r; + } + while ($nn > 0) { + $o+=($nn % $ra)*$m; + $nn=floor($nn/$ra); + $m*=$rb; + } + return $o; +} + +sub dcbadd($a,$b) { + return cvradix(cvradix($a,2,1)+cvradix($b,2,1),2,0); +} diff --git a/challenge-140/roger-bell-west/raku/ch-2.p6 b/challenge-140/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..1bc0cfc117 --- /dev/null +++ b/challenge-140/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,17 @@ +#! /usr/bin/perl6 + +use Test; + +plan 2; + +is(mtable(2,3,4),3,'example 1'); +is(mtable(3,3,6),4,'example 2'); + +sub mtable($i,$j,$k) { + my @l; + for (1..$i) -> $a { + push @l,map {$a*$_}, (1..$j); + } + @l=@l».List.flat.sort; + return @l[$k-1]; +} diff --git a/challenge-140/roger-bell-west/ruby/ch-1.rb b/challenge-140/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..a15bbb1b8d --- /dev/null +++ b/challenge-140/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,42 @@ +#! /usr/bin/ruby + +def cvradix(n,r,tf) + o=0 + nn=n + m=1 + if tf==0 then + ra=r + rb=10 + else + ra=10 + rb=r + end + while nn>0 + nn,x=nn.divmod(ra) + o+=x*m + m*=rb + end + return o +end + +def dcbadd(a,b) + return cvradix(cvradix(a,2,1)+cvradix(b,2,1),2,0) +end + +require 'test/unit' + +class TestDcbadd < Test::Unit::TestCase + + def test_ex1 + assert_equal(100,dcbadd(11,1)) + end + + def test_ex2 + assert_equal(110,dcbadd(101,1)) + end + + def test_ex3 + assert_equal(111,dcbadd(100,11)) + end + +end diff --git a/challenge-140/roger-bell-west/ruby/ch-2.rb b/challenge-140/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..b9c2d87283 --- /dev/null +++ b/challenge-140/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,26 @@ +#! /usr/bin/ruby + +def mtable(i,j,k) + l=[] + 1.upto(i) do |ix| + 1.upto(j) do |jx| + l.push(ix*jx) + end + end + l.sort! + return l[k-1] +end + +require 'test/unit' + +class TestMtable < Test::Unit::TestCase + + def test_ex1 + assert_equal(3,mtable(2,3,4)) + end + + def test_ex2 + assert_equal(4,mtable(3,3,6)) + end + +end diff --git a/challenge-140/roger-bell-west/rust/ch-1.rs b/challenge-140/roger-bell-west/rust/ch-1.rs new file mode 100755 index 0000000000..9ccdfc31e4 --- /dev/null +++ b/challenge-140/roger-bell-west/rust/ch-1.rs @@ -0,0 +1,43 @@ +#! /bin/sh +//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit + +#[test] +fn test_ex1() { + assert_eq!(dcbadd(11,1),100); +} + +#[test] +fn test_ex2() { + assert_eq!(dcbadd(101,1),110); +} + +#[test] +fn test_ex3() { + assert_eq!(dcbadd(100,11),111); + +} + +fn cvradix(n: u32,r: u32,tf: u32) -> u32 { + let mut o=0; + let mut nn=n; + let mut m=1; + let ra; + let rb; + if tf==0 { + ra=r; + rb=10; + } else { + ra=10; + rb=r; + } + while nn>0 { + o+=(nn % ra) * m; + nn /= ra; + m *= rb; + } + return o; +} + +fn dcbadd(a: u32,b:u32) -> u32 { + return cvradix(cvradix(a,2,1)+cvradix(b,2,1),2,0); +} diff --git a/challenge-140/roger-bell-west/rust/ch-2.rs b/challenge-140/roger-bell-west/rust/ch-2.rs new file mode 100755 index 0000000000..5179d8f341 --- /dev/null +++ b/challenge-140/roger-bell-west/rust/ch-2.rs @@ -0,0 +1,23 @@ +#! /bin/sh +//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit + +#[test] +fn test_ex1() { + assert_eq!(mtable(2,3,4),3); +} + +#[test] +fn test_ex2() { + assert_eq!(mtable(3,3,6),4); +} + +fn mtable(i: u32,j: u32,k: usize) -> u32 { + let mut l=vec![]; + for ix in 1..=i { + for jx in 1..=j { + l.push(ix*jx); + } + } + l.sort(); + return l[k-1]; +} -- cgit