aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2024-05-07 11:40:26 +0100
committerRoger Bell_West <roger@firedrake.org>2024-05-07 11:40:26 +0100
commitfa113e272fedf16505729bfabd2693714c2c1a91 (patch)
tree5a3aac3f95c029a420cb6c196dc4ce9cb506f66c
parentc1756b0e7aed0ad70fa63feb2565c69215c9d426 (diff)
downloadperlweeklychallenge-club-fa113e272fedf16505729bfabd2693714c2c1a91.tar.gz
perlweeklychallenge-club-fa113e272fedf16505729bfabd2693714c2c1a91.tar.bz2
perlweeklychallenge-club-fa113e272fedf16505729bfabd2693714c2c1a91.zip
RogerBW solutions for challenge no. 268
-rwxr-xr-xchallenge-268/roger-bell-west/crystal/ch-1.cr18
-rwxr-xr-xchallenge-268/roger-bell-west/crystal/ch-2.cr24
-rwxr-xr-xchallenge-268/roger-bell-west/javascript/ch-1.js26
-rwxr-xr-xchallenge-268/roger-bell-west/javascript/ch-2.js60
-rw-r--r--challenge-268/roger-bell-west/kotlin/ch-1.kt26
-rw-r--r--challenge-268/roger-bell-west/kotlin/ch-2.kt32
-rwxr-xr-xchallenge-268/roger-bell-west/lua/ch-1.lua27
-rwxr-xr-xchallenge-268/roger-bell-west/lua/ch-2.lua63
-rwxr-xr-xchallenge-268/roger-bell-west/perl/ch-1.pl17
-rwxr-xr-xchallenge-268/roger-bell-west/perl/ch-2.pl23
-rw-r--r--challenge-268/roger-bell-west/postscript/ch-1.ps63
-rw-r--r--challenge-268/roger-bell-west/postscript/ch-2.ps202
-rwxr-xr-xchallenge-268/roger-bell-west/python/ch-1.py19
-rwxr-xr-xchallenge-268/roger-bell-west/python/ch-2.py24
-rwxr-xr-xchallenge-268/roger-bell-west/raku/ch-1.p613
-rwxr-xr-xchallenge-268/roger-bell-west/raku/ch-2.p619
-rwxr-xr-xchallenge-268/roger-bell-west/ruby/ch-1.rb23
-rwxr-xr-xchallenge-268/roger-bell-west/ruby/ch-2.rb29
-rwxr-xr-xchallenge-268/roger-bell-west/rust/ch-1.rs21
-rwxr-xr-xchallenge-268/roger-bell-west/rust/ch-2.rs32
-rw-r--r--challenge-268/roger-bell-west/scala/ch-1.scala27
-rw-r--r--challenge-268/roger-bell-west/scala/ch-2.scala34
-rw-r--r--challenge-268/roger-bell-west/tests.json44
23 files changed, 866 insertions, 0 deletions
diff --git a/challenge-268/roger-bell-west/crystal/ch-1.cr b/challenge-268/roger-bell-west/crystal/ch-1.cr
new file mode 100755
index 0000000000..9dede090fb
--- /dev/null
+++ b/challenge-268/roger-bell-west/crystal/ch-1.cr
@@ -0,0 +1,18 @@
+#! /usr/bin/crystal
+
+def magicnumber(a, b)
+ b.min - a.min
+end
+
+require "spec"
+describe "#tmpl_var name=function>" do
+ it "test_ex1" do
+ magicnumber([3, 7, 5], [9, 5, 7]).should eq 2
+ end
+ it "test_ex2" do
+ magicnumber([1, 2, 1], [5, 4, 4]).should eq 3
+ end
+ it "test_ex3" do
+ magicnumber([2], [5]).should eq 3
+ end
+end
diff --git a/challenge-268/roger-bell-west/crystal/ch-2.cr b/challenge-268/roger-bell-west/crystal/ch-2.cr
new file mode 100755
index 0000000000..7f93a077e9
--- /dev/null
+++ b/challenge-268/roger-bell-west/crystal/ch-2.cr
@@ -0,0 +1,24 @@
+#! /usr/bin/crystal
+
+def numbergame(a0)
+ out = Array(Int32).new
+ a = a0.sort
+ a.each_slice(2) do |s|
+ out.push(s[1])
+ out.push(s[0])
+ end
+ out
+end
+
+require "spec"
+describe "#tmpl_var name=function>" do
+ it "test_ex1" do
+ numbergame([2, 5, 3, 4]).should eq [3, 2, 5, 4]
+ end
+ it "test_ex2" do
+ numbergame([9, 4, 1, 3, 6, 4, 6, 1]).should eq [1, 1, 4, 3, 6, 4, 9, 6]
+ end
+ it "test_ex3" do
+ numbergame([1, 2, 2, 3]).should eq [2, 1, 3, 2]
+ end
+end
diff --git a/challenge-268/roger-bell-west/javascript/ch-1.js b/challenge-268/roger-bell-west/javascript/ch-1.js
new file mode 100755
index 0000000000..a0b78e4d4c
--- /dev/null
+++ b/challenge-268/roger-bell-west/javascript/ch-1.js
@@ -0,0 +1,26 @@
+#! /usr/bin/node
+
+"use strict"
+
+function magicnumber(a, b) {
+ return Math.min(...b) - Math.min(...a)
+}
+
+if (magicnumber([3, 7, 5], [9, 5, 7]) == 2) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (magicnumber([1, 2, 1], [5, 4, 4]) == 3) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (magicnumber([2], [5]) == 3) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-268/roger-bell-west/javascript/ch-2.js b/challenge-268/roger-bell-west/javascript/ch-2.js
new file mode 100755
index 0000000000..021ced4a94
--- /dev/null
+++ b/challenge-268/roger-bell-west/javascript/ch-2.js
@@ -0,0 +1,60 @@
+#! /usr/bin/node
+
+"use strict"
+
+function numbergame(a0) {
+ let out = [];
+ let a = a0;
+ a.sort();
+ for (let i = 0; i < a.length; i += 2) {
+ out.push(a[i + 1]);
+ out.push(a[i]);
+ }
+ return out;
+}
+
+// by Frank Tan
+// https://stackoverflow.com/questions/38400594/javascript-deep-comparison
+function deepEqual(a,b)
+{
+ if( (typeof a == 'object' && a != null) &&
+ (typeof b == 'object' && b != null) )
+ {
+ var count = [0,0];
+ for( var key in a) count[0]++;
+ for( var key in b) count[1]++;
+ if( count[0]-count[1] != 0) {return false;}
+ for( var key in a)
+ {
+ if(!(key in b) || !deepEqual(a[key],b[key])) {return false;}
+ }
+ for( var key in b)
+ {
+ if(!(key in a) || !deepEqual(b[key],a[key])) {return false;}
+ }
+ return true;
+ }
+ else
+ {
+ return a === b;
+ }
+}
+
+if (deepEqual(numbergame([2, 5, 3, 4]), [3, 2, 5, 4])) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (deepEqual(numbergame([9, 4, 1, 3, 6, 4, 6, 1]), [1, 1, 4, 3, 6, 4, 9, 6])) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (deepEqual(numbergame([1, 2, 2, 3]), [2, 1, 3, 2])) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-268/roger-bell-west/kotlin/ch-1.kt b/challenge-268/roger-bell-west/kotlin/ch-1.kt
new file mode 100644
index 0000000000..05a9fb3d47
--- /dev/null
+++ b/challenge-268/roger-bell-west/kotlin/ch-1.kt
@@ -0,0 +1,26 @@
+fun magicnumber(a: List<Int>, b: List<Int>): Int {
+ return b.minOrNull()!! - a.minOrNull()!!
+}
+
+fun main() {
+
+ if (magicnumber(listOf(3, 7, 5), listOf(9, 5, 7)) == 2) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (magicnumber(listOf(1, 2, 1), listOf(5, 4, 4)) == 3) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (magicnumber(listOf(2), listOf(5)) == 3) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-268/roger-bell-west/kotlin/ch-2.kt b/challenge-268/roger-bell-west/kotlin/ch-2.kt
new file mode 100644
index 0000000000..7307bb8934
--- /dev/null
+++ b/challenge-268/roger-bell-west/kotlin/ch-2.kt
@@ -0,0 +1,32 @@
+fun numbergame(a0: List<Int>): List<Int> {
+ var out = ArrayList<Int>()
+ val a = a0.sorted()
+ for (s in a.chunked(2)) {
+ out.add(s[1])
+ out.add(s[0])
+ }
+ return out.toList()
+}
+
+fun main() {
+
+ if (numbergame(listOf(2, 5, 3, 4)) == listOf(3, 2, 5, 4)) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (numbergame(listOf(9, 4, 1, 3, 6, 4, 6, 1)) == listOf(1, 1, 4, 3, 6, 4, 9, 6)) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (numbergame(listOf(1, 2, 2, 3)) == listOf(2, 1, 3, 2)) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-268/roger-bell-west/lua/ch-1.lua b/challenge-268/roger-bell-west/lua/ch-1.lua
new file mode 100755
index 0000000000..27e9244c87
--- /dev/null
+++ b/challenge-268/roger-bell-west/lua/ch-1.lua
@@ -0,0 +1,27 @@
+#! /usr/bin/lua
+
+function magicnumber(a, b)
+ return math.min(table.unpack(b)) - math.min(table.unpack(a))
+end
+
+if magicnumber({3, 7, 5}, {9, 5, 7}) == 2 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if magicnumber({1, 2, 1}, {5, 4, 4}) == 3 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if magicnumber({2}, {5}) == 3 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-268/roger-bell-west/lua/ch-2.lua b/challenge-268/roger-bell-west/lua/ch-2.lua
new file mode 100755
index 0000000000..153513641c
--- /dev/null
+++ b/challenge-268/roger-bell-west/lua/ch-2.lua
@@ -0,0 +1,63 @@
+#! /usr/bin/lua
+
+function numbergame(a0)
+ local out = {}
+ local a = a0
+ table.sort(a)
+ for i = 1, #a, 2 do
+ table.insert(out, a[i + 1])
+ table.insert(out, a[i])
+ end
+ return out
+end
+
+-- by Michael Anderson at
+-- https://stackoverflow.com/questions/8722620/comparing-two-index-tables-by-index-value-in-lua
+-- modified by Roger
+function recursive_compare(t1,t2)
+ -- Use usual comparison first.
+ if t1==t2 then return true end
+ -- We only support non-default behavior for tables
+ if (type(t1)~="table") then return false end
+ -- They better have the same metatables
+ local mt1 = getmetatable(t1)
+ local mt2 = getmetatable(t2)
+ if( not recursive_compare(mt1,mt2) ) then return false end
+ -- Build list of all keys
+ local kk = {}
+ for k1, _ in pairs(t1) do
+ kk[k1] = true
+ end
+ for k2, _ in pairs(t2) do
+ kk[k2] = true
+ end
+ -- Check each key that exists in at least one table
+ for _, k in ipairs(kk) do
+ if (not recursive_compare(t1[k], t2[k])) then
+ return false
+ end
+ end
+ return true
+end
+
+if recursive_compare(numbergame({2, 5, 3, 4}), {3, 2, 5, 4}) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if recursive_compare(numbergame({9, 4, 1, 3, 6, 4, 6, 1}), {1, 1, 4, 3, 6, 4, 9, 6}) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if recursive_compare(numbergame({1, 2, 2, 3}), {2, 1, 3, 2}) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-268/roger-bell-west/perl/ch-1.pl b/challenge-268/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..f2d93c832e
--- /dev/null
+++ b/challenge-268/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,17 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 3;
+
+is(magicnumber([3, 7, 5], [9, 5, 7]), 2, 'example 1');
+is(magicnumber([1, 2, 1], [5, 4, 4]), 3, 'example 2');
+is(magicnumber([2], [5]), 3, 'example 3');
+
+use List::Util qw(min);
+
+sub magicnumber($a, $b) {
+ return min(@{$b}) - min(@{$a});
+}
diff --git a/challenge-268/roger-bell-west/perl/ch-2.pl b/challenge-268/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..6ae1fb07f6
--- /dev/null
+++ b/challenge-268/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,23 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 3;
+
+is_deeply(numbergame([2, 5, 3, 4]), [3, 2, 5, 4], 'example 1');
+is_deeply(numbergame([9, 4, 1, 3, 6, 4, 6, 1]), [1, 1, 4, 3, 6, 4, 9, 6], 'example 2');
+is_deeply(numbergame([1, 2, 2, 3]), [2, 1, 3, 2], 'example 3');
+
+use List::Util qw(pairs);
+
+sub numbergame($a0) {
+ my @out;
+ my @a = sort {$::a <=> $::b }@{$a0};
+ foreach my $p (pairs @a) {
+ push @out, $p->[1];
+ push @out, $p->[0];
+ }
+ return \@out;
+}
diff --git a/challenge-268/roger-bell-west/postscript/ch-1.ps b/challenge-268/roger-bell-west/postscript/ch-1.ps
new file mode 100644
index 0000000000..dce4868a68
--- /dev/null
+++ b/challenge-268/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
+
+/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
+
+/listmin {
+ { min } reduce
+} 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
+
+/magicnumber {
+ listmin exch listmin sub
+} bind def
+
+(magicnumber) test.start
+[3 7 5] [9 5 7] magicnumber 2 eq test
+[1 2 1] [5 4 4] magicnumber 3 eq test
+[2] [5] magicnumber 3 eq test
+test.end
diff --git a/challenge-268/roger-bell-west/postscript/ch-2.ps b/challenge-268/roger-bell-west/postscript/ch-2.ps
new file mode 100644
index 0000000000..49ed0cd2eb
--- /dev/null
+++ b/challenge-268/roger-bell-west/postscript/ch-2.ps
@@ -0,0 +1,202 @@
+%!PS
+
+% begin included library code
+% see https://codeberg.org/Firedrake/postscript-libraries/
+/deepeq {
+ 2 dict begin
+ /a exch def
+ /b exch def
+ a type b type eq {
+ a type /dicttype eq {
+ a length b length eq {
+ <<
+ a {
+ pop
+ true
+ } forall
+ b {
+ pop
+ true
+ } forall
+ >>
+ true exch
+ {
+ pop
+ dup a exch known {
+ dup b exch known {
+ dup a exch get exch b exch get deepeq not {
+ pop false
+ } if
+ } {
+ false
+ } ifelse
+ } {
+ false
+ } ifelse
+ } forall
+ } {
+ false
+ } ifelse
+ } {
+ a type dup /arraytype eq exch /stringtype eq or {
+ a length b length eq {
+ true
+ 0 1 a length 1 sub {
+ dup a exch get exch b exch get deepeq not {
+ pop false
+ exit
+ } if
+ } for
+ } {
+ false
+ } ifelse
+ } {
+ a b eq
+ } ifelse
+ } ifelse
+ } {
+ false
+ } ifelse
+ end
+} bind def
+
+/quicksort {
+ { quicksort.cmp } quicksort.with_comparator
+} bind def
+
+/quicksort.with_comparator { % [ a c b ] { comparator } -> [ a b c ]
+ 2 dict begin
+ /cmp exch def
+ /arr exch def
+ arr length 0 gt {
+ 0 arr length 1 sub quicksort.main
+ } if
+ arr
+ end
+} bind def
+
+/quicksort.cmp {
+ 2 copy
+ lt {
+ pop pop -1
+ } {
+ gt {
+ 1
+ } {
+ 0
+ } ifelse
+ } ifelse
+} 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.start {
+ print (:) print
+ /test.pass 0 def
+ /test.count 0 def
+} bind def
+
+/quicksort.partition {
+ 3 dict begin
+ /pivot arr hi lo add 2 idiv get def
+ /i lo 1 sub def
+ /j hi 1 add def
+ {
+ {
+ /i i 1 add def
+ arr i get pivot cmp 0 ge {
+ exit
+ } if
+ } loop
+ {
+ /j j 1 sub def
+ arr j get pivot cmp 0 le {
+ exit
+ } if
+ } loop
+ i j ge {
+ j
+ exit
+ } if
+ i j quicksort.swap
+ } loop
+ end
+} bind def
+
+/quicksort.swap {
+ 2 dict begin
+ /bi exch def
+ /ai exch def
+ arr ai get
+ arr bi get
+ arr exch ai exch put
+ arr exch bi exch put
+ 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
+
+/quicksort.main { % lo hi -> (null)
+ 3 dict begin
+ /hi exch def
+ /lo exch def
+ /xit false def
+ lo 0 lt {
+ /xit true def
+ } if
+ hi 0 lt {
+ /xit true def
+ } if
+ lo hi ge {
+ /xit true def
+ } if
+ xit not {
+ /p quicksort.partition def
+ lo p quicksort.main
+ p 1 add hi quicksort.main
+ } if
+ end
+} bind def
+
+
+% end included library code
+
+/numbergame {
+ 0 dict begin
+ quicksort
+ [ exch
+ aload length /l exch def
+ l 2 idiv {
+ exch
+ l 2 roll
+ } repeat
+ ]
+ end
+} bind def
+
+(numbergame) test.start
+[2 5 3 4] numbergame [3 2 5 4] deepeq test
+[9 4 1 3 6 4 6 1] numbergame [1 1 4 3 6 4 9 6] deepeq test
+[1 2 2 3] numbergame [2 1 3 2] deepeq test
+test.end
diff --git a/challenge-268/roger-bell-west/python/ch-1.py b/challenge-268/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..3e3e70f8e8
--- /dev/null
+++ b/challenge-268/roger-bell-west/python/ch-1.py
@@ -0,0 +1,19 @@
+#! /usr/bin/python3
+
+def magicnumber(a, b):
+ return min(b) - min(a)
+
+import unittest
+
+class TestMagicnumber(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(magicnumber([3, 7, 5], [9, 5, 7]), 2, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(magicnumber([1, 2, 1], [5, 4, 4]), 3, 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(magicnumber([2], [5]), 3, 'example 3')
+
+unittest.main()
diff --git a/challenge-268/roger-bell-west/python/ch-2.py b/challenge-268/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..0555e51797
--- /dev/null
+++ b/challenge-268/roger-bell-west/python/ch-2.py
@@ -0,0 +1,24 @@
+#! /usr/bin/python3
+
+def numbergame(a0):
+ out = []
+ a = sorted(a0)
+ for i in range(0, len(a), 2):
+ out.append(a[i + 1])
+ out.append(a[i])
+ return out
+
+import unittest
+
+class TestNumbergame(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(numbergame([2, 5, 3, 4]), [3, 2, 5, 4], 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(numbergame([9, 4, 1, 3, 6, 4, 6, 1]), [1, 1, 4, 3, 6, 4, 9, 6], 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(numbergame([1, 2, 2, 3]), [2, 1, 3, 2], 'example 3')
+
+unittest.main()
diff --git a/challenge-268/roger-bell-west/raku/ch-1.p6 b/challenge-268/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..3f2ff0e83c
--- /dev/null
+++ b/challenge-268/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,13 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 3;
+
+is(magicnumber([3, 7, 5], [9, 5, 7]), 2, 'example 1');
+is(magicnumber([1, 2, 1], [5, 4, 4]), 3, 'example 2');
+is(magicnumber([2], [5]), 3, 'example 3');
+
+sub magicnumber(@a, @b) {
+ return min(@b) - min(@a);
+}
diff --git a/challenge-268/roger-bell-west/raku/ch-2.p6 b/challenge-268/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..6185c8f799
--- /dev/null
+++ b/challenge-268/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,19 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 3;
+
+is-deeply(numbergame([2, 5, 3, 4]), [3, 2, 5, 4], 'example 1');
+is-deeply(numbergame([9, 4, 1, 3, 6, 4, 6, 1]), [1, 1, 4, 3, 6, 4, 9, 6], 'example 2');
+is-deeply(numbergame([1, 2, 2, 3]), [2, 1, 3, 2], 'example 3');
+
+sub numbergame(@a0) {
+ my @out;
+ my @a = @a0.sort({$^a <=> $^b});
+ for @a -> $i, $j {
+ @out.push($j);
+ @out.push($i);
+ }
+ return @out;
+}
diff --git a/challenge-268/roger-bell-west/ruby/ch-1.rb b/challenge-268/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..878bb341d9
--- /dev/null
+++ b/challenge-268/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,23 @@
+#! /usr/bin/ruby
+
+def magicnumber(a, b)
+ return b.min - a.min
+end
+
+require 'test/unit'
+
+class TestMagicnumber < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(2, magicnumber([3, 7, 5], [9, 5, 7]))
+ end
+
+ def test_ex2
+ assert_equal(3, magicnumber([1, 2, 1], [5, 4, 4]))
+ end
+
+ def test_ex3
+ assert_equal(3, magicnumber([2], [5]))
+ end
+
+end
diff --git a/challenge-268/roger-bell-west/ruby/ch-2.rb b/challenge-268/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..a28098af5f
--- /dev/null
+++ b/challenge-268/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,29 @@
+#! /usr/bin/ruby
+
+def numbergame(a0)
+ out = []
+ a = a0.sort
+ a.each_slice(2) do |s|
+ out.push(s[1])
+ out.push(s[0])
+ end
+ return out
+end
+
+require 'test/unit'
+
+class TestNumbergame < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal([3, 2, 5, 4], numbergame([2, 5, 3, 4]))
+ end
+
+ def test_ex2
+ assert_equal([1, 1, 4, 3, 6, 4, 9, 6], numbergame([9, 4, 1, 3, 6, 4, 6, 1]))
+ end
+
+ def test_ex3
+ assert_equal([2, 1, 3, 2], numbergame([1, 2, 2, 3]))
+ end
+
+end
diff --git a/challenge-268/roger-bell-west/rust/ch-1.rs b/challenge-268/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..ce508c5276
--- /dev/null
+++ b/challenge-268/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,21 @@
+#! /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!(magicnumber(vec![3, 7, 5], vec![9, 5, 7]), 2);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(magicnumber(vec![1, 2, 1], vec![5, 4, 4]), 3);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(magicnumber(vec![2], vec![5]), 3);
+}
+
+fn magicnumber(a: Vec<i32>, b: Vec<i32>) -> i32 {
+ b.iter().min().unwrap() - a.iter().min().unwrap()
+}
diff --git a/challenge-268/roger-bell-west/rust/ch-2.rs b/challenge-268/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..304ba5eba9
--- /dev/null
+++ b/challenge-268/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,32 @@
+#! /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!(numbergame(vec![2, 5, 3, 4]), vec![3, 2, 5, 4]);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(
+ numbergame(vec![9, 4, 1, 3, 6, 4, 6, 1]),
+ vec![1, 1, 4, 3, 6, 4, 9, 6]
+ );
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(numbergame(vec![1, 2, 2, 3]), vec![2, 1, 3, 2]);
+}
+
+fn numbergame(a0: Vec<i32>) -> Vec<i32> {
+ let mut out = Vec::new();
+ let mut a = a0;
+ a.sort();
+ let mut ai = a.iter();
+ while let Some(i) = ai.next() {
+ out.push(*ai.next().unwrap());
+ out.push(*i);
+ }
+ out
+}
diff --git a/challenge-268/roger-bell-west/scala/ch-1.scala b/challenge-268/roger-bell-west/scala/ch-1.scala
new file mode 100644
index 0000000000..3fa6dc5e5f
--- /dev/null
+++ b/challenge-268/roger-bell-west/scala/ch-1.scala
@@ -0,0 +1,27 @@
+
+object Magicnumber {
+ def magicnumber(a: List[Int], b: List[Int]): Int = {
+ return b.min - a.min
+ }
+ def main(args: Array[String]) {
+ if (magicnumber(List(3, 7, 5), List(9, 5, 7)) == 2) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (magicnumber(List(1, 2, 1), List(5, 4, 4)) == 3) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (magicnumber(List(2), List(5)) == 3) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+ }
+}
diff --git a/challenge-268/roger-bell-west/scala/ch-2.scala b/challenge-268/roger-bell-west/scala/ch-2.scala
new file mode 100644
index 0000000000..c153ef4a94
--- /dev/null
+++ b/challenge-268/roger-bell-west/scala/ch-2.scala
@@ -0,0 +1,34 @@
+import scala.collection.mutable.ListBuffer
+
+object Numbergame {
+ def numbergame(a0: List[Int]): List[Int] = {
+ var out = new ListBuffer[Int]
+ val a = a0.sortWith(_ < _)
+ for (s <- a.grouped(2)) {
+ out += s(1)
+ out += s(0)
+ }
+ return out.toList
+ }
+ def main(args: Array[String]) {
+ if (numbergame(List(2, 5, 3, 4)) == List(3, 2, 5, 4)) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (numbergame(List(9, 4, 1, 3, 6, 4, 6, 1)) == List(1, 1, 4, 3, 6, 4, 9, 6)) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (numbergame(List(1, 2, 2, 3)) == List(2, 1, 3, 2)) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+ }
+}
diff --git a/challenge-268/roger-bell-west/tests.json b/challenge-268/roger-bell-west/tests.json
new file mode 100644
index 0000000000..4e99abc4f7
--- /dev/null
+++ b/challenge-268/roger-bell-west/tests.json
@@ -0,0 +1,44 @@
+{
+ "ch-1" : [
+ {
+ "function" : "magicnumber",
+ "multiarg" : true,
+ "arguments" : [
+ [ 3, 7, 5 ],
+ [ 9, 5, 7 ]
+ ],
+ "result" : 2
+ },
+ {
+ "multiarg" : true,
+ "arguments" : [
+ [ 1, 2, 1 ],
+ [ 5, 4, 4 ]
+ ],
+ "result" : 3
+ },
+ {
+ "multiarg" : 1,
+ "arguments" : [
+ [ 2 ],
+ [ 5 ]
+ ],
+ "result" : 3
+ }
+ ],
+ "ch-2" : [
+ {
+ "function" : "numbergame",
+ "arguments" : [ 2, 5, 3, 4 ],
+ "result" : [ 3, 2, 5, 4 ]
+ },
+ {
+ "arguments" : [ 9, 4, 1, 3, 6, 4, 6, 1 ],
+ "result" : [ 1, 1, 4, 3, 6, 4, 9, 6 ]
+ },
+ {
+ "result" : [ 2, 1, 3, 2 ],
+ "arguments" : [ 1, 2, 2, 3 ]
+ }
+ ]
+}