aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-135/roger-bell-west/perl/ch-1.pl24
-rwxr-xr-xchallenge-135/roger-bell-west/perl/ch-2.pl36
-rw-r--r--challenge-135/roger-bell-west/postscript/ch-1.ps25
-rw-r--r--challenge-135/roger-bell-west/postscript/ch-2.ps38
-rwxr-xr-xchallenge-135/roger-bell-west/python/ch-1.py29
-rwxr-xr-xchallenge-135/roger-bell-west/python/ch-2.py40
-rwxr-xr-xchallenge-135/roger-bell-west/raku/ch-1.p623
-rwxr-xr-xchallenge-135/roger-bell-west/raku/ch-2.p635
-rwxr-xr-xchallenge-135/roger-bell-west/ruby/ch-1.rb35
-rwxr-xr-xchallenge-135/roger-bell-west/ruby/ch-2.rb52
-rwxr-xr-xchallenge-135/roger-bell-west/rust/ch-1.rs35
-rwxr-xr-xchallenge-135/roger-bell-west/rust/ch-2.rs52
12 files changed, 424 insertions, 0 deletions
diff --git a/challenge-135/roger-bell-west/perl/ch-1.pl b/challenge-135/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..85db09f36a
--- /dev/null
+++ b/challenge-135/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,24 @@
+#! /usr/bin/perl
+
+use strict;
+
+use Test::More tests => 4;
+
+is(m3d(1234567),'345','example 1');
+is(m3d(-123),'123','example 2');
+is(m3d(1),'too short','example 3');
+is(m3d(1010),'even number of digits','example 4');
+
+sub m3d {
+ my $n=shift;
+ my $m=abs($n);
+ $m="$m";
+ my $l=length($m);
+ if ($l < 3) {
+ return 'too short';
+ }
+ if ($l % 2 == 0) {
+ return 'even number of digits';
+ }
+ return substr($m,int($l/2)-1,3);
+}
diff --git a/challenge-135/roger-bell-west/perl/ch-2.pl b/challenge-135/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..eaa64fec2f
--- /dev/null
+++ b/challenge-135/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,36 @@
+#! /usr/bin/perl
+
+use strict;
+
+use Test::More tests => 5;
+
+is(sedolv('2936921'),1,'example 1');
+is(sedolv('1234567'),0,'example 2');
+is(sedolv('B0YBKL9'),1,'example 3');
+is(sedolv('A0ZBKL9'),0,'example 4');
+is(sedolv('B2YBIL9'),0,'example 5');
+
+sub sedolv {
+ my $sedol=shift;
+ my @w=(1,3,1,7,3,9,1);
+ if (length($sedol) != 7) {
+ return 0;
+ }
+ my $s=0;
+ foreach my $i (0..6) {
+ my $c=substr($sedol,$i,1);
+ my $n=0;
+ if ($c =~ /[0-9]/) {
+ $n=$c+0;
+ } elsif ($c =~ /[B-Z]/ && $c !~ /[EIOU]/) {
+ $n=ord($c)-55;
+ } else {
+ return 0;
+ }
+ $s+=$n*$w[$i];
+ }
+ if ($s % 10 == 0) {
+ return 1;
+ }
+ return 0;
+}
diff --git a/challenge-135/roger-bell-west/postscript/ch-1.ps b/challenge-135/roger-bell-west/postscript/ch-1.ps
new file mode 100644
index 0000000000..fc2e5530d0
--- /dev/null
+++ b/challenge-135/roger-bell-west/postscript/ch-1.ps
@@ -0,0 +1,25 @@
+%!PS
+
+/m3d {
+ abs
+ dup log cvi 1 add string /sform exch def
+ sform cvs pop
+ sform length
+ dup 3 lt {
+ pop
+ (too short)
+ } {
+ dup 2 mod 0 eq {
+ pop
+ (even number of digits)
+ } {
+ 2 idiv 1 sub
+ sform exch 3 getinterval
+ } ifelse
+ } ifelse
+} def
+
+1234567 m3d (345) eq { (Pass) } { (Fail) } ifelse print ( ) print
+-123 m3d (123) eq { (Pass) } { (Fail) } ifelse print ( ) print
+1 m3d (too short) eq { (Pass) } { (Fail) } ifelse print ( ) print
+1010 m3d (even number of digits) eq { (Pass) } { (Fail) } ifelse =
diff --git a/challenge-135/roger-bell-west/postscript/ch-2.ps b/challenge-135/roger-bell-west/postscript/ch-2.ps
new file mode 100644
index 0000000000..6570a229c1
--- /dev/null
+++ b/challenge-135/roger-bell-west/postscript/ch-2.ps
@@ -0,0 +1,38 @@
+%!PS
+
+/sedolv {
+ /sedol exch def
+ /weight [ 1 3 1 7 3 9 1 ] def
+ /valid 1 def
+ /sum 0 def
+ sedol length 7 ne { 0 exit } if
+ 0 1 6 {
+ dup
+ sedol exch get
+ valid 0 eq { exit } if
+ dup 48 ge exch dup 57 le 3 -1 roll and {
+ 48 sub
+ } {
+ dup 66 ge exch dup 90 le 3 -1 roll and {
+ dup 69 eq { /valid 0 def } if
+ dup 73 eq { /valid 0 def } if
+ dup 79 eq { /valid 0 def } if
+ dup 85 eq { /valid 0 def } if
+ 55 sub
+ } {
+ /valid 0 def
+ } ifelse
+ } ifelse
+ exch weight exch get mul sum add /sum exch def
+ } for
+ sum 10 mod 0 ne {
+ /valid 0 def
+ } if
+ valid
+} def
+
+(2936921) sedolv 1 eq { (Pass) } { (Fail) } ifelse print ( ) print
+(1234567) sedolv 0 eq { (Pass) } { (Fail) } ifelse print ( ) print
+(B0YBKL9) sedolv 1 eq { (Pass) } { (Fail) } ifelse print ( ) print
+(A0ZBKL9) sedolv 0 eq { (Pass) } { (Fail) } ifelse print ( ) print
+(B2YBIL9) sedolv 0 eq { (Pass) } { (Fail) } ifelse =
diff --git a/challenge-135/roger-bell-west/python/ch-1.py b/challenge-135/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..1269c693f7
--- /dev/null
+++ b/challenge-135/roger-bell-west/python/ch-1.py
@@ -0,0 +1,29 @@
+#! /usr/bin/python3
+
+import unittest
+
+def m3d(n):
+ m=str(abs(n))
+ l=len(m)
+ if l<3:
+ return "too short"
+ if l%2 == 0:
+ return "even number of digits"
+ i=int(l/2)-1
+ return m[i:i+3]
+
+class TestM3d(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(m3d(1234567),'345','example 1')
+
+ def test_ex2(self):
+ self.assertEqual(m3d(-123),'123','example 2')
+
+ def test_ex3(self):
+ self.assertEqual(m3d(1),'too short','example 3')
+
+ def test_ex4(self):
+ self.assertEqual(m3d(1010),'even number of digits','example 4')
+
+unittest.main()
diff --git a/challenge-135/roger-bell-west/python/ch-2.py b/challenge-135/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..f8a15ed262
--- /dev/null
+++ b/challenge-135/roger-bell-west/python/ch-2.py
@@ -0,0 +1,40 @@
+#! /usr/bin/python3
+
+import unittest
+
+def sedolv(sedol):
+ if len(sedol) != 7:
+ return 0
+ w=[1,3,1,7,3,9,1]
+ s=0
+ for i in range(7):
+ n=0
+ if sedol[i].isdigit():
+ n=int(sedol[i])
+ elif sedol[i].isalpha() and sedol[i].isupper() and not sedol[i] in "AEIOU":
+ n=ord(sedol[i])-55
+ else:
+ return 0
+ s+=n*w[i]
+ if s % 10 == 0:
+ return 1
+ return 0
+
+class TestSedolv(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(sedolv("2936921"),1,"example ")
+
+ def test_ex2(self):
+ self.assertEqual(sedolv("1234567"),0,"example ")
+
+ def test_ex3(self):
+ self.assertEqual(sedolv("B0YBKL9"),1,"example ")
+
+ def test_ex4(self):
+ self.assertEqual(sedolv("A0ZBKL9"),0,"example ")
+
+ def test_ex5(self):
+ self.assertEqual(sedolv("B2YBIL9"),0,"example ")
+
+unittest.main()
diff --git a/challenge-135/roger-bell-west/raku/ch-1.p6 b/challenge-135/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..3af9501a02
--- /dev/null
+++ b/challenge-135/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,23 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 4;
+
+is(m3d(1234567),'345','example 1');
+is(m3d(-123),'123','example 2');
+is(m3d(1),'too short','example 3');
+is(m3d(1010),'even number of digits','example 4');
+
+sub m3d($n) {
+ my $m=abs($n);
+ $m="$m";
+ my $l=$m.chars();
+ if ($l < 3) {
+ return 'too short';
+ }
+ if ($l % 2 == 0) {
+ return 'even number of digits';
+ }
+ return substr($m,floor($l/2)-1,3);
+}
diff --git a/challenge-135/roger-bell-west/raku/ch-2.p6 b/challenge-135/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..14b5fc24d4
--- /dev/null
+++ b/challenge-135/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,35 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 5;
+
+is(sedolv('2936921'),1,'example 1');
+is(sedolv('1234567'),0,'example 2');
+is(sedolv('B0YBKL9'),1,'example 3');
+is(sedolv('A0ZBKL9'),0,'example 4');
+is(sedolv('B2YBIL9'),0,'example 5');
+
+sub sedolv($sedol) {
+ my @w=(1,3,1,7,3,9,1);
+ if ($sedol.chars != 7) {
+ return 0;
+ }
+ my $s=0;
+ for (0..6) -> $i {
+ my $c=substr($sedol,$i,1);
+ my $n=0;
+ if ($c ~~ /<[0..9]>/) {
+ $n=$c+0;
+ } elsif ($c ~~ /<[B..Z]>/ && $c !~~ /<[EIOU]>/) {
+ $n=ord($c)-55;
+ } else {
+ return 0;
+ }
+ $s+=$n*@w[$i];
+ }
+ if ($s % 10 == 0) {
+ return 1;
+ }
+ return 0;
+}
diff --git a/challenge-135/roger-bell-west/ruby/ch-1.rb b/challenge-135/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..6f77a671e4
--- /dev/null
+++ b/challenge-135/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,35 @@
+#! /usr/bin/ruby
+
+def m3d(n)
+ m=n.abs().to_s()
+ l=m.length()
+ if l<3 then
+ return "too short"
+ end
+ if l%2 == 0 then
+ return "even number of digits"
+ end
+ return m[l/2-1,3]
+end
+
+require 'test/unit'
+
+class TestM3d < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal("345",m3d(1234567))
+ end
+
+ def test_ex2
+ assert_equal("123",m3d(-123))
+ end
+
+ def test_ex3
+ assert_equal("too short",m3d(1))
+ end
+
+ def test_ex4
+ assert_equal("even number of digits",m3d(1010))
+ end
+
+end
diff --git a/challenge-135/roger-bell-west/ruby/ch-2.rb b/challenge-135/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..6bae088f11
--- /dev/null
+++ b/challenge-135/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,52 @@
+#! /usr/bin/ruby
+
+def sedolv(sedol)
+ if sedol.length() != 7 then
+ return 0
+ end
+ w=[1,3,1,7,3,9,1]
+ s=0
+ sedol.split("").zip(w).each do |x|
+ n=0
+ if x[0].match(/[[:digit:]]/) then
+ n=x[0].to_i()
+ elsif x[0].match(/[[:alpha:]]/) && x[0].match(/[[:upper:]]/) &&
+ ! "AEIOU".include?(x[0]) then
+ n=x[0].ord()-55
+ else
+ return 0
+ end
+ s+=n*x[1]
+ end
+ if s % 10 == 0 then
+ return 1
+ end
+ return 0
+end
+
+require 'test/unit'
+
+class TestSedolv < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(1,sedolv('2936921'))
+ end
+
+ def test_ex2
+ assert_equal(0,sedolv('1234567'))
+ end
+
+ def test_ex3
+ assert_equal(1,sedolv('B0YBKL9'))
+ end
+
+ def test_ex4
+ assert_equal(0,sedolv('A0ZBKL9'))
+ end
+
+ def test_ex5
+ assert_equal(0,sedolv('B2YBIL9'))
+ end
+
+
+end
diff --git a/challenge-135/roger-bell-west/rust/ch-1.rs b/challenge-135/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..4704d50d62
--- /dev/null
+++ b/challenge-135/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,35 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(m3d(1234567),"345");
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(m3d(-123),"123".to_string());
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(m3d(1),"too short".to_string());
+}
+
+#[test]
+fn test_ex4() {
+ assert_eq!(m3d(1010),"even number of digits".to_string());
+}
+
+fn m3d(n: i32) -> String {
+ let m=n.abs().to_string();
+ let l=m.len();
+ if l < 3 {
+ return "too short".to_string();
+ }
+ if l % 2 == 0 {
+ return "even number of digits".to_string();
+ }
+ let i=l/2-1;
+ m[i..i+3].to_string()
+}
diff --git a/challenge-135/roger-bell-west/rust/ch-2.rs b/challenge-135/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..c5594376d2
--- /dev/null
+++ b/challenge-135/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,52 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(sedolv("2936921"),1);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(sedolv("1234567"),0);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(sedolv("B0YBKL9"),1);
+}
+
+#[test]
+fn test_ex4() {
+ assert_eq!(sedolv("A0ZBKL9"),0);
+}
+
+#[test]
+fn test_ex5() {
+ assert_eq!(sedolv("B2YBIL9"),0);
+}
+
+fn sedolv(sedol: &str) -> u8 {
+ if sedol.len() != 7 {
+ return 0;
+ }
+ let w=vec![1,3,1,7,3,9,1].into_iter();
+ let mut s=0;
+ let j=w.zip(sedol.chars().into_iter());
+ for x in j {
+ let n;
+ if x.1.is_digit(10) ||
+ (x.1.is_ascii_alphabetic() && x.1.is_ascii_uppercase() &&
+ x.1 != 'A' && x.1 != 'E' && x.1 != 'I' &&
+ x.1 != 'O' && x.1 != 'U') {
+ n=x.1.to_digit(36).unwrap();
+ } else {
+ return 0;
+ }
+ s += n*x.0;
+ }
+ if s % 10 == 0 {
+ return 1;
+ }
+ 0
+}