aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2024-02-13 11:37:42 +0000
committerRoger Bell_West <roger@firedrake.org>2024-02-13 11:37:42 +0000
commitf406bb878bbbfa00276a10275537fac95d575cb2 (patch)
treee306d92b53c31d896d1ce7a48fd9c55588673c7d
parentcf85316a8c5fc284a6cafd1493719f9ec8c42d3e (diff)
downloadperlweeklychallenge-club-f406bb878bbbfa00276a10275537fac95d575cb2.tar.gz
perlweeklychallenge-club-f406bb878bbbfa00276a10275537fac95d575cb2.tar.bz2
perlweeklychallenge-club-f406bb878bbbfa00276a10275537fac95d575cb2.zip
RogerBW solutions for challenge no. 256
-rwxr-xr-xchallenge-256/roger-bell-west/javascript/ch-1.js36
-rwxr-xr-xchallenge-256/roger-bell-west/javascript/ch-2.js35
-rw-r--r--challenge-256/roger-bell-west/kotlin/ch-1.kt36
-rw-r--r--challenge-256/roger-bell-west/kotlin/ch-2.kt37
-rwxr-xr-xchallenge-256/roger-bell-west/lua/ch-1.lua37
-rwxr-xr-xchallenge-256/roger-bell-west/lua/ch-2.lua36
-rwxr-xr-xchallenge-256/roger-bell-west/perl/ch-1.pl25
-rwxr-xr-xchallenge-256/roger-bell-west/perl/ch-2.pl28
-rw-r--r--challenge-256/roger-bell-west/postscript/ch-1.ps87
-rw-r--r--challenge-256/roger-bell-west/postscript/ch-2.ps72
-rwxr-xr-xchallenge-256/roger-bell-west/python/ch-1.py27
-rwxr-xr-xchallenge-256/roger-bell-west/python/ch-2.py25
-rwxr-xr-xchallenge-256/roger-bell-west/raku/ch-1.p623
-rwxr-xr-xchallenge-256/roger-bell-west/raku/ch-2.p624
-rwxr-xr-xchallenge-256/roger-bell-west/ruby/ch-1.rb35
-rwxr-xr-xchallenge-256/roger-bell-west/ruby/ch-2.rb34
-rwxr-xr-xchallenge-256/roger-bell-west/rust/ch-1.rs33
-rwxr-xr-xchallenge-256/roger-bell-west/rust/ch-2.rs34
-rw-r--r--challenge-256/roger-bell-west/scala/ch-1.scala38
-rw-r--r--challenge-256/roger-bell-west/scala/ch-2.scala36
-rw-r--r--challenge-256/roger-bell-west/tests.yaml40
21 files changed, 778 insertions, 0 deletions
diff --git a/challenge-256/roger-bell-west/javascript/ch-1.js b/challenge-256/roger-bell-west/javascript/ch-1.js
new file mode 100755
index 0000000000..487faea806
--- /dev/null
+++ b/challenge-256/roger-bell-west/javascript/ch-1.js
@@ -0,0 +1,36 @@
+#! /usr/bin/node
+
+"use strict"
+
+function maximumpairs(a) {
+ let n = 0;
+ let r = new Set;
+ for (let s of a) {
+ const t = s.split("").reverse().join("");
+ if (r.has(t)) {
+ n++;
+ } else {
+ r.add(s);
+ }
+ }
+ return n;
+}
+
+if (maximumpairs(['ab', 'de', 'ed', 'bc']) == 1) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (maximumpairs(['aa', 'ba', 'cd', 'ed']) == 0) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (maximumpairs(['uv', 'qp', 'st', 'vu', 'mn', 'pq']) == 2) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-256/roger-bell-west/javascript/ch-2.js b/challenge-256/roger-bell-west/javascript/ch-2.js
new file mode 100755
index 0000000000..62f3a05be9
--- /dev/null
+++ b/challenge-256/roger-bell-west/javascript/ch-2.js
@@ -0,0 +1,35 @@
+#! /usr/bin/node
+
+"use strict"
+
+function mergestrings(a, b) {
+ let out = "";
+ for (let i = 0; i < Math.max(a.length, b.length); i++) {
+ if (i <= a.length - 1) {
+ out += a.substring(i, i+1);
+ }
+ if (i <= b.length - 1) {
+ out += b.substring(i, i+1);
+ }
+ }
+ return out;
+}
+
+if (mergestrings('abcd', '1234') == 'a1b2c3d4') {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (mergestrings('abc', '12345') == 'a1b2c345') {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (mergestrings('abcde', '123') == 'a1b2c3de') {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-256/roger-bell-west/kotlin/ch-1.kt b/challenge-256/roger-bell-west/kotlin/ch-1.kt
new file mode 100644
index 0000000000..bd433350bd
--- /dev/null
+++ b/challenge-256/roger-bell-west/kotlin/ch-1.kt
@@ -0,0 +1,36 @@
+fun maximumpairs(a: List<String>): Int {
+ var n = 0
+ var r = mutableSetOf<String>()
+ for (s in a) {
+ val t = s.reversed()
+ if (r.contains(t)) {
+ n += 1
+ } else {
+ r.add(s)
+ }
+ }
+ return n
+}
+
+fun main() {
+
+ if (maximumpairs(listOf("ab", "de", "ed", "bc")) == 1) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (maximumpairs(listOf("aa", "ba", "cd", "ed")) == 0) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (maximumpairs(listOf("uv", "qp", "st", "vu", "mn", "pq")) == 2) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-256/roger-bell-west/kotlin/ch-2.kt b/challenge-256/roger-bell-west/kotlin/ch-2.kt
new file mode 100644
index 0000000000..d2dbdaa800
--- /dev/null
+++ b/challenge-256/roger-bell-west/kotlin/ch-2.kt
@@ -0,0 +1,37 @@
+import kotlin.math.max
+
+fun mergestrings(a: String, b: String): String {
+ var out = ""
+ for (i in 0 .. listOf(a.length, b.length).maxOrNull()!! - 1) {
+ if (i <= a.length - 1) {
+ out += a.substring(i, i+1)
+ }
+ if (i <= b.length - 1) {
+ out += b.substring(i, i+1)
+ }
+ }
+ return out
+}
+
+fun main() {
+
+ if (mergestrings("abcd", "1234") == "a1b2c3d4") {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (mergestrings("abc", "12345") == "a1b2c345") {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (mergestrings("abcde", "123") == "a1b2c3de") {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-256/roger-bell-west/lua/ch-1.lua b/challenge-256/roger-bell-west/lua/ch-1.lua
new file mode 100755
index 0000000000..b8316b4b7c
--- /dev/null
+++ b/challenge-256/roger-bell-west/lua/ch-1.lua
@@ -0,0 +1,37 @@
+#! /usr/bin/lua
+
+function maximumpairs(a)
+ local n = 0
+ local r = {}
+ for _, s in ipairs(a) do
+ local t = string.reverse(s)
+ if r[t] ~= nil then
+ n = n + 1
+ else
+ r[s] = true
+ end
+ end
+ return n
+end
+
+if maximumpairs({"ab", "de", "ed", "bc"}) == 1 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if maximumpairs({"aa", "ba", "cd", "ed"}) == 0 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if maximumpairs({"uv", "qp", "st", "vu", "mn", "pq"}) == 2 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-256/roger-bell-west/lua/ch-2.lua b/challenge-256/roger-bell-west/lua/ch-2.lua
new file mode 100755
index 0000000000..afbaa80653
--- /dev/null
+++ b/challenge-256/roger-bell-west/lua/ch-2.lua
@@ -0,0 +1,36 @@
+#! /usr/bin/lua
+
+function mergestrings(a, b)
+ local out = ""
+ for i = 1, math.max(string.len(a), string.len(b)) do
+ if i <= string.len(a) then
+ out = out .. string.sub(a, i, i)
+ end
+ if i <= string.len(b) then
+ out = out .. string.sub(b, i, i)
+ end
+ end
+ return out
+end
+
+if mergestrings("abcd", 1234) == "a1b2c3d4" then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if mergestrings("abc", 12345) == "a1b2c345" then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if mergestrings("abcde", 123) == "a1b2c3de" then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-256/roger-bell-west/perl/ch-1.pl b/challenge-256/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..9ab01536ff
--- /dev/null
+++ b/challenge-256/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,25 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 3;
+
+is(maximumpairs(['ab', 'de', 'ed', 'bc']), 1, 'example 1');
+is(maximumpairs(['aa', 'ba', 'cd', 'ed']), 0, 'example 2');
+is(maximumpairs(['uv', 'qp', 'st', 'vu', 'mn', 'pq']), 2, 'example 3');
+
+sub maximumpairs($a) {
+ my $n = 0;
+ my %r;
+ foreach my $s (@{$a}) {
+ my $t = reverse($s);
+ if (exists $r{$t}) {
+ $n++;
+ } else {
+ $r{$s} = 1;
+ }
+ }
+ return $n;
+}
diff --git a/challenge-256/roger-bell-west/perl/ch-2.pl b/challenge-256/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..44f704f864
--- /dev/null
+++ b/challenge-256/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,28 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 3;
+
+is(mergestrings('abcd', 1234), 'a1b2c3d4', 'example 1');
+is(mergestrings('abc', 12345), 'a1b2c345', 'example 2');
+is(mergestrings('abcde', 123), 'a1b2c3de', 'example 3');
+
+use List::Util qw(max);
+
+sub mergestrings($a, $b) {
+ my @aa = split '', $a;
+ my @bb = split '', $b;
+ my $out;
+ foreach my $i (0 .. max($#aa, $#bb)) {
+ if ($i <= $#aa) {
+ $out .= $aa[$i];
+ }
+ if ($i <= $#bb) {
+ $out .= $bb[$i];
+ }
+ }
+ return $out;
+}
diff --git a/challenge-256/roger-bell-west/postscript/ch-1.ps b/challenge-256/roger-bell-west/postscript/ch-1.ps
new file mode 100644
index 0000000000..5af26ad4c7
--- /dev/null
+++ b/challenge-256/roger-bell-west/postscript/ch-1.ps
@@ -0,0 +1,87 @@
+%!PS
+
+% begin included library code
+% see https://codeberg.org/Firedrake/postscript-libraries/
+/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
+
+/s2a {
+ [ exch { } forall ]
+} bind def
+
+/test.start {
+ print (:) print
+ /test.pass 0 def
+ /test.count 0 def
+} bind def
+
+/a2s {
+ 2 dict begin
+ /i exch def
+ i length dup string /o exch def
+ 1 sub 0 exch 1 exch {
+ dup i 3 -1 roll get o 3 1 roll put
+ } for
+ o
+ end
+} bind def
+
+/reverse {
+ 1 dict begin
+ dup length /l exch def
+ [ exch
+ aload pop
+ 2 1 l {
+ -1 roll
+ } for
+ ]
+ 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
+
+
+% end included library code
+
+/maximumpairs {
+ 0 dict begin
+ /n 0 def
+ /r 0 dict def
+ {
+ /s exch def
+ /t s s2a reverse a2s def
+ r t known {
+ /n n 1 add def
+ } {
+ r s true put
+ } ifelse
+ } forall
+ n
+ end
+} bind def
+
+(maximumpairs) test.start
+[(ab) (de) (ed) (bc)] maximumpairs 1 eq test
+[(aa) (ba) (cd) (ed)] maximumpairs 0 eq test
+[(uv) (qp) (st) (vu) (mn) (pq)] maximumpairs 2 eq test
+test.end
diff --git a/challenge-256/roger-bell-west/postscript/ch-2.ps b/challenge-256/roger-bell-west/postscript/ch-2.ps
new file mode 100644
index 0000000000..cbe7bc8998
--- /dev/null
+++ b/challenge-256/roger-bell-west/postscript/ch-2.ps
@@ -0,0 +1,72 @@
+%!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
+
+/a2s {
+ 2 dict begin
+ /i exch def
+ i length dup string /o exch def
+ 1 sub 0 exch 1 exch {
+ dup i 3 -1 roll get o 3 1 roll put
+ } for
+ o
+ 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
+
+
+% end included library code
+
+/mergestrings {
+ 0 dict begin
+ /b exch def
+ /a exch def
+ [
+ 0 1 a length b length max 1 sub {
+ /i exch def
+ i a length lt {
+ a i get
+ } if
+ i b length lt {
+ b i get
+ } if
+ } for
+ ] a2s
+ end
+} bind def
+
+(mergestrings) test.start
+(abcd) (1234) mergestrings (a1b2c3d4) eq test
+(abc) (12345) mergestrings (a1b2c345) eq test
+(abcde) (123) mergestrings (a1b2c3de) eq test
+test.end
diff --git a/challenge-256/roger-bell-west/python/ch-1.py b/challenge-256/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..41f87da92a
--- /dev/null
+++ b/challenge-256/roger-bell-west/python/ch-1.py
@@ -0,0 +1,27 @@
+#! /usr/bin/python3
+
+def maximumpairs(a):
+ n = 0
+ r = set()
+ for s in a:
+ t = s[::-1]
+ if t in r:
+ n += 1
+ else:
+ r.add(s)
+ return n
+
+import unittest
+
+class TestMaximumpairs(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(maximumpairs(["ab", "de", "ed", "bc"]), 1, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(maximumpairs(["aa", "ba", "cd", "ed"]), 0, 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(maximumpairs(["uv", "qp", "st", "vu", "mn", "pq"]), 2, 'example 3')
+
+unittest.main()
diff --git a/challenge-256/roger-bell-west/python/ch-2.py b/challenge-256/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..ee02a99f35
--- /dev/null
+++ b/challenge-256/roger-bell-west/python/ch-2.py
@@ -0,0 +1,25 @@
+#! /usr/bin/python3
+
+def mergestrings(a, b):
+ out = ""
+ for i in range(max(len(a), len(b))):
+ if i < len(a):
+ out += a[i]
+ if i < len(b):
+ out += b[i]
+ return out
+
+import unittest
+
+class TestMergestrings(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(mergestrings("abcd", "1234"), "a1b2c3d4", 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(mergestrings("abc", "12345"), "a1b2c345", 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(mergestrings("abcde", "123"), "a1b2c3de", 'example 3')
+
+unittest.main()
diff --git a/challenge-256/roger-bell-west/raku/ch-1.p6 b/challenge-256/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..a889b25d78
--- /dev/null
+++ b/challenge-256/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,23 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 3;
+
+is(maximumpairs(['ab', 'de', 'ed', 'bc']), 1, 'example 1');
+is(maximumpairs(['aa', 'ba', 'cd', 'ed']), 0, 'example 2');
+is(maximumpairs(['uv', 'qp', 'st', 'vu', 'mn', 'pq']), 2, 'example 3');
+
+sub maximumpairs(@a) {
+ my $n = 0;
+ my $r = SetHash.new;
+ for @a -> $s {
+ my $t = $s.flip;
+ if ($r{$t}:exists) {
+ $n++;
+ } else {
+ $r{$s} = 1;
+ }
+ }
+ return $n;
+}
diff --git a/challenge-256/roger-bell-west/raku/ch-2.p6 b/challenge-256/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..4d806b107b
--- /dev/null
+++ b/challenge-256/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,24 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 3;
+
+is(mergestrings('abcd', 1234), 'a1b2c3d4', 'example 1');
+is(mergestrings('abc', 12345), 'a1b2c345', 'example 2');
+is(mergestrings('abcde', 123), 'a1b2c3de', 'example 3');
+
+sub mergestrings($a, $b) {
+ my @aa = $a.comb;
+ my @bb = $b.comb;
+ my $out;
+ for 0 .. max(@aa.end, @bb.end) -> $i {
+ if ($i <= @aa.end) {
+ $out ~= @aa[$i];
+ }
+ if ($i <= @bb.end) {
+ $out ~= @bb[$i];
+ }
+ }
+ return $out;
+}
diff --git a/challenge-256/roger-bell-west/ruby/ch-1.rb b/challenge-256/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..447cbd195c
--- /dev/null
+++ b/challenge-256/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,35 @@
+#! /usr/bin/ruby
+
+require 'set'
+
+def maximumpairs(a)
+ n = 0
+ r = Set.new
+ a.each do |s|
+ t = s.reverse
+ if r.include?(t) then
+ n += 1
+ else
+ r.add(s)
+ end
+ end
+ return n
+end
+
+require 'test/unit'
+
+class TestMaximumpairs < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(1, maximumpairs(['ab', 'de', 'ed', 'bc']))
+ end
+
+ def test_ex2
+ assert_equal(0, maximumpairs(['aa', 'ba', 'cd', 'ed']))
+ end
+
+ def test_ex3
+ assert_equal(2, maximumpairs(['uv', 'qp', 'st', 'vu', 'mn', 'pq']))
+ end
+
+end
diff --git a/challenge-256/roger-bell-west/ruby/ch-2.rb b/challenge-256/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..f85f21409f
--- /dev/null
+++ b/challenge-256/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,34 @@
+#! /usr/bin/ruby
+
+def mergestrings(a, b)
+ aa = a.chars.to_a
+ bb = b.chars.to_a
+ out = ""
+ 0.upto([a.length, b.length].max - 1) do |i|
+ if i < a.length then
+ out += aa[i]
+ end
+ if i < b.length then
+ out += bb[i]
+ end
+ end
+ return out
+end
+
+require 'test/unit'
+
+class TestMergestrings < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal('a1b2c3d4', mergestrings('abcd', '1234'))
+ end
+
+ def test_ex2
+ assert_equal('a1b2c345', mergestrings('abc', '12345'))
+ end
+
+ def test_ex3
+ assert_equal('a1b2c3de', mergestrings('abcde', '123'))
+ end
+
+end
diff --git a/challenge-256/roger-bell-west/rust/ch-1.rs b/challenge-256/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..810ce5bc64
--- /dev/null
+++ b/challenge-256/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
+
+use std::collections::HashSet;
+
+#[test]
+fn test_ex1() {
+ assert_eq!(maximumpairs(vec!["ab", "de", "ed", "bc"]), 1);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(maximumpairs(vec!["aa", "ba", "cd", "ed"]), 0);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(maximumpairs(vec!["uv", "qp", "st", "vu", "mn", "pq"]), 2);
+}
+
+fn maximumpairs(a: Vec<&str>) -> u32 {
+ let mut n = 0;
+ let mut r: HashSet<String> = HashSet::new();
+ for s in a {
+ let t = s.chars().rev().collect::<String>();
+ if r.contains(&t) {
+ n += 1;
+ } else {
+ r.insert(s.to_string());
+ }
+ }
+ n
+}
diff --git a/challenge-256/roger-bell-west/rust/ch-2.rs b/challenge-256/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..59af687020
--- /dev/null
+++ b/challenge-256/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,34 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x --nocapture; rm -f ${0}x ; exit
+
+use std::cmp::max;
+
+#[test]
+fn test_ex1() {
+ assert_eq!(mergestrings("abcd", "1234"), "a1b2c3d4");
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(mergestrings("abc", "12345"), "a1b2c345");
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(mergestrings("abcde", "123"), "a1b2c3de");
+}
+
+fn mergestrings(a: &str, b: &str) -> String {
+ let aa = a.chars().collect::<Vec<char>>();
+ let bb = b.chars().collect::<Vec<char>>();
+ let mut out: String = String::new();
+ for i in 0 .. max(a.len(), b.len()) {
+ if i < a.len() {
+ out.push(aa[i]);
+ }
+ if i < b.len() {
+ out.push(bb[i]);
+ }
+ }
+ out
+}
diff --git a/challenge-256/roger-bell-west/scala/ch-1.scala b/challenge-256/roger-bell-west/scala/ch-1.scala
new file mode 100644
index 0000000000..82cc40f0ad
--- /dev/null
+++ b/challenge-256/roger-bell-west/scala/ch-1.scala
@@ -0,0 +1,38 @@
+import scala.collection.mutable
+
+object Maximumpairs {
+ def maximumpairs(a: List[String]): Int = {
+ var n = 0
+ var r = mutable.Set.empty[String]
+ for (s <- a) {
+ val t = s.reverse
+ if (r.contains(t)) {
+ n += 1
+ } else {
+ r += s
+ }
+ }
+ return n
+ }
+ def main(args: Array[String]) {
+ if (maximumpairs(List("ab", "de", "ed", "bc")) == 1) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (maximumpairs(List("aa", "ba", "cd", "ed")) == 0) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (maximumpairs(List("uv", "qp", "st", "vu", "mn", "pq")) == 2) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+ }
+}
diff --git a/challenge-256/roger-bell-west/scala/ch-2.scala b/challenge-256/roger-bell-west/scala/ch-2.scala
new file mode 100644
index 0000000000..e97afb1a26
--- /dev/null
+++ b/challenge-256/roger-bell-west/scala/ch-2.scala
@@ -0,0 +1,36 @@
+
+object Mergestrings {
+ def mergestrings(a: String, b: String): String = {
+ var out = ""
+ for (i <- 0 to List(a.length, b.length).max) {
+ if (i <= a.length - 1) {
+ out += a.substring(i, i+1)
+ }
+ if (i <= b.length - 1) {
+ out += b.substring(i, i+1)
+ }
+ }
+ return out
+ }
+ def main(args: Array[String]) {
+ if (mergestrings("abcd", "1234") == "a1b2c3d4") {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (mergestrings("abc", "12345") == "a1b2c345") {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (mergestrings("abcde", "123") == "a1b2c3de") {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+ }
+}
diff --git a/challenge-256/roger-bell-west/tests.yaml b/challenge-256/roger-bell-west/tests.yaml
new file mode 100644
index 0000000000..4a44a7ad7b
--- /dev/null
+++ b/challenge-256/roger-bell-west/tests.yaml
@@ -0,0 +1,40 @@
+---
+ch-1:
+ - function: maximumpairs
+ arguments:
+ - ab
+ - de
+ - ed
+ - bc
+ result: 1
+ - arguments:
+ - aa
+ - ba
+ - cd
+ - ed
+ result: 0
+ - arguments:
+ - uv
+ - qp
+ - st
+ - vu
+ - mn
+ - pq
+ result: 2
+ch-2:
+ - function: mergestrings
+ multiarg: true
+ arguments:
+ - abcd
+ - "1234"
+ result: "a1b2c3d4"
+ - multiarg: true
+ arguments:
+ - abc
+ - "12345"
+ result: "a1b2c345"
+ - multiarg: true
+ arguments:
+ - abcde
+ - "123"
+ result: "a1b2c3de"