diff options
| -rwxr-xr-x | challenge-135/roger-bell-west/perl/ch-1.pl | 24 | ||||
| -rwxr-xr-x | challenge-135/roger-bell-west/perl/ch-2.pl | 36 | ||||
| -rw-r--r-- | challenge-135/roger-bell-west/postscript/ch-1.ps | 25 | ||||
| -rw-r--r-- | challenge-135/roger-bell-west/postscript/ch-2.ps | 38 | ||||
| -rwxr-xr-x | challenge-135/roger-bell-west/python/ch-1.py | 29 | ||||
| -rwxr-xr-x | challenge-135/roger-bell-west/python/ch-2.py | 40 | ||||
| -rwxr-xr-x | challenge-135/roger-bell-west/raku/ch-1.p6 | 23 | ||||
| -rwxr-xr-x | challenge-135/roger-bell-west/raku/ch-2.p6 | 35 | ||||
| -rwxr-xr-x | challenge-135/roger-bell-west/ruby/ch-1.rb | 35 | ||||
| -rwxr-xr-x | challenge-135/roger-bell-west/ruby/ch-2.rb | 52 | ||||
| -rwxr-xr-x | challenge-135/roger-bell-west/rust/ch-1.rs | 35 | ||||
| -rwxr-xr-x | challenge-135/roger-bell-west/rust/ch-2.rs | 52 |
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 +} |
