aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2024-02-27 08:25:42 +0000
committerRoger Bell_West <roger@firedrake.org>2024-02-27 08:25:42 +0000
commit38de97ad51e196b9cc76a803bc3600f45c8615b4 (patch)
tree048dc86bd4c0cfa549db5617f3a76d59da300d71
parent4416b8cd33659c6d380e3ea2c5b3e21e4a861a99 (diff)
downloadperlweeklychallenge-club-38de97ad51e196b9cc76a803bc3600f45c8615b4.tar.gz
perlweeklychallenge-club-38de97ad51e196b9cc76a803bc3600f45c8615b4.tar.bz2
perlweeklychallenge-club-38de97ad51e196b9cc76a803bc3600f45c8615b4.zip
RogerBW solutions for challenge no. 258
-rwxr-xr-xchallenge-258/roger-bell-west/javascript/ch-1.js38
-rwxr-xr-xchallenge-258/roger-bell-west/javascript/ch-2.js44
-rw-r--r--challenge-258/roger-bell-west/kotlin/ch-1.kt38
-rw-r--r--challenge-258/roger-bell-west/kotlin/ch-2.kt44
-rwxr-xr-xchallenge-258/roger-bell-west/lua/ch-1.lua39
-rwxr-xr-xchallenge-258/roger-bell-west/lua/ch-2.lua43
-rwxr-xr-xchallenge-258/roger-bell-west/perl/ch-1.pl27
-rwxr-xr-xchallenge-258/roger-bell-west/perl/ch-2.pl30
-rw-r--r--challenge-258/roger-bell-west/postscript/ch-1.ps63
-rw-r--r--challenge-258/roger-bell-west/postscript/ch-2.ps105
-rwxr-xr-xchallenge-258/roger-bell-west/python/ch-1.py28
-rwxr-xr-xchallenge-258/roger-bell-west/python/ch-2.py19
-rwxr-xr-xchallenge-258/roger-bell-west/raku/ch-1.p625
-rwxr-xr-xchallenge-258/roger-bell-west/raku/ch-2.p625
-rwxr-xr-xchallenge-258/roger-bell-west/ruby/ch-1.rb35
-rwxr-xr-xchallenge-258/roger-bell-west/ruby/ch-2.rb39
-rwxr-xr-xchallenge-258/roger-bell-west/rust/ch-1.rs33
-rwxr-xr-xchallenge-258/roger-bell-west/rust/ch-2.rs25
-rw-r--r--challenge-258/roger-bell-west/scala/ch-1.scala39
-rw-r--r--challenge-258/roger-bell-west/scala/ch-2.scala44
-rw-r--r--challenge-258/roger-bell-west/tests.yaml50
21 files changed, 833 insertions, 0 deletions
diff --git a/challenge-258/roger-bell-west/javascript/ch-1.js b/challenge-258/roger-bell-west/javascript/ch-1.js
new file mode 100755
index 0000000000..fb9668f84d
--- /dev/null
+++ b/challenge-258/roger-bell-west/javascript/ch-1.js
@@ -0,0 +1,38 @@
+#! /usr/bin/node
+
+"use strict"
+
+function countevendigitsnumber(a) {
+ let t = 0;
+ for (let p of a) {
+ let even = false;
+ let pt = p;
+ while (pt >= 10) {
+ pt = Math.floor(pt / 10);
+ even = !even;
+ }
+ if (even) {
+ t += 1;
+ }
+ }
+ return t;
+}
+
+if (countevendigitsnumber([10, 1, 111, 24, 1000]) == 3) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (countevendigitsnumber([111, 1, 11111]) == 0) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (countevendigitsnumber([2, 8, 1024, 256]) == 1) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-258/roger-bell-west/javascript/ch-2.js b/challenge-258/roger-bell-west/javascript/ch-2.js
new file mode 100755
index 0000000000..a065cb06f6
--- /dev/null
+++ b/challenge-258/roger-bell-west/javascript/ch-2.js
@@ -0,0 +1,44 @@
+#! /usr/bin/node
+
+"use strict"
+
+function popcount64(x0) {
+ const M1 = 0x5555555555555555n;
+ const M2 = 0x3333333333333333n;
+ const M4 = 0x0f0f0f0f0f0f0f0fn;
+ const H01 = 0x0101010101010101n;
+ let x = BigInt(x0);
+ x -= (x >> 1n) & M1;
+ x = (x & M2) + ((x >> 2n) & M2);
+ x = (x + (x >> 4n)) & M4;
+ return Number((x * H01) >> 56n);
+}
+
+function sumofvalues(a, k) {
+ let s = 0;
+ a.forEach((v, i) => {
+ if (popcount64(i) == k) {
+ s += v;
+ }
+ });
+ return s;
+}
+
+if (sumofvalues([2, 5, 9, 11, 3], 1) == 17) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (sumofvalues([2, 5, 9, 11, 3], 2) == 11) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (sumofvalues([2, 5, 9, 11, 3], 0) == 2) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-258/roger-bell-west/kotlin/ch-1.kt b/challenge-258/roger-bell-west/kotlin/ch-1.kt
new file mode 100644
index 0000000000..7c43251e88
--- /dev/null
+++ b/challenge-258/roger-bell-west/kotlin/ch-1.kt
@@ -0,0 +1,38 @@
+fun countevendigitsnumber(a: List<Int>): Int {
+ var t = 0
+ for (p in a) {
+ var even = false
+ var pt = p
+ while (pt >= 10) {
+ pt /= 10
+ even = !even
+ }
+ if (even) {
+ t += 1
+ }
+ }
+ return t
+}
+
+fun main() {
+
+ if (countevendigitsnumber(listOf(10, 1, 111, 24, 1000)) == 3) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (countevendigitsnumber(listOf(111, 1, 11111)) == 0) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (countevendigitsnumber(listOf(2, 8, 1024, 256)) == 1) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-258/roger-bell-west/kotlin/ch-2.kt b/challenge-258/roger-bell-west/kotlin/ch-2.kt
new file mode 100644
index 0000000000..fb9aa8525c
--- /dev/null
+++ b/challenge-258/roger-bell-west/kotlin/ch-2.kt
@@ -0,0 +1,44 @@
+fun popcount64(x0: Int): Int {
+ val M1 = 0x5555555555555555
+ val M2 = 0x3333333333333333
+ val M4 = 0x0f0f0f0f0f0f0f0f
+ val H01 = 0x0101010101010101
+ var x = x0.toLong()
+ x -= (x shr 1) and M1
+ x = (x and M2) + ((x shr 2) and M2)
+ x = (x + (x shr 4)) and M4
+ return ((x * H01) shr 56).toInt()
+}
+
+fun sumofvalues(a: List<Int>, k: Int ): Int {
+ var s = 0
+ for ((i, v) in a.withIndex()) {
+ if (popcount64(i) == k) {
+ s += v
+ }
+ }
+ return s
+}
+
+fun main() {
+
+ if (sumofvalues(listOf(2, 5, 9, 11, 3), 1) == 17) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (sumofvalues(listOf(2, 5, 9, 11, 3), 2) == 11) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (sumofvalues(listOf(2, 5, 9, 11, 3), 0) == 2) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-258/roger-bell-west/lua/ch-1.lua b/challenge-258/roger-bell-west/lua/ch-1.lua
new file mode 100755
index 0000000000..0108ca1cd6
--- /dev/null
+++ b/challenge-258/roger-bell-west/lua/ch-1.lua
@@ -0,0 +1,39 @@
+#! /usr/bin/lua
+
+function countevendigitsnumber(a)
+ local t = 0
+ for _, p in ipairs(a) do
+ local even = false
+ local pt = p
+ while pt >= 10 do
+ pt = math.floor(pt / 10)
+ even = not even
+ end
+ if even then
+ t = t + 1
+ end
+ end
+ return t
+end
+
+if countevendigitsnumber({10, 1, 111, 24, 1000}) == 3 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if countevendigitsnumber({111, 1, 11111}) == 0 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if countevendigitsnumber({2, 8, 1024, 256}) == 1 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-258/roger-bell-west/lua/ch-2.lua b/challenge-258/roger-bell-west/lua/ch-2.lua
new file mode 100755
index 0000000000..5ef929d61e
--- /dev/null
+++ b/challenge-258/roger-bell-west/lua/ch-2.lua
@@ -0,0 +1,43 @@
+#! /usr/bin/lua
+
+function popcount(x0) -- adapted from https://gist.github.com/davidm/2065267
+ local x = x0
+ local c = 0
+ while x ~= 0 do
+ x = x & (x - 1)
+ c = c + 1
+ end
+ return c
+end
+
+function sumofvalues(a, k)
+ local s = 0
+ for i, v in ipairs(a) do
+ if popcount(i - 1) == k then
+ s = s + v
+ end
+ end
+ return s
+end
+
+if sumofvalues({2, 5, 9, 11, 3}, 1) == 17 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if sumofvalues({2, 5, 9, 11, 3}, 2) == 11 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if sumofvalues({2, 5, 9, 11, 3}, 0) == 2 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-258/roger-bell-west/perl/ch-1.pl b/challenge-258/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..bb538ea72f
--- /dev/null
+++ b/challenge-258/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,27 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 3;
+
+is(countevendigitsnumber([10, 1, 111, 24, 1000]), 3, 'example 1');
+is(countevendigitsnumber([111, 1, 11111]), 0, 'example 2');
+is(countevendigitsnumber([2, 8, 1024, 256]), 1, 'example 3');
+
+sub countevendigitsnumber($a) {
+ my $t = 0;
+ foreach my $p (@{$a}) {
+ my $even = 0;
+ my $pt = $p;
+ while ($pt >= 10) {
+ $pt = int($pt / 10);
+ $even = !$even;
+ }
+ if ($even) {
+ $t += 1;
+ }
+ }
+ return $t;
+}
diff --git a/challenge-258/roger-bell-west/perl/ch-2.pl b/challenge-258/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..02c9f0f763
--- /dev/null
+++ b/challenge-258/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,30 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 3;
+
+is(sumofvalues([2, 5, 9, 11, 3], 1), 17, 'example 1');
+is(sumofvalues([2, 5, 9, 11, 3], 2), 11, 'example 2');
+is(sumofvalues([2, 5, 9, 11, 3], 0), 2, 'example 3');
+
+use List::Util qw(sum);
+
+sub popcount64($x0) {
+ no warnings 'portable';
+ use constant M1 => 0x5555555555555555;
+ use constant M2 => 0x3333333333333333;
+ use constant M4 => 0x0f0f0f0f0f0f0f0f;
+ use constant H01 => 0x0101010101010101;
+ my $x = $x0;
+ $x -= ($x >> 1) & M1;
+ $x = ($x & M2) + (($x >> 2) & M2);
+ $x = ($x + ($x >> 4)) & M4;
+ return ($x * H01) >> 56;
+}
+
+sub sumofvalues($a, $k) {
+ return sum(map {$a->[$_]} grep {popcount64($_) == $k} (0 .. $#{$a}));
+}
diff --git a/challenge-258/roger-bell-west/postscript/ch-1.ps b/challenge-258/roger-bell-west/postscript/ch-1.ps
new file mode 100644
index 0000000000..b3659dce9e
--- /dev/null
+++ b/challenge-258/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
+
+/countevendigitsnumber {
+ 0 dict begin
+ 0 exch
+ {
+ /even false def
+ {
+ dup 10 lt {
+ pop
+ exit
+ } if
+ /even even not def
+ 10 idiv
+ } loop
+ even {
+ 1 add
+ } if
+ } forall
+ end
+} bind def
+
+(countevendigitsnumber) test.start
+[10 1 111 24 1000] countevendigitsnumber 3 eq test
+[111 1 11111] countevendigitsnumber 0 eq test
+[2 8 1024 256] countevendigitsnumber 1 eq test
+test.end
diff --git a/challenge-258/roger-bell-west/postscript/ch-2.ps b/challenge-258/roger-bell-west/postscript/ch-2.ps
new file mode 100644
index 0000000000..cce155f31f
--- /dev/null
+++ b/challenge-258/roger-bell-west/postscript/ch-2.ps
@@ -0,0 +1,105 @@
+%!PS
+
+% begin included library code
+% see https://codeberg.org/Firedrake/postscript-libraries/
+/map { % array proc -> array
+ 2 dict begin
+ /p exch def
+ [ exch
+ {
+ p
+ } forall
+ ]
+ end
+} 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
+
+/reduce { % array proc -> value
+ 2 dict begin
+ /p exch def
+ /a exch def
+ a 0 get
+ 1 1 a length 1 sub {
+ a exch get
+ p
+ } for
+ end
+} 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
+
+/filter { % array proc(bool) -> array
+ 1 dict begin
+ /p exch def
+ [ exch
+ {
+ dup p not
+ {
+ pop
+ } if
+ } forall
+ ]
+ end
+} bind def
+
+/test.start {
+ print (:) print
+ /test.pass 0 def
+ /test.count 0 def
+} bind def
+
+
+% end included library code
+
+/popcount64 {
+ 0 dict begin
+ /M1 16#5555555555555555 def
+ /M2 16#3333333333333333 def
+ /M4 16#0f0f0f0f0f0f0f0f def
+ /H01 16#0101010101010101 def
+ /x exch def
+ /x x x -1 bitshift M1 and sub def
+ /x x M2 and x -2 bitshift M2 and add def
+ /x x x -4 bitshift add M4 and def
+ x H01 mul -56 bitshift
+ end
+} bind def
+
+/sumofvalues {
+ 0 dict begin
+ /k exch def
+ /a exch def
+ [ 0 1 a length 1 sub { } for ]
+ { popcount64 k eq } filter
+ { a exch get } map
+ { add } reduce
+ end
+} bind def
+
+(sumofvalues) test.start
+[2 5 9 11 3] 1 sumofvalues 17 eq test
+[2 5 9 11 3] 2 sumofvalues 11 eq test
+[2 5 9 11 3] 0 sumofvalues 2 eq test
+test.end
diff --git a/challenge-258/roger-bell-west/python/ch-1.py b/challenge-258/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..376960a976
--- /dev/null
+++ b/challenge-258/roger-bell-west/python/ch-1.py
@@ -0,0 +1,28 @@
+#! /usr/bin/python3
+
+def countevendigitsnumber(a):
+ t = 0
+ for p in a:
+ even = False
+ pt = p
+ while pt >= 10:
+ pt //= 10
+ even = not even
+ if even:
+ t += 1
+ return t
+
+import unittest
+
+class TestCountevendigitsnumber(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(countevendigitsnumber([10, 1, 111, 24, 1000]), 3, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(countevendigitsnumber([111, 1, 11111]), 0, 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(countevendigitsnumber([2, 8, 1024, 256]), 1, 'example 3')
+
+unittest.main()
diff --git a/challenge-258/roger-bell-west/python/ch-2.py b/challenge-258/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..4fdf1cdd21
--- /dev/null
+++ b/challenge-258/roger-bell-west/python/ch-2.py
@@ -0,0 +1,19 @@
+#! /usr/bin/python3
+
+def sumofvalues(a, k):
+ return sum(a[i] for i in range(len(a)) if i.bit_count() == k)
+
+import unittest
+
+class TestSumofvalues(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(sumofvalues([2, 5, 9, 11, 3], 1), 17, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(sumofvalues([2, 5, 9, 11, 3], 2), 11, 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(sumofvalues([2, 5, 9, 11, 3], 0), 2, 'example 3')
+
+unittest.main()
diff --git a/challenge-258/roger-bell-west/raku/ch-1.p6 b/challenge-258/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..e52788fe0f
--- /dev/null
+++ b/challenge-258/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,25 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 3;
+
+is(countevendigitsnumber([10, 1, 111, 24, 1000]), 3, 'example 1');
+is(countevendigitsnumber([111, 1, 11111]), 0, 'example 2');
+is(countevendigitsnumber([2, 8, 1024, 256]), 1, 'example 3');
+
+sub countevendigitsnumber(@a) {
+ my $t = 0;
+ for @a -> $p {
+ my $even = False;
+ my Int $pt = $p;
+ while ($pt >= 10) {
+ $pt div= 10;
+ $even = !$even;
+ }
+ if ($even) {
+ $t += 1;
+ }
+ }
+ return $t;
+}
diff --git a/challenge-258/roger-bell-west/raku/ch-2.p6 b/challenge-258/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..9599728c11
--- /dev/null
+++ b/challenge-258/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,25 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 3;
+
+is(sumofvalues([2, 5, 9, 11, 3], 1), 17, 'example 1');
+is(sumofvalues([2, 5, 9, 11, 3], 2), 11, 'example 2');
+is(sumofvalues([2, 5, 9, 11, 3], 0), 2, 'example 3');
+
+sub popcount64($x0) {
+ constant $M1 = 0x5555555555555555;
+ constant $M2 = 0x3333333333333333;
+ constant $M4 = 0x0f0f0f0f0f0f0f0f;
+ constant $H01 = 0x0101010101010101;
+ my $x = $x0;
+ $x -= ($x +> 1) +& $M1;
+ $x = ($x +& $M2) + (($x +> 2) +& $M2);
+ $x = ($x + ($x +> 4)) +& $M4;
+ return ($x * $H01) +> 56;
+}
+
+sub sumofvalues(@a, $k) {
+ return (0 .. @a.end).grep({popcount64($_) == $k}).map({@a[$_]}).sum;
+}
diff --git a/challenge-258/roger-bell-west/ruby/ch-1.rb b/challenge-258/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..96053ac590
--- /dev/null
+++ b/challenge-258/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,35 @@
+#! /usr/bin/ruby
+
+def countevendigitsnumber(a)
+ t = 0
+ a.each do |p|
+ even = false
+ pt = p
+ while pt >= 10
+ pt = pt.div(10)
+ even = !even
+ end
+ if even then
+ t += 1
+ end
+ end
+ return t
+end
+
+require 'test/unit'
+
+class TestCountevendigitsnumber < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(3, countevendigitsnumber([10, 1, 111, 24, 1000]))
+ end
+
+ def test_ex2
+ assert_equal(0, countevendigitsnumber([111, 1, 11111]))
+ end
+
+ def test_ex3
+ assert_equal(1, countevendigitsnumber([2, 8, 1024, 256]))
+ end
+
+end
diff --git a/challenge-258/roger-bell-west/ruby/ch-2.rb b/challenge-258/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..86a3fd4ac8
--- /dev/null
+++ b/challenge-258/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,39 @@
+#! /usr/bin/ruby
+
+def popcount(x0)
+ x = x0
+ c = 0
+ while x > 0 do
+ x &= x - 1
+ c += 1
+ end
+ return c
+end
+
+def sumofvalues(a, k)
+ s = 0
+ a.each_with_index do |n, i|
+ if popcount(i) == k then
+ s += n
+ end
+ end
+ return s
+end
+
+require 'test/unit'
+
+class TestSumofvalues < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(17, sumofvalues([2, 5, 9, 11, 3], 1))
+ end
+
+ def test_ex2
+ assert_equal(11, sumofvalues([2, 5, 9, 11, 3], 2))
+ end
+
+ def test_ex3
+ assert_equal(2, sumofvalues([2, 5, 9, 11, 3], 0))
+ end
+
+end
diff --git a/challenge-258/roger-bell-west/rust/ch-1.rs b/challenge-258/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..6128ab07aa
--- /dev/null
+++ b/challenge-258/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,33 @@
+#! /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!(countevendigitsnumber(vec![10, 1, 111, 24, 1000]), 3);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(countevendigitsnumber(vec![111, 1, 11111]), 0);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(countevendigitsnumber(vec![2, 8, 1024, 256]), 1);
+}
+
+fn countevendigitsnumber(a: Vec<u32>) -> u32 {
+ let mut t = 0;
+ for p in a {
+ let mut even = false;
+ let mut pt = p;
+ while pt >= 10 {
+ pt /= 10;
+ even = !even;
+ }
+ if even {
+ t += 1;
+ }
+ }
+ t
+}
diff --git a/challenge-258/roger-bell-west/rust/ch-2.rs b/challenge-258/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..35e49874f1
--- /dev/null
+++ b/challenge-258/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,25 @@
+#! /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!(sumofvalues(vec![2, 5, 9, 11, 3], 1), 17);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(sumofvalues(vec![2, 5, 9, 11, 3], 2), 11);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(sumofvalues(vec![2, 5, 9, 11, 3], 0), 2);
+}
+
+fn sumofvalues(a: Vec<u32>, k: u32) -> u32 {
+ a.iter()
+ .enumerate()
+ .filter(|(i, _n)| i.count_ones() == k)
+ .map(|(_i, n)| n)
+ .sum()
+}
diff --git a/challenge-258/roger-bell-west/scala/ch-1.scala b/challenge-258/roger-bell-west/scala/ch-1.scala
new file mode 100644
index 0000000000..a1e4516abb
--- /dev/null
+++ b/challenge-258/roger-bell-west/scala/ch-1.scala
@@ -0,0 +1,39 @@
+
+object Countevendigitsnumber {
+ def countevendigitsnumber(a: List[Int]): Int = {
+ var t = 0
+ for (p <- a) {
+ var even = false
+ var pt = p
+ while (pt >= 10) {
+ pt /= 10
+ even = !even
+ }
+ if (even) {
+ t += 1
+ }
+ }
+ t
+ }
+ def main(args: Array[String]) {
+ if (countevendigitsnumber(List(10, 1, 111, 24, 1000)) == 3) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (countevendigitsnumber(List(111, 1, 11111)) == 0) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (countevendigitsnumber(List(2, 8, 1024, 256)) == 1) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+ }
+}
diff --git a/challenge-258/roger-bell-west/scala/ch-2.scala b/challenge-258/roger-bell-west/scala/ch-2.scala
new file mode 100644
index 0000000000..1410a1ead0
--- /dev/null
+++ b/challenge-258/roger-bell-west/scala/ch-2.scala
@@ -0,0 +1,44 @@
+
+object Sumofvalues {
+ def popcount64(x0: Int): Int = {
+ val M1 = 0x5555555555555555L
+ val M2 = 0x3333333333333333L
+ val M4 = 0x0f0f0f0f0f0f0f0fL
+ val H01 = 0x0101010101010101L
+ var x = x0.toLong
+ x -= (x >> 1) & M1
+ x = (x & M2) + ((x >> 2) & M2)
+ x = (x + (x >> 4)) & M4
+ return ((x * H01) >> 56).toInt
+ }
+ def sumofvalues(a: List[Int], k: Int ): Int = {
+ var s = 0
+ for ((v, i) <- a.zipWithIndex) {
+ if (popcount64(i) == k) {
+ s += v
+ }
+ }
+ s
+ }
+ def main(args: Array[String]) {
+ if (sumofvalues(List(2, 5, 9, 11, 3), 1) == 17) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (sumofvalues(List(2, 5, 9, 11, 3), 2) == 11) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (sumofvalues(List(2, 5, 9, 11, 3), 0) == 2) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+ }
+}
diff --git a/challenge-258/roger-bell-west/tests.yaml b/challenge-258/roger-bell-west/tests.yaml
new file mode 100644
index 0000000000..94fa19769c
--- /dev/null
+++ b/challenge-258/roger-bell-west/tests.yaml
@@ -0,0 +1,50 @@
+---
+ch-1:
+ - function: countevendigitsnumber
+ arguments:
+ - 10
+ - 1
+ - 111
+ - 24
+ - 1000
+ result: 3
+ - arguments:
+ - 111
+ - 1
+ - 11111
+ result: 0
+ - arguments:
+ - 2
+ - 8
+ - 1024
+ - 256
+ result: 1
+ch-2:
+ - function: sumofvalues
+ multiarg: true
+ arguments:
+ - - 2
+ - 5
+ - 9
+ - 11
+ - 3
+ - 1
+ result: 17
+ - multiarg: true
+ arguments:
+ - - 2
+ - 5
+ - 9
+ - 11
+ - 3
+ - 2
+ result: 11
+ - multiarg: true
+ arguments:
+ - - 2
+ - 5
+ - 9
+ - 11
+ - 3
+ - 0
+ result: 2