aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2021-11-22 09:40:37 +0000
committerRoger Bell_West <roger@firedrake.org>2021-11-22 09:40:37 +0000
commita9602085f421e3277ba85daeeda08d596df1c903 (patch)
tree419878e504d159b56c66f267aa25c2f3b5997bf2
parente57e8ba97ca974deeadbd7137390e99a38d8304d (diff)
downloadperlweeklychallenge-club-a9602085f421e3277ba85daeeda08d596df1c903.tar.gz
perlweeklychallenge-club-a9602085f421e3277ba85daeeda08d596df1c903.tar.bz2
perlweeklychallenge-club-a9602085f421e3277ba85daeeda08d596df1c903.zip
Solutions for challenge #140
-rwxr-xr-xchallenge-140/roger-bell-west/perl/ch-1.pl37
-rwxr-xr-xchallenge-140/roger-bell-west/perl/ch-2.pl19
-rw-r--r--challenge-140/roger-bell-west/postscript/ch-1.ps40
-rw-r--r--challenge-140/roger-bell-west/postscript/ch-2.ps38
-rwxr-xr-xchallenge-140/roger-bell-west/python/ch-1.py35
-rwxr-xr-xchallenge-140/roger-bell-west/python/ch-2.py21
-rwxr-xr-xchallenge-140/roger-bell-west/raku/ch-1.p634
-rwxr-xr-xchallenge-140/roger-bell-west/raku/ch-2.p617
-rwxr-xr-xchallenge-140/roger-bell-west/ruby/ch-1.rb42
-rwxr-xr-xchallenge-140/roger-bell-west/ruby/ch-2.rb26
-rwxr-xr-xchallenge-140/roger-bell-west/rust/ch-1.rs43
-rwxr-xr-xchallenge-140/roger-bell-west/rust/ch-2.rs23
12 files changed, 375 insertions, 0 deletions
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];
+}