aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2024-03-19 14:10:22 +0000
committerRoger Bell_West <roger@firedrake.org>2024-03-19 14:10:22 +0000
commit663fd070fd184f18c959237e2fb40da3553ef307 (patch)
treefa7310b545e93b857a2a99e526003775f4d1b249
parentb91a4623cd4c2b51f779f59b53310a0bd745f03f (diff)
downloadperlweeklychallenge-club-663fd070fd184f18c959237e2fb40da3553ef307.tar.gz
perlweeklychallenge-club-663fd070fd184f18c959237e2fb40da3553ef307.tar.bz2
perlweeklychallenge-club-663fd070fd184f18c959237e2fb40da3553ef307.zip
RogerBW solutions for challenge no. 261
-rwxr-xr-xchallenge-261/roger-bell-west/javascript/ch-1.js42
-rwxr-xr-xchallenge-261/roger-bell-west/javascript/ch-2.js31
-rw-r--r--challenge-261/roger-bell-west/kotlin/ch-1.kt42
-rw-r--r--challenge-261/roger-bell-west/kotlin/ch-2.kt32
-rwxr-xr-xchallenge-261/roger-bell-west/lua/ch-1.lua44
-rwxr-xr-xchallenge-261/roger-bell-west/lua/ch-2.lua35
-rwxr-xr-xchallenge-261/roger-bell-west/perl/ch-1.pl26
-rwxr-xr-xchallenge-261/roger-bell-west/perl/ch-2.pl20
-rw-r--r--challenge-261/roger-bell-west/postscript/ch-1.ps63
-rw-r--r--challenge-261/roger-bell-west/postscript/ch-2.ps65
-rwxr-xr-xchallenge-261/roger-bell-west/python/ch-1.py30
-rwxr-xr-xchallenge-261/roger-bell-west/python/ch-2.py23
-rwxr-xr-xchallenge-261/roger-bell-west/raku/ch-1.p624
-rwxr-xr-xchallenge-261/roger-bell-west/raku/ch-2.p618
-rwxr-xr-xchallenge-261/roger-bell-west/ruby/ch-1.rb37
-rwxr-xr-xchallenge-261/roger-bell-west/ruby/ch-2.rb30
-rwxr-xr-xchallenge-261/roger-bell-west/rust/ch-1.rs36
-rwxr-xr-xchallenge-261/roger-bell-west/rust/ch-2.rs29
-rw-r--r--challenge-261/roger-bell-west/scala/ch-1.scala43
-rw-r--r--challenge-261/roger-bell-west/scala/ch-2.scala32
-rw-r--r--challenge-261/roger-bell-west/tests.yaml52
21 files changed, 754 insertions, 0 deletions
diff --git a/challenge-261/roger-bell-west/javascript/ch-1.js b/challenge-261/roger-bell-west/javascript/ch-1.js
new file mode 100755
index 0000000000..59a8a4e4a6
--- /dev/null
+++ b/challenge-261/roger-bell-west/javascript/ch-1.js
@@ -0,0 +1,42 @@
+#! /usr/bin/node
+
+"use strict"
+
+function elementdigitsum(a) {
+ let delta = 0;
+ for (let n0 of a) {
+ let n = Math.floor(n0 / 10);
+ let m = 10;
+ while (n > 0) {
+ delta += (n % 10) * (m - 1);
+ n = Math.floor(n / 10);
+ m *= 10;
+ }
+ }
+ return delta;
+}
+
+if (elementdigitsum([1, 2, 3, 45]) == 36) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (elementdigitsum([1, 12, 3]) == 9) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (elementdigitsum([1, 2, 3, 4]) == 0) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (elementdigitsum([236, 416, 336, 350]) == 1296) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-261/roger-bell-west/javascript/ch-2.js b/challenge-261/roger-bell-west/javascript/ch-2.js
new file mode 100755
index 0000000000..e86a5024f0
--- /dev/null
+++ b/challenge-261/roger-bell-west/javascript/ch-2.js
@@ -0,0 +1,31 @@
+#! /usr/bin/node
+
+"use strict"
+
+function multiplybytwo(a, start) {
+ const p = new Set(a);
+ let v = start;
+ while (p.has(v)) {
+ v *= 2;
+ }
+ return v;
+}
+
+if (multiplybytwo([5, 3, 6, 1, 12], 3) == 24) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (multiplybytwo([1, 2, 4, 3], 1) == 8) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (multiplybytwo([5, 6, 7], 2) == 2) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-261/roger-bell-west/kotlin/ch-1.kt b/challenge-261/roger-bell-west/kotlin/ch-1.kt
new file mode 100644
index 0000000000..de87955b33
--- /dev/null
+++ b/challenge-261/roger-bell-west/kotlin/ch-1.kt
@@ -0,0 +1,42 @@
+fun elementdigitsum(a: List<Int>): Int {
+ var delta = 0
+ for (n0 in a) {
+ var n = n0 / 10
+ var m = 10
+ while (n > 0) {
+ delta += (n % 10) * (m - 1)
+ n /= 10
+ m *= 10
+ }
+ }
+ return delta
+}
+
+fun main() {
+
+ if (elementdigitsum(listOf(1, 2, 3, 45)) == 36) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (elementdigitsum(listOf(1, 12, 3)) == 9) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (elementdigitsum(listOf(1, 2, 3, 4)) == 0) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (elementdigitsum(listOf(236, 416, 336, 350)) == 1296) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-261/roger-bell-west/kotlin/ch-2.kt b/challenge-261/roger-bell-west/kotlin/ch-2.kt
new file mode 100644
index 0000000000..e53ba7ac07
--- /dev/null
+++ b/challenge-261/roger-bell-west/kotlin/ch-2.kt
@@ -0,0 +1,32 @@
+
+fun multiplybytwo(a: List<Int>, start: Int): Int {
+ val p = a.toSet()
+ var v = start
+ while (p.contains(v)) {
+ v *= 2
+ }
+ return v
+}
+
+fun main() {
+
+ if (multiplybytwo(listOf(5, 3, 6, 1, 12), 3) == 24) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (multiplybytwo(listOf(1, 2, 4, 3), 1) == 8) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (multiplybytwo(listOf(5, 6, 7), 2) == 2) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-261/roger-bell-west/lua/ch-1.lua b/challenge-261/roger-bell-west/lua/ch-1.lua
new file mode 100755
index 0000000000..a5f862e831
--- /dev/null
+++ b/challenge-261/roger-bell-west/lua/ch-1.lua
@@ -0,0 +1,44 @@
+#! /usr/bin/lua
+
+function elementdigitsum(a)
+ local delta = 0
+ for _, n0 in ipairs(a) do
+ local n = n0 // 10
+ local m = 10
+ while n > 0 do
+ delta = delta + (n % 10) * (m - 1)
+ n = n // 10
+ m = m * 10
+ end
+ end
+ return delta
+end
+
+if elementdigitsum({1, 2, 3, 45}) == 36 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if elementdigitsum({1, 12, 3}) == 9 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if elementdigitsum({1, 2, 3, 4}) == 0 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if elementdigitsum({236, 416, 336, 350}) == 1296 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-261/roger-bell-west/lua/ch-2.lua b/challenge-261/roger-bell-west/lua/ch-2.lua
new file mode 100755
index 0000000000..a9a4a6092a
--- /dev/null
+++ b/challenge-261/roger-bell-west/lua/ch-2.lua
@@ -0,0 +1,35 @@
+#! /usr/bin/lua
+
+function multiplybytwo(a, start)
+ local p = {}
+ for _, v in ipairs(a) do
+ p[v] = true
+ end
+ local v = start
+ while p[v] ~= nil do
+ v = v * 2
+ end
+ return v
+end
+
+if multiplybytwo({5, 3, 6, 1, 12}, 3) == 24 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if multiplybytwo({1, 2, 4, 3}, 1) == 8 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if multiplybytwo({5, 6, 7}, 2) == 2 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-261/roger-bell-west/perl/ch-1.pl b/challenge-261/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..0d79e8c19c
--- /dev/null
+++ b/challenge-261/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,26 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 4;
+
+is(elementdigitsum([1, 2, 3, 45]), 36, 'example 1');
+is(elementdigitsum([1, 12, 3]), 9, 'example 2');
+is(elementdigitsum([1, 2, 3, 4]), 0, 'example 3');
+is(elementdigitsum([236, 416, 336, 350]), 1296, 'example 4');
+
+sub elementdigitsum($a) {
+ my $delta = 0;
+ foreach my $n0 (@{$a}) {
+ my $n= int($n0 / 10);
+ my $m = 10;
+ while ($n > 0) {
+ $delta += ($n % 10) * ($m - 1);
+ $n = int($n / 10);
+ $m *= 10;
+ }
+ }
+ return $delta;
+}
diff --git a/challenge-261/roger-bell-west/perl/ch-2.pl b/challenge-261/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..292dff0ddd
--- /dev/null
+++ b/challenge-261/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,20 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 3;
+
+is(multiplybytwo([5, 3, 6, 1, 12], 3), 24, 'example 1');
+is(multiplybytwo([1, 2, 4, 3], 1), 8, 'example 2');
+is(multiplybytwo([5, 6, 7], 2), 2, 'example 3');
+
+sub multiplybytwo($a, $start) {
+ my %p = map {$_ => 1} @{$a};
+ my $v = $start;
+ while (exists $p{$v}) {
+ $v *= 2;
+ }
+ return $v;
+}
diff --git a/challenge-261/roger-bell-west/postscript/ch-1.ps b/challenge-261/roger-bell-west/postscript/ch-1.ps
new file mode 100644
index 0000000000..6dde0d5f96
--- /dev/null
+++ b/challenge-261/roger-bell-west/postscript/ch-1.ps
@@ -0,0 +1,63 @@
+%!PS
+
+% begin included library code
+% see https://codeberg.org/Firedrake/postscript-libraries/
+/test.start {
+ print (:) print
+ /test.pass 0 def
+ /test.count 0 def
+} bind def
+
+/test.end {
+ ( ) print
+ test.count 0 gt {
+ (Passed ) print
+ test.pass (...) cvs print
+ (/) print
+ test.count (...) cvs print
+ ( \() print
+ test.pass 100 mul test.count idiv (...) cvs print
+ (%\)) print
+ (\r\n) print
+ } if
+} bind def
+
+/test {
+ /test.count test.count 1 add def
+ {
+ /test.pass test.pass 1 add def
+ } {
+ ( ) print
+ test.count (....) cvs print
+ (-fail) print
+ } ifelse
+} bind def
+
+
+% end included library code
+
+/elementdigitsum {
+ 0 dict begin
+ 0 exch
+ {
+ /n exch 10 idiv def
+ /m 10 def
+ {
+ n 0 le {
+ exit
+ } if
+ /digit n 10 mod def
+ /n n 10 idiv def
+ digit m 1 sub mul add
+ /m m 10 mul def
+ } loop
+ } forall
+ end
+} bind def
+
+(elementdigitsum) test.start
+[1 2 3 45] elementdigitsum 36 eq test
+[1 12 3] elementdigitsum 9 eq test
+[1 2 3 4] elementdigitsum 0 eq test
+[236 416 336 350] elementdigitsum 1296 eq test
+test.end
diff --git a/challenge-261/roger-bell-west/postscript/ch-2.ps b/challenge-261/roger-bell-west/postscript/ch-2.ps
new file mode 100644
index 0000000000..cce8a4537b
--- /dev/null
+++ b/challenge-261/roger-bell-west/postscript/ch-2.ps
@@ -0,0 +1,65 @@
+%!PS
+
+% begin included library code
+% see https://codeberg.org/Firedrake/postscript-libraries/
+/test {
+ /test.count test.count 1 add def
+ {
+ /test.pass test.pass 1 add def
+ } {
+ ( ) print
+ test.count (....) cvs print
+ (-fail) print
+ } ifelse
+} bind def
+
+/test.start {
+ print (:) print
+ /test.pass 0 def
+ /test.count 0 def
+} bind def
+
+/toset { % array -> dict of (value, true)
+ << exch
+ {
+ true
+ } forall
+ >>
+} bind def
+
+/test.end {
+ ( ) print
+ test.count 0 gt {
+ (Passed ) print
+ test.pass (...) cvs print
+ (/) print
+ test.count (...) cvs print
+ ( \() print
+ test.pass 100 mul test.count idiv (...) cvs print
+ (%\)) print
+ (\r\n) print
+ } if
+} bind def
+
+
+% end included library code
+
+/multiplybytwo {
+ 0 dict begin
+ exch
+ /p exch toset def
+ {
+ dup p exch known {
+ 2 mul
+ } {
+ exit
+ } ifelse
+ } loop
+ end
+} bind def
+
+(multiplybytwo) test.start
+[5 3 6 1 12] 3 multiplybytwo 24 eq test
+[1 2 4 3] 1 multiplybytwo 8 eq test
+[5 6 7] 2 multiplybytwo 2 eq test
+test.end
diff --git a/challenge-261/roger-bell-west/python/ch-1.py b/challenge-261/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..a1353f2bad
--- /dev/null
+++ b/challenge-261/roger-bell-west/python/ch-1.py
@@ -0,0 +1,30 @@
+#! /usr/bin/python3
+
+def elementdigitsum(a):
+ delta = 0
+ for n0 in a:
+ n = n0 // 10
+ m = 10
+ while n > 0:
+ delta += (n % 10) * (m - 1)
+ n //= 10
+ m *= 10
+ return delta
+
+import unittest
+
+class TestElementdigitsum(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(elementdigitsum([1, 2, 3, 45]), 36, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(elementdigitsum([1, 12, 3]), 9, 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(elementdigitsum([1, 2, 3, 4]), 0, 'example 3')
+
+ def test_ex4(self):
+ self.assertEqual(elementdigitsum([236, 416, 336, 350]), 1296, 'example 4')
+
+unittest.main()
diff --git a/challenge-261/roger-bell-west/python/ch-2.py b/challenge-261/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..7bdbaa66ef
--- /dev/null
+++ b/challenge-261/roger-bell-west/python/ch-2.py
@@ -0,0 +1,23 @@
+#! /usr/bin/python3
+
+def multiplybytwo(a, start):
+ p = set(a)
+ v = start
+ while v in p:
+ v *= 2
+ return v
+
+import unittest
+
+class TestMultiplybytwo(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(multiplybytwo([5, 3, 6, 1, 12], 3), 24, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(multiplybytwo([1, 2, 4, 3], 1), 8, 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(multiplybytwo([5, 6, 7], 2), 2, 'example 3')
+
+unittest.main()
diff --git a/challenge-261/roger-bell-west/raku/ch-1.p6 b/challenge-261/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..12ba1f04fc
--- /dev/null
+++ b/challenge-261/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,24 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 4;
+
+is(elementdigitsum([1, 2, 3, 45]), 36, 'example 1');
+is(elementdigitsum([1, 12, 3]), 9, 'example 2');
+is(elementdigitsum([1, 2, 3, 4]), 0, 'example 3');
+is(elementdigitsum([236, 416, 336, 350]), 1296, 'example 4');
+
+sub elementdigitsum(@a) {
+ my $delta = 0;
+ for @a -> $n0 {
+ my $n = $n0 div 10;
+ my $m = 10;
+ while ($n > 0) {
+ $delta += ($n % 10) * ($m - 1);
+ $n = $n div 10;
+ $m *= 10;
+ }
+ }
+ return $delta;
+}
diff --git a/challenge-261/roger-bell-west/raku/ch-2.p6 b/challenge-261/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..063856d4bd
--- /dev/null
+++ b/challenge-261/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,18 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 3;
+
+is(multiplybytwo([5, 3, 6, 1, 12], 3), 24, 'example 1');
+is(multiplybytwo([1, 2, 4, 3], 1), 8, 'example 2');
+is(multiplybytwo([5, 6, 7], 2), 2, 'example 3');
+
+sub multiplybytwo(@a, $start) {
+ my %p = Set(@a);
+ my $v = $start;
+ while (%p{$v}:exists) {
+ $v *= 2;
+ }
+ return $v;
+}
diff --git a/challenge-261/roger-bell-west/ruby/ch-1.rb b/challenge-261/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..4248d92429
--- /dev/null
+++ b/challenge-261/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,37 @@
+#! /usr/bin/ruby
+
+def elementdigitsum(a)
+ delta = 0
+ a.each do |n0|
+ n = n0.div(10)
+ m = 10
+ while n > 0 do
+ n, digit = n.divmod(10)
+ delta += digit * (m - 1)
+ m *= 10
+ end
+ end
+ return delta
+end
+
+require 'test/unit'
+
+class TestElementdigitsum < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(36, elementdigitsum([1, 2, 3, 45]))
+ end
+
+ def test_ex2
+ assert_equal(9, elementdigitsum([1, 12, 3]))
+ end
+
+ def test_ex3
+ assert_equal(0, elementdigitsum([1, 2, 3, 4]))
+ end
+
+ def test_ex4
+ assert_equal(1296, elementdigitsum([236, 416, 336, 350]))
+ end
+
+end
diff --git a/challenge-261/roger-bell-west/ruby/ch-2.rb b/challenge-261/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..1fc43b3733
--- /dev/null
+++ b/challenge-261/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,30 @@
+#! /usr/bin/ruby
+
+require 'set'
+
+def multiplybytwo(a, start)
+ p = Set.new(a)
+ v = start
+ while p.include?(v) do
+ v *= 2
+ end
+ return v
+end
+
+require 'test/unit'
+
+class TestMultiplybytwo < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(24, multiplybytwo([5, 3, 6, 1, 12], 3))
+ end
+
+ def test_ex2
+ assert_equal(8, multiplybytwo([1, 2, 4, 3], 1))
+ end
+
+ def test_ex3
+ assert_equal(2, multiplybytwo([5, 6, 7], 2))
+ end
+
+end
diff --git a/challenge-261/roger-bell-west/rust/ch-1.rs b/challenge-261/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..f24470d00e
--- /dev/null
+++ b/challenge-261/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,36 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x --nocapture; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(elementdigitsum(vec![1, 2, 3, 45]), 36);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(elementdigitsum(vec![1, 12, 3]), 9);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(elementdigitsum(vec![1, 2, 3, 4]), 0);
+}
+
+#[test]
+fn test_ex4() {
+ assert_eq!(elementdigitsum(vec![236, 416, 336, 350]), 1296);
+}
+
+fn elementdigitsum(a: Vec<u32>) -> u32 {
+ let mut delta = 0;
+ for n0 in a {
+ let mut n = n0 / 10;
+ let mut m = 10;
+ while n > 0 {
+ delta += (n % 10) * (m - 1);
+ n /= 10;
+ m *= 10;
+ }
+ }
+ delta
+}
diff --git a/challenge-261/roger-bell-west/rust/ch-2.rs b/challenge-261/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..b20ababdf8
--- /dev/null
+++ b/challenge-261/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,29 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x --nocapture; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(multiplybytwo(vec![5, 3, 6, 1, 12], 3), 24);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(multiplybytwo(vec![1, 2, 4, 3], 1), 8);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(multiplybytwo(vec![5, 6, 7], 2), 2);
+}
+
+use std::collections::HashSet;
+use std::iter::FromIterator;
+
+fn multiplybytwo(a: Vec<u32>, start: u32) -> u32 {
+ let p: HashSet<u32> = HashSet::from_iter(a);
+ let mut v = start;
+ while p.contains(&v) {
+ v *= 2;
+ }
+ v
+}
diff --git a/challenge-261/roger-bell-west/scala/ch-1.scala b/challenge-261/roger-bell-west/scala/ch-1.scala
new file mode 100644
index 0000000000..ea97dd0ff0
--- /dev/null
+++ b/challenge-261/roger-bell-west/scala/ch-1.scala
@@ -0,0 +1,43 @@
+
+object Elementdigitsum {
+ def elementdigitsum(a: List[Int]): Int = {
+ var delta = 0
+ for (n0 <- a) {
+ var n = n0 / 10
+ var m = 10
+ while (n > 0) {
+ delta += (n % 10) * (m - 1)
+ n /= 10
+ m *= 10
+ }
+ }
+ delta
+ }
+ def main(args: Array[String]) {
+ if (elementdigitsum(List(1, 2, 3, 45)) == 36) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (elementdigitsum(List(1, 12, 3)) == 9) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (elementdigitsum(List(1, 2, 3, 4)) == 0) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (elementdigitsum(List(236, 416, 336, 350)) == 1296) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+ }
+}
diff --git a/challenge-261/roger-bell-west/scala/ch-2.scala b/challenge-261/roger-bell-west/scala/ch-2.scala
new file mode 100644
index 0000000000..c486f6233c
--- /dev/null
+++ b/challenge-261/roger-bell-west/scala/ch-2.scala
@@ -0,0 +1,32 @@
+
+object Multiplybytwo {
+ def multiplybytwo(a: List[Int], start: Int): Int = {
+ val p = a.toSet
+ var v = start
+ while (p.contains(v)) {
+ v *= 2
+ }
+ v
+ }
+ def main(args: Array[String]) {
+ if (multiplybytwo(List(5, 3, 6, 1, 12), 3) == 24) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (multiplybytwo(List(1, 2, 4, 3), 1) == 8) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (multiplybytwo(List(5, 6, 7), 2) == 2) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+ }
+}
diff --git a/challenge-261/roger-bell-west/tests.yaml b/challenge-261/roger-bell-west/tests.yaml
new file mode 100644
index 0000000000..be63f8b908
--- /dev/null
+++ b/challenge-261/roger-bell-west/tests.yaml
@@ -0,0 +1,52 @@
+---
+ch-1:
+ - function: elementdigitsum
+ arguments:
+ - 1
+ - 2
+ - 3
+ - 45
+ result: 36
+ - arguments:
+ - 1
+ - 12
+ - 3
+ result: 9
+ - arguments:
+ - 1
+ - 2
+ - 3
+ - 4
+ result: 0
+ - arguments:
+ - 236
+ - 416
+ - 336
+ - 350
+ result: 1296
+ch-2:
+ - function: multiplybytwo
+ multiarg: true
+ arguments:
+ - - 5
+ - 3
+ - 6
+ - 1
+ - 12
+ - 3
+ result: 24
+ - multiarg: true
+ arguments:
+ - - 1
+ - 2
+ - 4
+ - 3
+ - 1
+ result: 8
+ - multiarg: true
+ arguments:
+ - - 5
+ - 6
+ - 7
+ - 2
+ result: 2