aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-194/roger-bell-west/javascript/ch-1.js65
-rwxr-xr-xchallenge-194/roger-bell-west/javascript/ch-2.js41
-rw-r--r--challenge-194/roger-bell-west/kotlin/ch-1.kt58
-rw-r--r--challenge-194/roger-bell-west/kotlin/ch-2.kt34
-rwxr-xr-xchallenge-194/roger-bell-west/lua/ch-1.lua58
-rwxr-xr-xchallenge-194/roger-bell-west/lua/ch-2.lua43
-rwxr-xr-xchallenge-194/roger-bell-west/perl/ch-1.pl34
-rwxr-xr-xchallenge-194/roger-bell-west/perl/ch-2.pl24
-rw-r--r--challenge-194/roger-bell-west/postscript/ch-1.ps84
-rw-r--r--challenge-194/roger-bell-west/postscript/ch-2.ps141
-rwxr-xr-xchallenge-194/roger-bell-west/python/ch-1.py41
-rwxr-xr-xchallenge-194/roger-bell-west/python/ch-2.py27
-rwxr-xr-xchallenge-194/roger-bell-west/raku/ch-1.p632
-rwxr-xr-xchallenge-194/roger-bell-west/raku/ch-2.p622
-rwxr-xr-xchallenge-194/roger-bell-west/ruby/ch-1.rb51
-rwxr-xr-xchallenge-194/roger-bell-west/ruby/ch-2.rb34
-rwxr-xr-xchallenge-194/roger-bell-west/rust/ch-1.rs53
-rwxr-xr-xchallenge-194/roger-bell-west/rust/ch-2.rs34
18 files changed, 876 insertions, 0 deletions
diff --git a/challenge-194/roger-bell-west/javascript/ch-1.js b/challenge-194/roger-bell-west/javascript/ch-1.js
new file mode 100755
index 0000000000..eed8a48113
--- /dev/null
+++ b/challenge-194/roger-bell-west/javascript/ch-1.js
@@ -0,0 +1,65 @@
+#! /usr/bin/node
+
+"use strict"
+
+function digitalclock(hhmm) {
+ let i = hhmm.indexOf("?");
+ if (i == 0) {
+ if (hhmm.charAt(1) <= "3") {
+ return 2;
+ }
+ return 1;
+ } else if (i == 1) {
+ if (hhmm.charAt(0) < "2") {
+ return 9;
+ }
+ return 3;
+ } else if (i == 3) {
+ return 5;
+ } else if (i == 4) {
+ return 9;
+ }
+ return 0;
+}
+
+if (digitalclock("?5:00") == 1) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+
+if (digitalclock("?3:00") == 2) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+
+if (digitalclock("1?:00") == 9) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+
+if (digitalclock("2?:00") == 3) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+
+if (digitalclock("12:?5") == 5) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+
+if (digitalclock("12:5?") == 9) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-194/roger-bell-west/javascript/ch-2.js b/challenge-194/roger-bell-west/javascript/ch-2.js
new file mode 100755
index 0000000000..29be8475e4
--- /dev/null
+++ b/challenge-194/roger-bell-west/javascript/ch-2.js
@@ -0,0 +1,41 @@
+#! /usr/bin/node
+
+"use strict"
+
+function frequencyequalizer(s) {
+ let f = new Map();
+ for (let c of s.split("")) {
+ if (f.has(c)) {
+ f.set(c, f.get(c) + 1);
+ } else {
+ f.set(c, 1);
+ }
+ }
+ let v = [...f.values()].sort();
+ if (v[0] == v[v.length-2] &&
+ v[0] + 1 == v[v.length-1]) {
+ return true;
+ }
+ return false;
+}
+
+if (frequencyequalizer("abbc")) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+
+if (frequencyequalizer("xyzyyxz")) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+
+if (!frequencyequalizer("xzxz")) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-194/roger-bell-west/kotlin/ch-1.kt b/challenge-194/roger-bell-west/kotlin/ch-1.kt
new file mode 100644
index 0000000000..937a812fa1
--- /dev/null
+++ b/challenge-194/roger-bell-west/kotlin/ch-1.kt
@@ -0,0 +1,58 @@
+fun digitalclock(hhmm: String): Int {
+ val i = hhmm.indexOf("?")
+ if (i == 0) {
+ if (hhmm[1] <= '3') {
+ return 2;
+ }
+ return 1;
+ } else if (i == 1) {
+ if (hhmm[0] < '2') {
+ return 9;
+ }
+ return 3;
+ } else if (i == 3) {
+ return 5;
+ } else if (i == 4) {
+ return 9;
+ }
+ return 0;
+}
+
+fun main() {
+ if (digitalclock("?5:00") == 1) {
+ print("Pass")
+ } else {
+ print("FAIL")
+ }
+ print(" ")
+ if (digitalclock("?3:00") == 2) {
+ print("Pass")
+ } else {
+ print("FAIL")
+ }
+ print(" ")
+ if (digitalclock("1?:00") == 9) {
+ print("Pass")
+ } else {
+ print("FAIL")
+ }
+ print(" ")
+ if (digitalclock("2?:00") == 3) {
+ print("Pass")
+ } else {
+ print("FAIL")
+ }
+ print(" ")
+ if (digitalclock("12:?5") == 5) {
+ print("Pass")
+ } else {
+ print("FAIL")
+ }
+ print(" ")
+ if (digitalclock("12:5?") == 9) {
+ print("Pass")
+ } else {
+ print("FAIL")
+ }
+ println("")
+}
diff --git a/challenge-194/roger-bell-west/kotlin/ch-2.kt b/challenge-194/roger-bell-west/kotlin/ch-2.kt
new file mode 100644
index 0000000000..83c49d420b
--- /dev/null
+++ b/challenge-194/roger-bell-west/kotlin/ch-2.kt
@@ -0,0 +1,34 @@
+fun frequencyequalizer(s: String): Boolean {
+ var f = mutableMapOf<Char, Int>()
+ for (c in s) {
+ var l = f.getOrDefault(c, 0);
+ f.set(c, l + 1);
+ }
+ val v = f.values.sorted()
+ if (v[0] == v[v.size - 2] &&
+ v[0] + 1 == v[v.size - 1]) {
+ return true
+ }
+ return false
+}
+
+fun main() {
+ if (frequencyequalizer("abbc")) {
+ print("Pass")
+ } else {
+ print("FAIL")
+ }
+ print(" ")
+ if (frequencyequalizer("xyzyyxz")) {
+ print("Pass")
+ } else {
+ print("FAIL")
+ }
+ print(" ")
+ if (!frequencyequalizer("xzxz")) {
+ print("Pass")
+ } else {
+ print("FAIL")
+ }
+ println("")
+}
diff --git a/challenge-194/roger-bell-west/lua/ch-1.lua b/challenge-194/roger-bell-west/lua/ch-1.lua
new file mode 100755
index 0000000000..00246aa4c5
--- /dev/null
+++ b/challenge-194/roger-bell-west/lua/ch-1.lua
@@ -0,0 +1,58 @@
+#! /usr/bin/lua
+
+function digitalclock(hhmm)
+ local i = string.find(hhmm, "%?")
+ if i == 1 then
+ if string.sub(hhmm, 2, 2) <= "3" then
+ return 2
+ end
+ return 1
+ elseif i == 2 then
+ if string.sub(hhmm, 1, 1) < "2" then
+ return 9
+ end
+ return 3
+ elseif i == 4 then
+ return 5
+ elseif i == 5 then
+ return 9
+ end
+ return 0
+end
+
+if digitalclock("?5:00") == 1 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+if digitalclock("?3:00") == 2 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+if digitalclock("1?:00") == 9 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+if digitalclock("2?:00") == 3 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+if digitalclock("12:?5") == 5 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+if digitalclock("12:5?") == 9 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
diff --git a/challenge-194/roger-bell-west/lua/ch-2.lua b/challenge-194/roger-bell-west/lua/ch-2.lua
new file mode 100755
index 0000000000..c300e15325
--- /dev/null
+++ b/challenge-194/roger-bell-west/lua/ch-2.lua
@@ -0,0 +1,43 @@
+#! /usr/bin/lua
+
+function frequencyequalizer(s)
+ local f = {}
+ for c in string.gmatch(s, ".") do
+ if f[c] == nil then
+ f[c] = 1
+ else
+ f[c] = f[c] + 1
+ end
+ end
+ local sk = {}
+ for i, v in pairs(f) do
+ table.insert(sk, v)
+ end
+ table.sort(sk)
+ if sk[1] == sk[#sk-1] and
+ sk[1] + 1 == sk[#sk] then
+ return true
+ end
+ return false
+end
+
+if frequencyequalizer("abbc") == true then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if frequencyequalizer("xyzyyxz") == true then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if frequencyequalizer("xzxz") == false then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
diff --git a/challenge-194/roger-bell-west/perl/ch-1.pl b/challenge-194/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..d146ee8bfb
--- /dev/null
+++ b/challenge-194/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,34 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 6;
+
+is(digitalclock("?5:00"), 1, 'example 1');
+is(digitalclock("?3:00"), 2, 'example 2');
+is(digitalclock("1?:00"), 9, 'example 3');
+is(digitalclock("2?:00"), 3, 'example 4');
+is(digitalclock("12:?5"), 5, 'example 5');
+is(digitalclock("12:5?"), 9, 'example 6');
+
+sub digitalclock($hhmm) {
+ my $i = index($hhmm, '?');
+ if ($i == 0) {
+ if (substr($hhmm, 1, 1) le "3") {
+ return 2;
+ }
+ return 1;
+ } elsif ($i == 1) {
+ if (substr($hhmm, 0, 1) lt "2") {
+ return 9;
+ }
+ return 3;
+ } elsif ($i == 3) {
+ return 5;
+ } elsif ($i == 4) {
+ return 9;
+ }
+ return 0;
+}
diff --git a/challenge-194/roger-bell-west/perl/ch-2.pl b/challenge-194/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..54bd487266
--- /dev/null
+++ b/challenge-194/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,24 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 3;
+
+is(frequencyequalizer("abbc"), 1, 'example 1');
+is(frequencyequalizer("xyzyyxz"), 1, 'example 2');
+is(frequencyequalizer("xzxz"), 0, 'example 3');
+
+sub frequencyequalizer($s) {
+ my %f;
+ foreach my $c (split '',$s) {
+ $f{$c}++;
+ }
+ my @v = sort values %f;
+ if ($v[0] == $v[-2] &&
+ $v[0] + 1 == $v[-1]) {
+ return 1;
+ }
+ return 0;
+}
diff --git a/challenge-194/roger-bell-west/postscript/ch-1.ps b/challenge-194/roger-bell-west/postscript/ch-1.ps
new file mode 100644
index 0000000000..220a077dfc
--- /dev/null
+++ b/challenge-194/roger-bell-west/postscript/ch-1.ps
@@ -0,0 +1,84 @@
+%!PS
+
+% begin included library code
+% see https://github.com/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.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
+
+
+% end included library code
+
+/digitalclock {
+ 2 dict begin
+ /hhmm exch def
+ hhmm (?) search {
+ length /i exch def pop pop
+ 1 {
+ i 0 eq {
+ hhmm 1 get 51 le {
+ 2
+ } {
+ 1
+ } ifelse
+ exit
+ } if
+ i 1 eq {
+ hhmm 0 get 50 lt {
+ 9
+ } {
+ 3
+ } ifelse
+ exit
+ } if
+ i 3 eq {
+ 5
+ exit
+ } if
+ i 4 eq {
+ 9
+ exit
+ } if
+ 0
+ } repeat
+ } {
+ pop 0
+ } ifelse
+ end
+} bind def
+
+(digitalclock) test.start
+(?5:00) digitalclock 1 eq test
+(?3:00) digitalclock 2 eq test
+(1?:00) digitalclock 9 eq test
+(2?:00) digitalclock 3 eq test
+(12:?5) digitalclock 5 eq test
+(12:5?) digitalclock 9 eq test
+test.end
diff --git a/challenge-194/roger-bell-west/postscript/ch-2.ps b/challenge-194/roger-bell-west/postscript/ch-2.ps
new file mode 100644
index 0000000000..a368c8464a
--- /dev/null
+++ b/challenge-194/roger-bell-west/postscript/ch-2.ps
@@ -0,0 +1,141 @@
+%!PS
+
+% begin included library code
+% see https://github.com/Firedrake/postscript-libraries/
+/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
+
+/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 ge {
+ exit
+ } if
+ } loop
+ {
+ /j j 1 sub def
+ arr j get pivot le {
+ exit
+ } if
+ } loop
+ i j ge {
+ j
+ exit
+ } if
+ i j quicksort.swap
+ } loop
+ end
+} bind def
+
+/quicksort { % [ a c b ] -> [ a b c ]
+ 1 dict begin
+ /arr exch def
+ arr length 0 gt {
+ 0 arr length 1 sub quicksort.main
+ } if
+ arr
+ 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
+
+/test.start {
+ print (:) print
+ /test.pass 0 def
+ /test.count 0 def
+} bind def
+
+/values { % dict -> array of dict values
+ [ exch
+ {
+ exch pop
+ } forall
+ ]
+} bind def
+
+
+% end included library code
+
+/frequencyequalizer {
+ 2 dict begin
+ /f 0 dict def
+ {
+ dup f exch known {
+ dup f exch get 1 add f 3 1 roll put
+ } {
+ f exch 1 put
+ } ifelse
+ } forall
+ /v f values quicksort def
+ v 0 get v v length 2 sub get eq
+ v 0 get 1 add v v length 1 sub get eq and {
+ true
+ } {
+ false
+ } ifelse
+ end
+} bind def
+
+(frequencyequalizer) test.start
+(abbc) frequencyequalizer test
+(xyzyyxz) frequencyequalizer test
+(xzxz) frequencyequalizer not test
+test.end
diff --git a/challenge-194/roger-bell-west/python/ch-1.py b/challenge-194/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..68f2aaa298
--- /dev/null
+++ b/challenge-194/roger-bell-west/python/ch-1.py
@@ -0,0 +1,41 @@
+#! /usr/bin/python3
+
+import unittest
+
+def digitalclock(hhmm):
+ i = hhmm.find("?")
+ if i == 0:
+ if hhmm[1] <= "3":
+ return 2
+ return 1
+ elif i == 1:
+ if hhmm[0] < "2":
+ return 9
+ return 3
+ elif i == 3:
+ return 5
+ elif i == 4:
+ return 9
+ return 0
+
+class TestDigitalclock(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(digitalclock("?5:00"), 1, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(digitalclock("?3:00"), 2, 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(digitalclock("1?:00"), 9, 'example 3')
+
+ def test_ex4(self):
+ self.assertEqual(digitalclock("2?:00"), 3, 'example 4')
+
+ def test_ex5(self):
+ self.assertEqual(digitalclock("12:?5"), 5, 'example 5')
+
+ def test_ex6(self):
+ self.assertEqual(digitalclock("12:5?"), 9, 'example 6')
+
+unittest.main()
diff --git a/challenge-194/roger-bell-west/python/ch-2.py b/challenge-194/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..568621d839
--- /dev/null
+++ b/challenge-194/roger-bell-west/python/ch-2.py
@@ -0,0 +1,27 @@
+#! /usr/bin/python3
+
+import unittest
+from collections import defaultdict
+
+def frequencyequalizer(s):
+ f = defaultdict(lambda: 0)
+ for c in s:
+ f[c] += 1
+ v = list(f.values())
+ v.sort()
+ if v[0] == v[-2] and v[0] + 1 == v[-1]:
+ return True
+ return False
+
+class TestFrequencyEqualizer(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(frequencyequalizer("abbc"), True, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(frequencyequalizer("xyzyyxz"), True, 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(frequencyequalizer("xzxz"), False, 'example 3')
+
+unittest.main()
diff --git a/challenge-194/roger-bell-west/raku/ch-1.p6 b/challenge-194/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..c5cf540c10
--- /dev/null
+++ b/challenge-194/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,32 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 6;
+
+is(digitalclock("?5:00"), 1, 'example 1');
+is(digitalclock("?3:00"), 2, 'example 2');
+is(digitalclock("1?:00"), 9, 'example 3');
+is(digitalclock("2?:00"), 3, 'example 4');
+is(digitalclock("12:?5"), 5, 'example 5');
+is(digitalclock("12:5?"), 9, 'example 6');
+
+sub digitalclock($hhmm) {
+ my $i = index($hhmm, '?');
+ if ($i == 0) {
+ if (substr($hhmm, 1, 1) le "3") {
+ return 2;
+ }
+ return 1;
+ } elsif ($i == 1) {
+ if (substr($hhmm, 0, 1) lt "2") {
+ return 9;
+ }
+ return 3;
+ } elsif ($i == 3) {
+ return 5;
+ } elsif ($i == 4) {
+ return 9;
+ }
+ return 0;
+}
diff --git a/challenge-194/roger-bell-west/raku/ch-2.p6 b/challenge-194/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..2472656757
--- /dev/null
+++ b/challenge-194/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,22 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 3;
+
+is(frequencyequalizer("abbc"), True, 'example 1');
+is(frequencyequalizer("xyzyyxz"), True, 'example 2');
+is(frequencyequalizer("xzxz"), False, 'example 3');
+
+sub frequencyequalizer($s) {
+ my %f;
+ for $s.comb -> $c {
+ %f{$c}++;
+ }
+ my @v = %f.values.sort;
+ if (@v[0] == @v[*-2] &&
+ @v[0] + 1 == @v[*-1]) {
+ return True;
+ }
+ return False;
+}
diff --git a/challenge-194/roger-bell-west/ruby/ch-1.rb b/challenge-194/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..682ca2000f
--- /dev/null
+++ b/challenge-194/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,51 @@
+#! /usr/bin/ruby
+
+require 'test/unit'
+
+def digitalclock(hhmm)
+ i = hhmm.index("?")
+ if i == 0 then
+ if hhmm[1] <= "3" then
+ return 2
+ end
+ return 1
+ elsif i == 1 then
+ if hhmm[0] < "2" then
+ return 9
+ end
+ return 3
+ elsif i == 3 then
+ return 5
+ elsif i == 4 then
+ return 9
+ end
+ return 0
+end
+
+class TestDigitalclock < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(1, digitalclock("?5:00"))
+ end
+
+ def test_ex2
+ assert_equal(2, digitalclock("?3:00"))
+ end
+
+ def test_ex3
+ assert_equal(9, digitalclock("1?:00"))
+ end
+
+ def test_ex4
+ assert_equal(3, digitalclock("2?:00"))
+ end
+
+ def test_ex5
+ assert_equal(5, digitalclock("12:?5"))
+ end
+
+ def test_ex6
+ assert_equal(9, digitalclock("12:5?"))
+ end
+
+end
diff --git a/challenge-194/roger-bell-west/ruby/ch-2.rb b/challenge-194/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..f9fe41f6df
--- /dev/null
+++ b/challenge-194/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,34 @@
+#! /usr/bin/ruby
+
+require 'test/unit'
+
+def frequencyequalizer(s)
+ f = Hash.new
+ s.chars.each do |c|
+ if !f.has_key?(c) then
+ f[c] = 0
+ end
+ f[c] += 1
+ end
+ v = f.values.sort
+ if v[0] == v[-2] &&
+ v[0] + 1 == v[-1] then
+ return true
+ end
+ return false
+end
+
+class TestFrequencyEqualizer < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(true, frequencyequalizer("abbc"))
+ end
+
+ def test_ex2
+ assert_equal(true, frequencyequalizer("xyzyyxz"))
+ end
+
+ def test_ex3
+ assert_equal(false, frequencyequalizer("xzxz"))
+ end
+end
diff --git a/challenge-194/roger-bell-west/rust/ch-1.rs b/challenge-194/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..056610aaf6
--- /dev/null
+++ b/challenge-194/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,53 @@
+#! /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!(digitalclock("?5:00"), 1);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(digitalclock("?3:00"), 2);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(digitalclock("1?:00"), 9);
+}
+
+#[test]
+fn test_ex4() {
+ assert_eq!(digitalclock("2?:00"), 3);
+}
+
+#[test]
+fn test_ex5() {
+ assert_eq!(digitalclock("12:?5"), 5);
+}
+
+#[test]
+fn test_ex6() {
+ assert_eq!(digitalclock("12:5?"), 9);
+}
+
+fn digitalclock(hhmm0: &str) -> u8 {
+ let i = hhmm0.find('?').unwrap();
+ let hhmm = hhmm0.chars().collect::<Vec<char>>();
+ if i == 0 {
+ if hhmm[1] <= '3' {
+ return 2;
+ }
+ return 1;
+ } else if i == 1 {
+ if hhmm[0] < '2' {
+ return 9;
+ }
+ return 3;
+ } else if i == 3 {
+ return 5;
+ } else if i == 4 {
+ return 9;
+ }
+ 0
+}
diff --git a/challenge-194/roger-bell-west/rust/ch-2.rs b/challenge-194/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..70bd9c2362
--- /dev/null
+++ b/challenge-194/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::collections::HashMap;
+
+#[test]
+fn test_ex1() {
+ assert_eq!(frequencyequalizer("abbc"), true);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(frequencyequalizer("xyzyyxz"), true);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(frequencyequalizer("xzxz"), false);
+}
+
+fn frequencyequalizer(s: &str) -> bool {
+ let mut f: HashMap<char, usize> = HashMap::new();
+ for c in s.chars() {
+ let en = f.entry(c).or_insert(0);
+ *en += 1;
+ }
+ let mut v = f.into_values().collect::<Vec<usize>>();
+ v.sort();
+ if v[0] == v[v.len() - 2] && v[0] + 1 == v[v.len() - 1] {
+ true
+ } else {
+ false
+ }
+}