aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-320/roger-bell-west/crystal/ch-1.cr27
-rwxr-xr-xchallenge-320/roger-bell-west/crystal/ch-2.cr30
-rwxr-xr-xchallenge-320/roger-bell-west/javascript/ch-1.js35
-rwxr-xr-xchallenge-320/roger-bell-west/javascript/ch-2.js38
-rw-r--r--challenge-320/roger-bell-west/kotlin/ch-1.kt35
-rw-r--r--challenge-320/roger-bell-west/kotlin/ch-2.kt38
-rwxr-xr-xchallenge-320/roger-bell-west/lua/ch-1.lua36
-rwxr-xr-xchallenge-320/roger-bell-west/lua/ch-2.lua39
-rwxr-xr-xchallenge-320/roger-bell-west/perl/ch-1.pl26
-rwxr-xr-xchallenge-320/roger-bell-west/perl/ch-2.pl27
-rw-r--r--challenge-320/roger-bell-west/postscript/ch-1.ps61
-rw-r--r--challenge-320/roger-bell-west/postscript/ch-2.ps64
-rwxr-xr-xchallenge-320/roger-bell-west/python/ch-1.py26
-rwxr-xr-xchallenge-320/roger-bell-west/python/ch-2.py28
-rwxr-xr-xchallenge-320/roger-bell-west/raku/ch-1.p622
-rwxr-xr-xchallenge-320/roger-bell-west/raku/ch-2.p625
-rwxr-xr-xchallenge-320/roger-bell-west/ruby/ch-1.rb32
-rwxr-xr-xchallenge-320/roger-bell-west/ruby/ch-2.rb35
-rwxr-xr-xchallenge-320/roger-bell-west/rust/ch-1.rs30
-rwxr-xr-xchallenge-320/roger-bell-west/rust/ch-2.rs33
-rw-r--r--challenge-320/roger-bell-west/scala/ch-1.scala38
-rw-r--r--challenge-320/roger-bell-west/scala/ch-2.scala41
-rw-r--r--challenge-320/roger-bell-west/tests.json32
-rw-r--r--challenge-320/roger-bell-west/typst/ch-1.typ30
-rw-r--r--challenge-320/roger-bell-west/typst/ch-2.typ33
25 files changed, 861 insertions, 0 deletions
diff --git a/challenge-320/roger-bell-west/crystal/ch-1.cr b/challenge-320/roger-bell-west/crystal/ch-1.cr
new file mode 100755
index 0000000000..1a9e9767a1
--- /dev/null
+++ b/challenge-320/roger-bell-west/crystal/ch-1.cr
@@ -0,0 +1,27 @@
+#! /usr/bin/crystal
+
+def maximumcount(a)
+ pos = 0
+ neg = 0
+ a.each do |n|
+ if n > 0
+ pos += 1
+ elsif n < 0
+ neg += 1
+ end
+ end
+ [pos, neg].max
+end
+
+require "spec"
+describe "maximumcount" do
+ it "test_ex1" do
+ maximumcount([-3, -2, -1, 1, 2, 3]).should eq 3
+ end
+ it "test_ex2" do
+ maximumcount([-2, -1, 0, 0, 1]).should eq 2
+ end
+ it "test_ex3" do
+ maximumcount([1, 2, 3, 4]).should eq 4
+ end
+end
diff --git a/challenge-320/roger-bell-west/crystal/ch-2.cr b/challenge-320/roger-bell-west/crystal/ch-2.cr
new file mode 100755
index 0000000000..992d1ab2cb
--- /dev/null
+++ b/challenge-320/roger-bell-west/crystal/ch-2.cr
@@ -0,0 +1,30 @@
+#! /usr/bin/crystal
+
+def sumdifference(a)
+ delta = 0
+ a.each do |x|
+ if x >= 10
+ digitsum = 0
+ xa = x
+ while xa > 0
+ xa, y = xa.divmod(10)
+ digitsum += y
+ end
+ delta += x - digitsum
+ end
+ end
+ delta
+end
+
+require "spec"
+describe "sumdifference" do
+ it "test_ex1" do
+ sumdifference([1, 23, 4, 5]).should eq 18
+ end
+ it "test_ex2" do
+ sumdifference([1, 2, 3, 4, 5]).should eq 0
+ end
+ it "test_ex3" do
+ sumdifference([1, 2, 34]).should eq 27
+ end
+end
diff --git a/challenge-320/roger-bell-west/javascript/ch-1.js b/challenge-320/roger-bell-west/javascript/ch-1.js
new file mode 100755
index 0000000000..81fe7262df
--- /dev/null
+++ b/challenge-320/roger-bell-west/javascript/ch-1.js
@@ -0,0 +1,35 @@
+#! /usr/bin/node
+
+"use strict"
+
+function maximumcount(a) {
+ let pos = 0;
+ let neg = 0;
+ for (let n of a) {
+ if (n > 0) {
+ pos++;
+ } else if (n < 0) {
+ neg++;
+ }
+ }
+ return Math.max(pos, neg);
+}
+
+if (maximumcount([-3, -2, -1, 1, 2, 3]) == 3) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (maximumcount([-2, -1, 0, 0, 1]) == 2) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (maximumcount([1, 2, 3, 4]) == 4) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-320/roger-bell-west/javascript/ch-2.js b/challenge-320/roger-bell-west/javascript/ch-2.js
new file mode 100755
index 0000000000..c362fac6e0
--- /dev/null
+++ b/challenge-320/roger-bell-west/javascript/ch-2.js
@@ -0,0 +1,38 @@
+#! /usr/bin/node
+
+"use strict"
+
+function sumdifference(a) {
+ let delta = 0;
+ for (let x of a) {
+ if (x >= 10) {
+ let digitsum = 0;
+ let xa = x;
+ while (xa > 0) {
+ digitsum += xa % 10;
+ xa = Math.floor(xa / 10);
+ }
+ delta += x - digitsum;
+ }
+ }
+ return delta;
+}
+
+if (sumdifference([1, 23, 4, 5]) == 18) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (sumdifference([1, 2, 3, 4, 5]) == 0) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (sumdifference([1, 2, 34]) == 27) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-320/roger-bell-west/kotlin/ch-1.kt b/challenge-320/roger-bell-west/kotlin/ch-1.kt
new file mode 100644
index 0000000000..ea9f14b7c3
--- /dev/null
+++ b/challenge-320/roger-bell-west/kotlin/ch-1.kt
@@ -0,0 +1,35 @@
+fun maximumcount(a: List<Int>): Int {
+ var pos = 0
+ var neg = 0
+ for (n in a) {
+ if (n > 0) {
+ pos++
+ } else if (n < 0) {
+ neg++
+ }
+ }
+ return listOf(pos, neg).maxOrNull()!!
+}
+
+fun main() {
+
+ if (maximumcount(listOf(-3, -2, -1, 1, 2, 3)) == 3) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (maximumcount(listOf(-2, -1, 0, 0, 1)) == 2) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (maximumcount(listOf(1, 2, 3, 4)) == 4) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-320/roger-bell-west/kotlin/ch-2.kt b/challenge-320/roger-bell-west/kotlin/ch-2.kt
new file mode 100644
index 0000000000..7b47053d83
--- /dev/null
+++ b/challenge-320/roger-bell-west/kotlin/ch-2.kt
@@ -0,0 +1,38 @@
+fun sumdifference(a: List<Int>): Int {
+ var delta = 0
+ for (x in a) {
+ if (x >= 10) {
+ var digitsum = 0
+ var xa = x
+ while (xa > 0) {
+ digitsum += xa % 10
+ xa = xa / 10
+ }
+ delta += x - digitsum
+ }
+ }
+ return delta
+}
+
+fun main() {
+
+ if (sumdifference(listOf(1, 23, 4, 5)) == 18) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (sumdifference(listOf(1, 2, 3, 4, 5)) == 0) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (sumdifference(listOf(1, 2, 34)) == 27) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-320/roger-bell-west/lua/ch-1.lua b/challenge-320/roger-bell-west/lua/ch-1.lua
new file mode 100755
index 0000000000..6d27ada1b6
--- /dev/null
+++ b/challenge-320/roger-bell-west/lua/ch-1.lua
@@ -0,0 +1,36 @@
+#! /usr/bin/lua
+
+function maximumcount(a)
+ local pos = 0
+ local neg = 0
+ for _, n in ipairs(a) do
+ if n > 0 then
+ pos = pos + 1
+ elseif n < 0 then
+ neg = neg + 1
+ end
+ end
+ return math.max(pos, neg)
+end
+
+if maximumcount({-3, -2, -1, 1, 2, 3}) == 3 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if maximumcount({-2, -1, 0, 0, 1}) == 2 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if maximumcount({1, 2, 3, 4}) == 4 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-320/roger-bell-west/lua/ch-2.lua b/challenge-320/roger-bell-west/lua/ch-2.lua
new file mode 100755
index 0000000000..10b1d67c77
--- /dev/null
+++ b/challenge-320/roger-bell-west/lua/ch-2.lua
@@ -0,0 +1,39 @@
+#! /usr/bin/lua
+
+function sumdifference(a)
+ local delta = 0
+ for _, x in ipairs(a) do
+ if x >= 10 then
+ local digitsum = 0
+ local xa = x
+ while xa > 0 do
+ digitsum = digitsum + xa % 10
+ xa = xa // 10
+ end
+ delta = delta + x - digitsum
+ end
+ end
+ return delta
+end
+
+if sumdifference({1, 23, 4, 5}) == 18 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if sumdifference({1, 2, 3, 4, 5}) == 0 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if sumdifference({1, 2, 34}) == 27 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-320/roger-bell-west/perl/ch-1.pl b/challenge-320/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..ec2a38aa14
--- /dev/null
+++ b/challenge-320/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 => 3;
+
+is(maximumcount([-3, -2, -1, 1, 2, 3]), 3, 'example 1');
+is(maximumcount([-2, -1, 0, 0, 1]), 2, 'example 2');
+is(maximumcount([1, 2, 3, 4]), 4, 'example 3');
+
+use List::Util qw(max);
+
+sub maximumcount($a) {
+ my $pos = 0;
+ my $neg = 0;
+ foreach my $n (@{$a}) {
+ if ($n > 0) {
+ $pos++;
+ } elsif ($n < 0) {
+ $neg++;
+ }
+ }
+ max($pos, $neg);
+}
diff --git a/challenge-320/roger-bell-west/perl/ch-2.pl b/challenge-320/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..df3f7348a3
--- /dev/null
+++ b/challenge-320/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,27 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 3;
+
+is(sumdifference([1, 23, 4, 5]), 18, 'example 1');
+is(sumdifference([1, 2, 3, 4, 5]), 0, 'example 2');
+is(sumdifference([1, 2, 34]), 27, 'example 3');
+
+sub sumdifference($a) {
+ my $delta = 0;
+ foreach my $x (@{$a}) {
+ if ($x >= 10) {
+ my $digitsum = 0;
+ my $xa = $x;
+ while ($xa > 0) {
+ $digitsum += $xa % 10;
+ $xa = int($xa / 10);
+ }
+ $delta += $x - $digitsum;
+ }
+ }
+ $delta;
+}
diff --git a/challenge-320/roger-bell-west/postscript/ch-1.ps b/challenge-320/roger-bell-west/postscript/ch-1.ps
new file mode 100644
index 0000000000..e10a84a6e3
--- /dev/null
+++ b/challenge-320/roger-bell-west/postscript/ch-1.ps
@@ -0,0 +1,61 @@
+%!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.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
+
+
+% end included library code
+
+/maximumcount {
+ 0 dict begin
+ /pos 0 def
+ /ng 0 def
+ {
+ /n exch def
+ n 0 gt {
+ /pos pos 1 add def
+ } {
+ n 0 lt {
+ /ng ng 1 add def
+ } if
+ } ifelse
+ } forall
+ pos ng max
+ end
+} bind def
+
+(maximumcount) test.start
+[-3 -2 -1 1 2 3] maximumcount 3 eq test
+[-2 -1 0 0 1] maximumcount 2 eq test
+[1 2 3 4] maximumcount 4 eq test
+test.end
diff --git a/challenge-320/roger-bell-west/postscript/ch-2.ps b/challenge-320/roger-bell-west/postscript/ch-2.ps
new file mode 100644
index 0000000000..9b63dabff1
--- /dev/null
+++ b/challenge-320/roger-bell-west/postscript/ch-2.ps
@@ -0,0 +1,64 @@
+%!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
+
+/sumdifference {
+ 0 dict begin
+ 0 exch
+ {
+ /x exch def
+ x 10 ge {
+ /digitsum 0 def
+ /xa x def
+ {
+ xa 0 eq {
+ exit
+ } if
+ /digitsum digitsum xa 10 mod add def
+ /xa xa 10 idiv def
+ } loop
+ x add digitsum sub
+ } if
+ } forall
+ end
+} bind def
+
+(sumdifference) test.start
+[1 23 4 5] sumdifference 18 eq test
+[1 2 3 4 5] sumdifference 0 eq test
+[1 2 34] sumdifference 27 eq test
+test.end
diff --git a/challenge-320/roger-bell-west/python/ch-1.py b/challenge-320/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..1266001c43
--- /dev/null
+++ b/challenge-320/roger-bell-west/python/ch-1.py
@@ -0,0 +1,26 @@
+#! /usr/bin/python3
+
+def maximumcount(a):
+ pos = 0
+ neg = 0
+ for n in a:
+ if n > 0:
+ pos += 1
+ elif n < 0:
+ neg += 1
+ return max(pos, neg)
+
+import unittest
+
+class TestMaximumcount(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(maximumcount([-3, -2, -1, 1, 2, 3]), 3, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(maximumcount([-2, -1, 0, 0, 1]), 2, 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(maximumcount([1, 2, 3, 4]), 4, 'example 3')
+
+unittest.main()
diff --git a/challenge-320/roger-bell-west/python/ch-2.py b/challenge-320/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..8d031fd6f7
--- /dev/null
+++ b/challenge-320/roger-bell-west/python/ch-2.py
@@ -0,0 +1,28 @@
+#! /usr/bin/python3
+
+def sumdifference(a):
+ delta = 0
+ for x in a:
+ if x >= 10:
+ digitsum = 0
+ xa = x
+ while xa > 0:
+ digitsum += xa % 10
+ xa = int(xa / 10)
+ delta += x - digitsum
+ return delta
+
+import unittest
+
+class TestSumdifference(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(sumdifference([1, 23, 4, 5]), 18, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(sumdifference([1, 2, 3, 4, 5]), 0, 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(sumdifference([1, 2, 34]), 27, 'example 3')
+
+unittest.main()
diff --git a/challenge-320/roger-bell-west/raku/ch-1.p6 b/challenge-320/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..ff691f34e3
--- /dev/null
+++ b/challenge-320/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,22 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 3;
+
+is(maximumcount([-3, -2, -1, 1, 2, 3]), 3, 'example 1');
+is(maximumcount([-2, -1, 0, 0, 1]), 2, 'example 2');
+is(maximumcount([1, 2, 3, 4]), 4, 'example 3');
+
+sub maximumcount(@a) {
+ my $pos = 0;
+ my $neg = 0;
+ for @a -> $n {
+ if ($n > 0) {
+ $pos++;
+ } elsif ($n < 0) {
+ $neg++;
+ }
+ }
+ max($pos, $neg);
+}
diff --git a/challenge-320/roger-bell-west/raku/ch-2.p6 b/challenge-320/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..bad78fce1f
--- /dev/null
+++ b/challenge-320/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,25 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 3;
+
+is(sumdifference([1, 23, 4, 5]), 18, 'example 1');
+is(sumdifference([1, 2, 3, 4, 5]), 0, 'example 2');
+is(sumdifference([1, 2, 34]), 27, 'example 3');
+
+sub sumdifference(@a) {
+ my $delta = 0;
+ for @a -> $x {
+ if ($x >= 10) {
+ my $digitsum = 0;
+ my $xa = $x;
+ while ($xa > 0) {
+ $digitsum += $xa % 10;
+ $xa = floor($xa / 10);
+ }
+ $delta += $x - $digitsum;
+ }
+ }
+ $delta;
+}
diff --git a/challenge-320/roger-bell-west/ruby/ch-1.rb b/challenge-320/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..07172f8d7a
--- /dev/null
+++ b/challenge-320/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,32 @@
+#! /usr/bin/ruby
+
+def maximumcount(a)
+ pos = 0
+ neg = 0
+ a.each do |n|
+ if n > 0
+ pos += 1
+ elsif n < 0
+ neg += 1
+ end
+ end
+ [pos, neg].max
+end
+
+require 'test/unit'
+
+class TestMaximumcount < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(3, maximumcount([-3, -2, -1, 1, 2, 3]))
+ end
+
+ def test_ex2
+ assert_equal(2, maximumcount([-2, -1, 0, 0, 1]))
+ end
+
+ def test_ex3
+ assert_equal(4, maximumcount([1, 2, 3, 4]))
+ end
+
+end
diff --git a/challenge-320/roger-bell-west/ruby/ch-2.rb b/challenge-320/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..0d1bf88aaf
--- /dev/null
+++ b/challenge-320/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,35 @@
+#! /usr/bin/ruby
+
+def sumdifference(a)
+ delta = 0
+ a.each do |x|
+ if x >= 10
+ digitsum = 0
+ xa = x
+ while xa > 0
+ (xa, y) = xa.divmod(10)
+ digitsum += y
+ end
+ delta += x - digitsum
+ end
+ end
+ delta
+end
+
+require 'test/unit'
+
+class TestSumdifference < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(18, sumdifference([1, 23, 4, 5]))
+ end
+
+ def test_ex2
+ assert_equal(0, sumdifference([1, 2, 3, 4, 5]))
+ end
+
+ def test_ex3
+ assert_equal(27, sumdifference([1, 2, 34]))
+ end
+
+end
diff --git a/challenge-320/roger-bell-west/rust/ch-1.rs b/challenge-320/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..5d8eb95f1f
--- /dev/null
+++ b/challenge-320/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,30 @@
+#! /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!(maximumcount(vec![-3, -2, -1, 1, 2, 3]), 3);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(maximumcount(vec![-2, -1, 0, 0, 1]), 2);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(maximumcount(vec![1, 2, 3, 4]), 4);
+}
+
+fn maximumcount(a: Vec<i32>) -> usize {
+ let mut pos = 0;
+ let mut neg = 0;
+ for n in a {
+ if n > 0 {
+ pos += 1;
+ } else if n < 0 {
+ neg += 1;
+ }
+ }
+ std::cmp::max(pos, neg)
+}
diff --git a/challenge-320/roger-bell-west/rust/ch-2.rs b/challenge-320/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..3f7746556c
--- /dev/null
+++ b/challenge-320/roger-bell-west/rust/ch-2.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!(sumdifference(vec![1, 23, 4, 5]), 18);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(sumdifference(vec![1, 2, 3, 4, 5]), 0);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(sumdifference(vec![1, 2, 34]), 27);
+}
+
+fn sumdifference(a: Vec<u32>) -> u32 {
+ let mut delta = 0;
+ for x in a {
+ if x >= 10 {
+ let mut digitsum = 0;
+ let mut xa = x;
+ while xa > 0 {
+ digitsum += xa % 10;
+ xa /= 10;
+ }
+ delta += x - digitsum;
+ }
+ }
+ delta
+}
diff --git a/challenge-320/roger-bell-west/scala/ch-1.scala b/challenge-320/roger-bell-west/scala/ch-1.scala
new file mode 100644
index 0000000000..c70ed047e2
--- /dev/null
+++ b/challenge-320/roger-bell-west/scala/ch-1.scala
@@ -0,0 +1,38 @@
+
+object Maximumcount {
+
+ def maximumcount(a: List[Int]): Int = {
+ var pos = 0
+ var neg = 0
+ for (n <- a) {
+ if (n > 0) {
+ pos += 1
+ } else if (n < 0) {
+ neg += 1
+ }
+ }
+ List(pos, neg).max
+ }
+
+ def main(args: Array[String]) {
+ if (maximumcount(List(-3, -2, -1, 1, 2, 3)) == 3) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (maximumcount(List(-2, -1, 0, 0, 1)) == 2) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (maximumcount(List(1, 2, 3, 4)) == 4) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+ }
+}
diff --git a/challenge-320/roger-bell-west/scala/ch-2.scala b/challenge-320/roger-bell-west/scala/ch-2.scala
new file mode 100644
index 0000000000..95e0610c3d
--- /dev/null
+++ b/challenge-320/roger-bell-west/scala/ch-2.scala
@@ -0,0 +1,41 @@
+
+object Sumdifference {
+
+ def sumdifference(a: List[Int]): Int = {
+ var delta = 0
+ for (x <- a) {
+ if (x >= 10) {
+ var digitsum = 0
+ var xa = x
+ while (xa > 0) {
+ digitsum += xa % 10
+ xa = xa / 10
+ }
+ delta += x - digitsum
+ }
+ }
+ return delta
+ }
+
+ def main(args: Array[String]) {
+ if (sumdifference(List(1, 23, 4, 5)) == 18) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (sumdifference(List(1, 2, 3, 4, 5)) == 0) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (sumdifference(List(1, 2, 34)) == 27) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+ }
+}
diff --git a/challenge-320/roger-bell-west/tests.json b/challenge-320/roger-bell-west/tests.json
new file mode 100644
index 0000000000..dd19d552b9
--- /dev/null
+++ b/challenge-320/roger-bell-west/tests.json
@@ -0,0 +1,32 @@
+{
+ "ch-1" : [
+ {
+ "function" : "maximumcount",
+ "arguments" : [-3, -2, -1, 1, 2, 3],
+ "result" : 3
+ },
+ {
+ "arguments" : [-2, -1, 0, 0, 1],
+ "result" : 2
+ },
+ {
+ "arguments" : [1, 2, 3, 4],
+ "result" : 4
+ }
+ ],
+ "ch-2" : [
+ {
+ "function" : "sumdifference",
+ "arguments" : [ 1, 23, 4, 5 ],
+ "result" : 18
+ },
+ {
+ "arguments" : [ 1, 2, 3, 4, 5 ],
+ "result" : 0
+ },
+ {
+ "arguments" : [ 1, 2, 34 ],
+ "result" : 27
+ }
+ ]
+}
diff --git a/challenge-320/roger-bell-west/typst/ch-1.typ b/challenge-320/roger-bell-west/typst/ch-1.typ
new file mode 100644
index 0000000000..545077f5da
--- /dev/null
+++ b/challenge-320/roger-bell-west/typst/ch-1.typ
@@ -0,0 +1,30 @@
+#let maximumcount(a) = {
+ let pos = 0
+ let neg = 0
+ for n in a {
+ if n > 0 {
+ pos += 1
+ } else if n < 0 {
+ neg += 1
+ }
+ }
+ calc.max(pos, neg)
+}
+
+#let testresult(pass) = {
+ if pass {
+ text(fill: green, "Pass")
+ } else {
+ text(fill: red, "Fail")
+ }
+}
+
+Test 1:
+ #testresult(maximumcount((-3, -2, -1, 1, 2, 3)) == 3)
+
+Test 2:
+ #testresult(maximumcount((-2, -1, 0, 0, 1)) == 2)
+
+Test 3:
+ #testresult(maximumcount((1, 2, 3, 4)) == 4)
+
diff --git a/challenge-320/roger-bell-west/typst/ch-2.typ b/challenge-320/roger-bell-west/typst/ch-2.typ
new file mode 100644
index 0000000000..59db0198f0
--- /dev/null
+++ b/challenge-320/roger-bell-west/typst/ch-2.typ
@@ -0,0 +1,33 @@
+#let sumdifference(a) = {
+ let delta = 0
+ for x in a {
+ if x >= 10 {
+ let digitsum = 0
+ let xa = x
+ while xa > 0 {
+ digitsum += calc.rem-euclid(xa, 10)
+ xa = calc.div-euclid(xa, 10)
+ }
+ delta += x - digitsum
+ }
+ }
+ delta
+}
+
+#let testresult(pass) = {
+ if pass {
+ text(fill: green, "Pass")
+ } else {
+ text(fill: red, "Fail")
+ }
+}
+
+Test 1:
+ #testresult(sumdifference((1, 23, 4, 5)) == 18)
+
+Test 2:
+ #testresult(sumdifference((1, 2, 3, 4, 5)) == 0)
+
+Test 3:
+ #testresult(sumdifference((1, 2, 34)) == 27)
+