aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2024-08-20 15:04:40 +0100
committerGitHub <noreply@github.com>2024-08-20 15:04:40 +0100
commit869c1b1b6aaa5bb50c814d04dc2e109e1b78e44c (patch)
tree9e9b6dba975ba3698942556976a8190a4224db71
parenta75f2fa5d08fc4e7ebd0f190eab077ef8f8badba (diff)
parent64e4444d06a421e83688678fb47e8c5d8f4ba987 (diff)
downloadperlweeklychallenge-club-869c1b1b6aaa5bb50c814d04dc2e109e1b78e44c.tar.gz
perlweeklychallenge-club-869c1b1b6aaa5bb50c814d04dc2e109e1b78e44c.tar.bz2
perlweeklychallenge-club-869c1b1b6aaa5bb50c814d04dc2e109e1b78e44c.zip
Merge pull request #10670 from Firedrake/rogerbw-challenge-283
RogerBW solutions for challenge no. 283
-rwxr-xr-xchallenge-283/roger-bell-west/crystal/ch-1.cr25
-rwxr-xr-xchallenge-283/roger-bell-west/crystal/ch-2.cr24
-rwxr-xr-xchallenge-283/roger-bell-west/javascript/ch-1.js45
-rwxr-xr-xchallenge-283/roger-bell-west/javascript/ch-2.js32
-rw-r--r--challenge-283/roger-bell-west/kotlin/ch-1.kt41
-rw-r--r--challenge-283/roger-bell-west/kotlin/ch-2.kt29
-rwxr-xr-xchallenge-283/roger-bell-west/lua/ch-1.lua47
-rwxr-xr-xchallenge-283/roger-bell-west/lua/ch-2.lua36
-rwxr-xr-xchallenge-283/roger-bell-west/perl/ch-1.pl23
-rwxr-xr-xchallenge-283/roger-bell-west/perl/ch-2.pl21
-rw-r--r--challenge-283/roger-bell-west/postscript/ch-1.ps80
-rw-r--r--challenge-283/roger-bell-west/postscript/ch-2.ps71
-rwxr-xr-xchallenge-283/roger-bell-west/python/ch-1.py27
-rwxr-xr-xchallenge-283/roger-bell-west/python/ch-2.py24
-rwxr-xr-xchallenge-283/roger-bell-west/raku/ch-1.p621
-rwxr-xr-xchallenge-283/roger-bell-west/raku/ch-2.p619
-rwxr-xr-xchallenge-283/roger-bell-west/ruby/ch-1.rb32
-rwxr-xr-xchallenge-283/roger-bell-west/ruby/ch-2.rb29
-rwxr-xr-xchallenge-283/roger-bell-west/rust/ch-1.rs31
-rwxr-xr-xchallenge-283/roger-bell-west/rust/ch-2.rs21
-rw-r--r--challenge-283/roger-bell-west/scala/ch-1.scala44
-rw-r--r--challenge-283/roger-bell-west/scala/ch-2.scala32
-rw-r--r--challenge-283/roger-bell-west/tests.json32
23 files changed, 786 insertions, 0 deletions
diff --git a/challenge-283/roger-bell-west/crystal/ch-1.cr b/challenge-283/roger-bell-west/crystal/ch-1.cr
new file mode 100755
index 0000000000..52315dc1f8
--- /dev/null
+++ b/challenge-283/roger-bell-west/crystal/ch-1.cr
@@ -0,0 +1,25 @@
+#! /usr/bin/crystal
+
+def uniquenumber(a)
+ c = Hash(Int32, Int32).new(default_value: 0)
+ a.each do |n|
+ c[n] += 1
+ end
+ c.select{|k, v| v == 1}.map{|k, v| k}[0]
+end
+
+require "spec"
+describe "uniquenumber" do
+ it "test_ex1" do
+ uniquenumber([3, 3, 1]).should eq 1
+ end
+ it "test_ex2" do
+ uniquenumber([3, 2, 4, 2, 4]).should eq 3
+ end
+ it "test_ex3" do
+ uniquenumber([1]).should eq 1
+ end
+ it "test_ex4" do
+ uniquenumber([4, 3, 1, 1, 1, 4]).should eq 3
+ end
+end
diff --git a/challenge-283/roger-bell-west/crystal/ch-2.cr b/challenge-283/roger-bell-west/crystal/ch-2.cr
new file mode 100755
index 0000000000..85550aefe2
--- /dev/null
+++ b/challenge-283/roger-bell-west/crystal/ch-2.cr
@@ -0,0 +1,24 @@
+#! /usr/bin/crystal
+
+def digitcountvalue(a)
+ c = Hash(Int32, Int32).new(default_value: 0)
+ a.each do |n|
+ c[n] += 1
+ end
+ 0.upto(a.size - 1) do |ix|
+ if a[ix] != c[ix]
+ return false
+ end
+ end
+ true
+end
+
+require "spec"
+describe "digitcountvalue" do
+ it "test_ex1" do
+ digitcountvalue([1, 2, 1, 0]).should eq true
+ end
+ it "test_ex2" do
+ digitcountvalue([0, 3, 0]).should eq false
+ end
+end
diff --git a/challenge-283/roger-bell-west/javascript/ch-1.js b/challenge-283/roger-bell-west/javascript/ch-1.js
new file mode 100755
index 0000000000..259805d837
--- /dev/null
+++ b/challenge-283/roger-bell-west/javascript/ch-1.js
@@ -0,0 +1,45 @@
+#! /usr/bin/node
+
+"use strict"
+
+function uniquenumber(a) {
+ let c = new Map();
+ for (let p of a) {
+ if (c.has(p)) {
+ c.set(p,c.get(p)+1);
+ } else {
+ c.set(p,1);
+ }
+ }
+ for (let p of c.keys()) {
+ if (c.get(p) == 1) {
+ return p;
+ }
+ }
+ return -1;
+}
+
+if (uniquenumber([3, 3, 1]) == 1) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (uniquenumber([3, 2, 4, 2, 4]) == 3) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (uniquenumber([1]) == 1) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (uniquenumber([4, 3, 1, 1, 1, 4]) == 3) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-283/roger-bell-west/javascript/ch-2.js b/challenge-283/roger-bell-west/javascript/ch-2.js
new file mode 100755
index 0000000000..cf24c061c9
--- /dev/null
+++ b/challenge-283/roger-bell-west/javascript/ch-2.js
@@ -0,0 +1,32 @@
+#! /usr/bin/node
+
+"use strict"
+
+function digitcountvalue(a) {
+ let c = new Map();
+ for (let ix = 0; ix < a.length; ix++) {
+ c.set(ix, 0);
+ }
+ for (let p of a) {
+ c.set(p, c.get(p) + 1);
+ }
+ for (let ix = 0; ix < a.length; ix++) {
+ if (a[ix] != c.get(ix)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+if (digitcountvalue([1, 2, 1, 0])) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (!digitcountvalue([0, 3, 0])) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-283/roger-bell-west/kotlin/ch-1.kt b/challenge-283/roger-bell-west/kotlin/ch-1.kt
new file mode 100644
index 0000000000..037a2d70fb
--- /dev/null
+++ b/challenge-283/roger-bell-west/kotlin/ch-1.kt
@@ -0,0 +1,41 @@
+fun uniquenumber(a: List<Int>): Int {
+ var c = mutableMapOf<Int, Int>().withDefault({0})
+ for (p in a) {
+ c.set(p, c.getValue(p) + 1)
+ }
+ for (p in c.keys) {
+ if (c.getValue(p) == 1) {
+ return p
+ }
+ }
+ return -1
+}
+
+fun main() {
+
+ if (uniquenumber(listOf(3, 3, 1)) == 1) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (uniquenumber(listOf(3, 2, 4, 2, 4)) == 3) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (uniquenumber(listOf(1)) == 1) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (uniquenumber(listOf(4, 3, 1, 1, 1, 4)) == 3) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-283/roger-bell-west/kotlin/ch-2.kt b/challenge-283/roger-bell-west/kotlin/ch-2.kt
new file mode 100644
index 0000000000..77807f17cd
--- /dev/null
+++ b/challenge-283/roger-bell-west/kotlin/ch-2.kt
@@ -0,0 +1,29 @@
+fun digitcountvalue(a: List<Int>): Boolean {
+ var c = mutableMapOf<Int, Int>().withDefault({0})
+ for (p in a) {
+ c.set(p, c.getValue(p) + 1)
+ }
+ for (ix in 0 .. a.size - 1) {
+ if (a[ix] != c.getValue(ix)) {
+ return false
+ }
+ }
+ return true
+}
+
+fun main() {
+
+ if (digitcountvalue(listOf(1, 2, 1, 0))) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (!digitcountvalue(listOf(0, 3, 0))) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-283/roger-bell-west/lua/ch-1.lua b/challenge-283/roger-bell-west/lua/ch-1.lua
new file mode 100755
index 0000000000..0aed7ca01b
--- /dev/null
+++ b/challenge-283/roger-bell-west/lua/ch-1.lua
@@ -0,0 +1,47 @@
+#! /usr/bin/lua
+
+function uniquenumber(a)
+ local c = {}
+ for _, n in ipairs(a) do
+ if c[n] == nil then
+ c[n] = 1
+ else
+ c[n] = c[n] + 1
+ end
+ end
+ for k, v in pairs(c) do
+ if v == 1 then
+ return k
+ end
+ end
+ return -1
+end
+
+if uniquenumber({3, 3, 1}) == 1 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if uniquenumber({3, 2, 4, 2, 4}) == 3 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if uniquenumber({1}) == 1 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if uniquenumber({4, 3, 1, 1, 1, 4}) == 3 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-283/roger-bell-west/lua/ch-2.lua b/challenge-283/roger-bell-west/lua/ch-2.lua
new file mode 100755
index 0000000000..ef6f8fda89
--- /dev/null
+++ b/challenge-283/roger-bell-west/lua/ch-2.lua
@@ -0,0 +1,36 @@
+#! /usr/bin/lua
+
+function digitcountvalue(a)
+ local c = {}
+ for ix = 1, #a do
+ c[ix - 1] = 0
+ end
+ for _, n in ipairs(a) do
+ if c[n] == nil then
+ c[n] = 1
+ else
+ c[n] = c[n] + 1
+ end
+ end
+ for ix = 1, #a do
+ if a[ix] ~= c[ix - 1] then
+ return false
+ end
+ end
+ return true
+end
+
+if digitcountvalue({1, 2, 1, 0}) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if not digitcountvalue({0, 3, 0}) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-283/roger-bell-west/perl/ch-1.pl b/challenge-283/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..2a64c93691
--- /dev/null
+++ b/challenge-283/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,23 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 4;
+
+is(uniquenumber([3, 3, 1]), 1, 'example 1');
+is(uniquenumber([3, 2, 4, 2, 4]), 3, 'example 2');
+is(uniquenumber([1]), 1, 'example 3');
+is(uniquenumber([4, 3, 1, 1, 1, 4]), 3, 'example 4');
+
+sub uniquenumber($a) {
+ my %c;
+ map {$c{$_}++} @{$a};
+ while (my ($k, $v) = each %c) {
+ if ($v == 1) {
+ return $k;
+ }
+ }
+ return -1;
+}
diff --git a/challenge-283/roger-bell-west/perl/ch-2.pl b/challenge-283/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..1a944d4f1e
--- /dev/null
+++ b/challenge-283/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,21 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 2;
+
+is(digitcountvalue([1, 2, 1, 0]), 1, 'example 1');
+is(digitcountvalue([0, 3, 0]), 0, 'example 2');
+
+sub digitcountvalue($a) {
+ my %c;
+ map {$c{$_}++} @{$a};
+ foreach my $ix (0 .. $#{$a}) {
+ if ($a->[$ix] != ($c{$ix} || 0)) {
+ return 0;
+ }
+ }
+ return 1;
+}
diff --git a/challenge-283/roger-bell-west/postscript/ch-1.ps b/challenge-283/roger-bell-west/postscript/ch-1.ps
new file mode 100644
index 0000000000..aa6d534372
--- /dev/null
+++ b/challenge-283/roger-bell-west/postscript/ch-1.ps
@@ -0,0 +1,80 @@
+%!PS
+
+% begin included library code
+% see https://codeberg.org/Firedrake/postscript-libraries/
+/keys { % dict -> array of dict keys
+ [ exch
+ {
+ pop
+ } forall
+ ]
+} 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
+
+/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
+
+/dget {
+ 3 1 roll
+ 2 copy
+ known {
+ get exch pop
+ } {
+ pop pop
+ } ifelse
+} bind def
+
+
+% end included library code
+
+/uniquenumber {
+ 0 dict begin
+ /c 0 dict def
+ {
+ /n exch def
+ c n c n 0 dget 1 add put
+ } forall
+ -1
+ c keys {
+ /n exch def
+ c n 0 dget 1 eq {
+ pop n
+ exit
+ } if
+ } forall
+ end
+} bind def
+
+(uniquenumber) test.start
+[3 3 1] uniquenumber 1 eq test
+[3 2 4 2 4] uniquenumber 3 eq test
+[1] uniquenumber 1 eq test
+[4 3 1 1 1 4] uniquenumber 3 eq test
+test.end
diff --git a/challenge-283/roger-bell-west/postscript/ch-2.ps b/challenge-283/roger-bell-west/postscript/ch-2.ps
new file mode 100644
index 0000000000..7c0f9ba2bb
--- /dev/null
+++ b/challenge-283/roger-bell-west/postscript/ch-2.ps
@@ -0,0 +1,71 @@
+%!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 {
+ /test.count test.count 1 add def
+ {
+ /test.pass test.pass 1 add def
+ } {
+ ( ) print
+ test.count (....) cvs print
+ (-fail) print
+ } ifelse
+} bind def
+
+/dget {
+ 3 1 roll
+ 2 copy
+ known {
+ get exch pop
+ } {
+ pop pop
+ } 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
+
+
+% end included library code
+
+/digitcountvalue {
+ 0 dict begin
+ /a exch def
+ /c 0 dict def
+ a {
+ /n exch def
+ c n c n 0 dget 1 add put
+ } forall
+ true
+ 0 1 a length 1 sub {
+ /ix exch def
+ a ix get c ix 0 dget ne {
+ pop false
+ exit
+ } if
+ } for
+ end
+} bind def
+
+(digitcountvalue) test.start
+[1 2 1 0] digitcountvalue test
+[0 3 0] digitcountvalue not test
+test.end
diff --git a/challenge-283/roger-bell-west/python/ch-1.py b/challenge-283/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..2faf69700a
--- /dev/null
+++ b/challenge-283/roger-bell-west/python/ch-1.py
@@ -0,0 +1,27 @@
+#! /usr/bin/python3
+
+from collections import defaultdict
+
+def uniquenumber(a):
+ c = defaultdict(lambda: 0)
+ for n in a:
+ c[n] += 1
+ return [k for k in c.keys() if c[k] == 1][0]
+
+import unittest
+
+class TestUniquenumber(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(uniquenumber([3, 3, 1]), 1, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(uniquenumber([3, 2, 4, 2, 4]), 3, 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(uniquenumber([1]), 1, 'example 3')
+
+ def test_ex4(self):
+ self.assertEqual(uniquenumber([4, 3, 1, 1, 1, 4]), 3, 'example 4')
+
+unittest.main()
diff --git a/challenge-283/roger-bell-west/python/ch-2.py b/challenge-283/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..d672bdc6e3
--- /dev/null
+++ b/challenge-283/roger-bell-west/python/ch-2.py
@@ -0,0 +1,24 @@
+#! /usr/bin/python3
+
+from collections import defaultdict
+
+def digitcountvalue(a):
+ c = defaultdict(lambda: 0)
+ for n in a:
+ c[n] += 1
+ for ix in range(len(a)):
+ if a[ix] != c[ix]:
+ return False;
+ return True
+
+import unittest
+
+class TestDigitcountvalue(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(digitcountvalue([1, 2, 1, 0]), True, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(digitcountvalue([0, 3, 0]), False, 'example 2')
+
+unittest.main()
diff --git a/challenge-283/roger-bell-west/raku/ch-1.p6 b/challenge-283/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..c1df149cea
--- /dev/null
+++ b/challenge-283/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,21 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 4;
+
+is(uniquenumber([3, 3, 1]), 1, 'example 1');
+is(uniquenumber([3, 2, 4, 2, 4]), 3, 'example 2');
+is(uniquenumber([1]), 1, 'example 3');
+is(uniquenumber([4, 3, 1, 1, 1, 4]), 3, 'example 4');
+
+sub uniquenumber(@a) {
+ my %c;
+ @a.map({%c{$_}++});
+ for %c.kv -> $k, $v {
+ if ($v == 1) {
+ return $k;
+ }
+ }
+ return -1;
+}
diff --git a/challenge-283/roger-bell-west/raku/ch-2.p6 b/challenge-283/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..aaf3446a75
--- /dev/null
+++ b/challenge-283/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,19 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 2;
+
+is(digitcountvalue([1, 2, 1, 0]), True, 'example 1');
+is(digitcountvalue([0, 3, 0]), False, 'example 2');
+
+sub digitcountvalue(@a) {
+ my %c;
+ @a.map({%c{$_}++});
+ for 0 .. @a.end -> $ix {
+ if (@a[$ix] != (%c{$ix} || 0)) {
+ return False;
+ }
+ }
+ return True;
+}
diff --git a/challenge-283/roger-bell-west/ruby/ch-1.rb b/challenge-283/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..9c5f5bf785
--- /dev/null
+++ b/challenge-283/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,32 @@
+#! /usr/bin/ruby
+
+def uniquenumber(a)
+ c = Hash.new
+ c.default = 0
+ a.each do |n|
+ c[n] += 1
+ end
+ c.select{|k, v| v == 1}.map{|k, v| k}[0]
+end
+
+require 'test/unit'
+
+class TestUniquenumber < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(1, uniquenumber([3, 3, 1]))
+ end
+
+ def test_ex2
+ assert_equal(3, uniquenumber([3, 2, 4, 2, 4]))
+ end
+
+ def test_ex3
+ assert_equal(1, uniquenumber([1]))
+ end
+
+ def test_ex4
+ assert_equal(3, uniquenumber([4, 3, 1, 1, 1, 4]))
+ end
+
+end
diff --git a/challenge-283/roger-bell-west/ruby/ch-2.rb b/challenge-283/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..459fc57223
--- /dev/null
+++ b/challenge-283/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,29 @@
+#! /usr/bin/ruby
+
+def digitcountvalue(a)
+ c = Hash.new
+ c.default = 0
+ a.each do |n|
+ c[n] += 1
+ end
+ 0.upto(a.size - 1) do |ix|
+ if a[ix] != c[ix]
+ return false
+ end
+ end
+ true
+end
+
+require 'test/unit'
+
+class TestDigitcountvalue < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(true, digitcountvalue([1, 2, 1, 0]))
+ end
+
+ def test_ex2
+ assert_equal(false, digitcountvalue([0, 3, 0]))
+ end
+
+end
diff --git a/challenge-283/roger-bell-west/rust/ch-1.rs b/challenge-283/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..e8a6b0bf9f
--- /dev/null
+++ b/challenge-283/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,31 @@
+use counter::Counter;
+
+#[test]
+fn test_ex1() {
+ assert_eq!(uniquenumber(vec![3, 3, 1]), 1);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(uniquenumber(vec![3, 2, 4, 2, 4]), 3);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(uniquenumber(vec![1]), 1);
+}
+
+#[test]
+fn test_ex4() {
+ assert_eq!(uniquenumber(vec![4, 3, 1, 1, 1, 4]), 3);
+}
+
+fn uniquenumber(a: Vec<i32>) -> i32 {
+ let c = a.into_iter().collect::<Counter<_>>();
+ for (k, v) in c.iter() {
+ if *v == 1 {
+ return *k;
+ }
+ }
+ -1
+}
diff --git a/challenge-283/roger-bell-west/rust/ch-2.rs b/challenge-283/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..ad700b23ec
--- /dev/null
+++ b/challenge-283/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,21 @@
+use counter::Counter;
+
+#[test]
+fn test_ex1() {
+ assert_eq!(digitcountvalue(vec![1, 2, 1, 0]), true);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(digitcountvalue(vec![0, 3, 0]), false);
+}
+
+fn digitcountvalue(a: Vec<usize>) -> bool {
+ let c = a.clone().into_iter().collect::<Counter<_>>();
+ for ix in 0..a.len() {
+ if a[ix] != c[&ix] {
+ return false;
+ }
+ }
+ true
+}
diff --git a/challenge-283/roger-bell-west/scala/ch-1.scala b/challenge-283/roger-bell-west/scala/ch-1.scala
new file mode 100644
index 0000000000..1d3a6384d5
--- /dev/null
+++ b/challenge-283/roger-bell-west/scala/ch-1.scala
@@ -0,0 +1,44 @@
+import scala.collection.mutable
+
+object Uniquenumber {
+ def uniquenumber(a: List[Int]): Int = {
+ var c = mutable.Map.empty[Int, Int].withDefaultValue(0)
+ for (p <- a) {
+ c += (p -> (c(p) + 1))
+ }
+ var ret = -1;
+ for (p <- c.keys) {
+ if (ret == -1 && c(p) == 1) {
+ ret = p
+ }
+ }
+ return ret
+ }
+ def main(args: Array[String]) {
+ if (uniquenumber(List(3, 3, 1)) == 1) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (uniquenumber(List(3, 2, 4, 2, 4)) == 3) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (uniquenumber(List(1)) == 1) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (uniquenumber(List(4, 3, 1, 1, 1, 4)) == 3) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+ }
+}
diff --git a/challenge-283/roger-bell-west/scala/ch-2.scala b/challenge-283/roger-bell-west/scala/ch-2.scala
new file mode 100644
index 0000000000..3bbacfdd5d
--- /dev/null
+++ b/challenge-283/roger-bell-west/scala/ch-2.scala
@@ -0,0 +1,32 @@
+import scala.collection.mutable
+
+object Digitcountvalue {
+ def digitcountvalue(a: List[Int]): Boolean = {
+ var c = mutable.Map.empty[Int, Int].withDefaultValue(0)
+ for (p <- a) {
+ c += (p -> (c(p) + 1))
+ }
+ var ret = true
+ for (ix <- 0 until a.size) {
+ if (a(ix) != c(ix)) {
+ ret = false
+ }
+ }
+ ret
+ }
+ def main(args: Array[String]) {
+ if (digitcountvalue(List(1, 2, 1, 0))) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (!digitcountvalue(List(0, 3, 0))) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+ }
+}
diff --git a/challenge-283/roger-bell-west/tests.json b/challenge-283/roger-bell-west/tests.json
new file mode 100644
index 0000000000..e6d52f8fea
--- /dev/null
+++ b/challenge-283/roger-bell-west/tests.json
@@ -0,0 +1,32 @@
+{
+ "ch-1" : [
+ {
+ "function" : "uniquenumber",
+ "arguments" : [ 3, 3, 1 ],
+ "result" : 1
+ },
+ {
+ "arguments" : [ 3, 2, 4, 2, 4 ],
+ "result" : 3
+ },
+ {
+ "arguments" : [ 1 ],
+ "result" : 1
+ },
+ {
+ "arguments" : [ 4, 3, 1, 1, 1, 4 ],
+ "result" : 3
+ }
+ ],
+ "ch-2" : [
+ {
+ "function" : "digitcountvalue",
+ "arguments" : [ 1, 2, 1, 0 ],
+ "result" : true
+ },
+ {
+ "arguments" : [ 0, 3, 0 ],
+ "result": false
+ }
+ ]
+}