aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-12-13 11:36:44 +0000
committerGitHub <noreply@github.com>2022-12-13 11:36:44 +0000
commit634fd7a2194ac04f7b768b9f483186827470a03d (patch)
treed72359bbee0af3870b321fd5198a27316deee275
parent9801381b85125dbcb7a501a85337af1d9eee7f03 (diff)
parent6930d0c30b8c5cea8a81cfd809fbbd1894ad2148 (diff)
downloadperlweeklychallenge-club-634fd7a2194ac04f7b768b9f483186827470a03d.tar.gz
perlweeklychallenge-club-634fd7a2194ac04f7b768b9f483186827470a03d.tar.bz2
perlweeklychallenge-club-634fd7a2194ac04f7b768b9f483186827470a03d.zip
Merge pull request #7249 from Firedrake/rogerbw-challenge-195
Solutions for challenge #195
-rwxr-xr-xchallenge-195/roger-bell-west/javascript/ch-1.js37
-rwxr-xr-xchallenge-195/roger-bell-west/javascript/ch-2.js45
-rw-r--r--challenge-195/roger-bell-west/kotlin/ch-1.kt30
-rw-r--r--challenge-195/roger-bell-west/kotlin/ch-2.kt38
-rwxr-xr-xchallenge-195/roger-bell-west/lua/ch-1.lua34
-rwxr-xr-xchallenge-195/roger-bell-west/lua/ch-2.lua51
-rwxr-xr-xchallenge-195/roger-bell-west/perl/ch-1.pl26
-rwxr-xr-xchallenge-195/roger-bell-west/perl/ch-2.pl30
-rw-r--r--challenge-195/roger-bell-west/postscript/ch-1.ps66
-rw-r--r--challenge-195/roger-bell-west/postscript/ch-2.ps180
-rwxr-xr-xchallenge-195/roger-bell-west/python/ch-1.py28
-rwxr-xr-xchallenge-195/roger-bell-west/python/ch-2.py30
-rwxr-xr-xchallenge-195/roger-bell-west/raku/ch-1.p622
-rwxr-xr-xchallenge-195/roger-bell-west/raku/ch-2.p626
-rwxr-xr-xchallenge-195/roger-bell-west/ruby/ch-1.rb29
-rwxr-xr-xchallenge-195/roger-bell-west/ruby/ch-2.rb34
-rwxr-xr-xchallenge-195/roger-bell-west/rust/ch-1.rs34
-rwxr-xr-xchallenge-195/roger-bell-west/rust/ch-2.rs38
18 files changed, 778 insertions, 0 deletions
diff --git a/challenge-195/roger-bell-west/javascript/ch-1.js b/challenge-195/roger-bell-west/javascript/ch-1.js
new file mode 100755
index 0000000000..728340ef1c
--- /dev/null
+++ b/challenge-195/roger-bell-west/javascript/ch-1.js
@@ -0,0 +1,37 @@
+#! /usr/bin/node
+
+"use strict"
+
+function specialintegers(n) {
+ let o = 0;
+ for (let i = 1; i <= n; i++) {
+ let f = new Set();
+ let s = true;
+ for (let c of i.toString()) {
+ if (f.has(c)) {
+ s = false;
+ break;
+ } else {
+ f.add(c);
+ }
+ }
+ if (s == 1) {
+ o++;
+ }
+ }
+ return o;
+}
+
+if (specialintegers(15) == 14) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+
+if (specialintegers(35) == 32) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-195/roger-bell-west/javascript/ch-2.js b/challenge-195/roger-bell-west/javascript/ch-2.js
new file mode 100755
index 0000000000..0fdfce7898
--- /dev/null
+++ b/challenge-195/roger-bell-west/javascript/ch-2.js
@@ -0,0 +1,45 @@
+#! /usr/bin/node
+
+"use strict"
+
+function mostfrequenteven(l) {
+ let f = new Map();
+ for (let n of l) {
+ if (n % 2 == 0) {
+ if (f.has(n)) {
+ f.set(n, f.get(n) + 1);
+ } else {
+ f.set(n, 1);
+ }
+ }
+ }
+ if (f.size > 0) {
+ let m = Math.max(...f.values());
+ let l = Array.from(f.keys()).filter(i => f.get(i) == m);
+ l.sort();
+ return l[0];
+ } else {
+ return -1;
+ }
+}
+
+if (mostfrequenteven([1, 1, 2, 6, 2]) == 2) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+
+if (mostfrequenteven([1, 3, 5, 7]) == -1) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+
+if (mostfrequenteven([6, 4, 4, 6, 1]) == 4) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-195/roger-bell-west/kotlin/ch-1.kt b/challenge-195/roger-bell-west/kotlin/ch-1.kt
new file mode 100644
index 0000000000..205f2994ac
--- /dev/null
+++ b/challenge-195/roger-bell-west/kotlin/ch-1.kt
@@ -0,0 +1,30 @@
+fun specialintegers(n: Int): Int {
+ var o = 0
+ for (i in 1..n) {
+ var f = mutableMapOf<Char, Int>()
+ for (c in i.toString()) {
+ var l = f.getOrDefault(c, 0)
+ f.set(c, l + 1)
+ }
+ if (f.values.maxOrNull()!! == 1) {
+ o += 1
+ }
+ }
+ return o
+}
+
+fun main() {
+ if (specialintegers(15) == 14) {
+ print("Pass")
+ } else {
+ print("FAIL")
+ }
+ print(" ")
+
+ if (specialintegers(35) == 32) {
+ print("Pass")
+ } else {
+ print("FAIL")
+ }
+ println("")
+}
diff --git a/challenge-195/roger-bell-west/kotlin/ch-2.kt b/challenge-195/roger-bell-west/kotlin/ch-2.kt
new file mode 100644
index 0000000000..14d82ddc2a
--- /dev/null
+++ b/challenge-195/roger-bell-west/kotlin/ch-2.kt
@@ -0,0 +1,38 @@
+fun mostfrequenteven(l: List<Int>): Int {
+ var f = mutableMapOf<Int, Int>()
+ for (n in l) {
+ if (n % 2 == 0) {
+ var k = f.getOrDefault(n, 0);
+ f.set(n, k + 1);
+ }
+ }
+ if (f.size > 0) {
+ val m = f.values.maxOrNull()!!
+ var ll = ArrayList(f.keys.filter{f[it] == m})
+ ll.sort()
+ return ll[0]
+ } else {
+ return -1
+ }
+}
+
+fun main() {
+ if (mostfrequenteven(listOf(1, 1, 2, 6, 2)) == 2) {
+ print("Pass")
+ } else {
+ print("FAIL")
+ }
+ print(" ")
+ if (mostfrequenteven(listOf(1, 3, 5, 7)) == -1) {
+ print("Pass")
+ } else {
+ print("FAIL")
+ }
+ print(" ")
+ if (mostfrequenteven(listOf(6, 4, 4, 6, 1)) == 4) {
+ print("Pass")
+ } else {
+ print("FAIL")
+ }
+ println("")
+}
diff --git a/challenge-195/roger-bell-west/lua/ch-1.lua b/challenge-195/roger-bell-west/lua/ch-1.lua
new file mode 100755
index 0000000000..598da06a7b
--- /dev/null
+++ b/challenge-195/roger-bell-west/lua/ch-1.lua
@@ -0,0 +1,34 @@
+#! /usr/bin/lua
+
+function specialintegers(n)
+ local o = 0
+ for i = 1, n do
+ local f = {}
+ local s = true
+ for c in string.gmatch(i, ".") do
+ if f[c] == nil then
+ f[c] = 1
+ else
+ s = false
+ break
+ end
+ end
+ if s then
+ o = o + 1
+ end
+ end
+ return o
+end
+
+if specialintegers(15) == 14 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+if specialintegers(35) == 32 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
diff --git a/challenge-195/roger-bell-west/lua/ch-2.lua b/challenge-195/roger-bell-west/lua/ch-2.lua
new file mode 100755
index 0000000000..f661eb83d5
--- /dev/null
+++ b/challenge-195/roger-bell-west/lua/ch-2.lua
@@ -0,0 +1,51 @@
+#! /usr/bin/lua
+
+function mostfrequenteven(l)
+ local f = {}
+ local mx
+ for i, n in ipairs(l) do
+ if n % 2 == 0 then
+ if f[n] == nil then
+ f[n] = 1
+ else
+ f[n] = f[n]+1
+ end
+ if mx == nil or f[n] > mx then
+ mx = f[n]
+ end
+ end
+ end
+ if mx ~= nil then
+ local l = {}
+ for k, v in pairs(f) do
+ if v == mx then
+ table.insert(l, k)
+ end
+ end
+ table.sort(l)
+ return l[1]
+ else
+ return -1
+ end
+end
+
+if mostfrequenteven({1, 1, 2, 6, 2}) == 2 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if mostfrequenteven({1, 3, 5, 7}) == -1 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if mostfrequenteven({6, 4, 4, 6, 1}) == 4 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
diff --git a/challenge-195/roger-bell-west/perl/ch-1.pl b/challenge-195/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..92f77b56ad
--- /dev/null
+++ b/challenge-195/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 => 2;
+
+is(specialintegers(15), 14, 'example 1');
+is(specialintegers(35), 32, 'example 2');
+
+use List::Util qw(max);
+
+sub specialintegers($n) {
+ my $o = 0;
+ foreach my $i (1..$n) {
+ my %f;
+ foreach my $c (split('', $i)) {
+ $f{$c}++;
+ }
+ if (max(values %f) == 1) {
+ $o++;
+ }
+ }
+ return $o;
+}
diff --git a/challenge-195/roger-bell-west/perl/ch-2.pl b/challenge-195/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..6c5d99c7f7
--- /dev/null
+++ b/challenge-195/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,30 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 3;
+
+is(mostfrequenteven([1, 1, 2, 6, 2]), 2, 'example 1');
+is(mostfrequenteven([1, 3, 5, 7]), -1, 'example 2');
+is(mostfrequenteven([6, 4, 4, 6, 1]), 4, 'example 3');
+
+use List::Util qw(max);
+
+sub mostfrequenteven($l) {
+ my %f;
+ foreach my $n (@{$l}) {
+ if ($n % 2 == 0) {
+ $f{$n}++;
+ }
+ }
+ if (scalar %f > 0) {
+ my $m = max(values %f);
+ my @l = grep {$f{$_} == $m} keys %f;
+ @l = sort @l;
+ return $l[0];
+ } else {
+ return -1;
+ }
+}
diff --git a/challenge-195/roger-bell-west/postscript/ch-1.ps b/challenge-195/roger-bell-west/postscript/ch-1.ps
new file mode 100644
index 0000000000..26f4c3669f
--- /dev/null
+++ b/challenge-195/roger-bell-west/postscript/ch-1.ps
@@ -0,0 +1,66 @@
+%!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.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
+
+/specialintegers {
+ 4 dict begin
+ /n exch def
+ /o 0 def
+ 1 1 n {
+ /f 0 dict def
+ /s true def
+ dup log cvi 1 add string cvs {
+ /c exch def
+ f c known {
+ /s false def
+ exit
+ } {
+ f c true put
+ } ifelse
+ } forall
+ s {
+ /o o 1 add def
+ } if
+ } for
+ o
+ end
+} bind def
+
+(specialintegers) test.start
+15 specialintegers 14 eq test
+35 specialintegers 32 eq test
+test.end
diff --git a/challenge-195/roger-bell-west/postscript/ch-2.ps b/challenge-195/roger-bell-west/postscript/ch-2.ps
new file mode 100644
index 0000000000..8324605895
--- /dev/null
+++ b/challenge-195/roger-bell-west/postscript/ch-2.ps
@@ -0,0 +1,180 @@
+%!PS
+
+% begin included library code
+% see https://github.com/Firedrake/postscript-libraries/
+/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
+
+/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
+
+/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 {
+ /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.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
+
+/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
+
+/listmax {
+ { max } reduce
+} bind def
+
+/keys { % dict -> array of dict keys
+ [ exch
+ {
+ pop
+ } forall
+ ]
+} bind def
+
+/values { % dict -> array of dict values
+ [ exch
+ {
+ exch pop
+ } forall
+ ]
+} bind def
+
+/filter { % array proc(bool) -> array
+ 1 dict begin
+ /p exch def
+ [ exch
+ {
+ dup p not
+ {
+ pop
+ } if
+ } forall
+ ]
+ end
+} bind def
+
+/test.start {
+ print (:) print
+ /test.pass 0 def
+ /test.count 0 def
+} bind def
+
+
+% end included library code
+
+/mostfrequenteven {
+ 2 dict begin
+ /l exch def
+ /f 0 dict def
+ l { 2 mod 0 eq } filter {
+ dup f exch known {
+ dup f exch get 1 add f 3 1 roll put
+ } {
+ f exch 1 put
+ } ifelse
+ } forall
+ f length 0 gt {
+ /m f values listmax def
+ f keys { f exch get m eq } filter
+ quicksort 0 get
+ } {
+ -1
+ } ifelse
+ end
+} bind def
+
+(mostfrequenteven) test.start
+[ 1 1 2 6 2 ] mostfrequenteven 2 eq test
+[ 1 3 5 7 ] mostfrequenteven -1 eq test
+[ 6 4 4 6 1 ] mostfrequenteven 4 eq test
+test.end
diff --git a/challenge-195/roger-bell-west/python/ch-1.py b/challenge-195/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..d246c2b66d
--- /dev/null
+++ b/challenge-195/roger-bell-west/python/ch-1.py
@@ -0,0 +1,28 @@
+#! /usr/bin/python3
+
+import unittest
+
+def specialintegers(n):
+ o = 0
+ for i in range(1, n+1):
+ s = True
+ f = set()
+ for c in str(i):
+ if c in f:
+ s = False
+ break
+ else:
+ f.add(c)
+ if s:
+ o += 1
+ return o
+
+class TestSpecialIntegers(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(specialintegers(15), 14, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(specialintegers(35), 32, 'example 2')
+
+unittest.main()
diff --git a/challenge-195/roger-bell-west/python/ch-2.py b/challenge-195/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..d5f1259e14
--- /dev/null
+++ b/challenge-195/roger-bell-west/python/ch-2.py
@@ -0,0 +1,30 @@
+#! /usr/bin/python3
+
+import unittest
+from collections import defaultdict
+
+def mostfrequenteven(l):
+ f = defaultdict(lambda: 0)
+ for n in l:
+ if n % 2 == 0:
+ f[n] += 1
+ if len(f) > 0:
+ m = max(f.values())
+ l = [i for i in f.keys() if f[i] == m]
+ l.sort()
+ return l[0]
+ else:
+ return -1
+
+class TestMostfrequenteven(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(mostfrequenteven([1, 1, 2, 6, 2]), 2, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(mostfrequenteven([1, 3, 5, 7]), -1, 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(mostfrequenteven([6, 4, 4, 6, 1]), 4, 'example 3')
+
+unittest.main()
diff --git a/challenge-195/roger-bell-west/raku/ch-1.p6 b/challenge-195/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..192c1803d1
--- /dev/null
+++ b/challenge-195/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,22 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 2;
+
+is(specialintegers(15), 14, 'example 1');
+is(specialintegers(35), 32, 'example 2');
+
+sub specialintegers($n) {
+ my $o = 0;
+ for (1..$n) -> $i {
+ my %f;
+ for $i.Str.comb -> $c {
+ %f{$c}++;
+ }
+ if (%f.values.max == 1) {
+ $o++;
+ }
+ }
+ return $o;
+}
diff --git a/challenge-195/roger-bell-west/raku/ch-2.p6 b/challenge-195/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..c3370ef9d6
--- /dev/null
+++ b/challenge-195/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,26 @@
+#! /usr/bin/perl6
+
+use Test;
+
+plan 3;
+
+is(mostfrequenteven([1, 1, 2, 6, 2]), 2, 'example 1');
+is(mostfrequenteven([1, 3, 5, 7]), -1, 'example 2');
+is(mostfrequenteven([6, 4, 4, 6, 1]), 4, 'example 3');
+
+sub mostfrequenteven(@l) {
+ my %f;
+ for @l -> $n {
+ if ($n % 2 == 0) {
+ %f{$n}++;
+ }
+ }
+ if (%f.elems > 0) {
+ my $m = %f.values.max;
+ my @l = grep {%f{$_} == $m}, %f.keys;
+ @l = @l.sort;
+ return @l[0];
+ } else {
+ return -1;
+ }
+}
diff --git a/challenge-195/roger-bell-west/ruby/ch-1.rb b/challenge-195/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..2adacafc59
--- /dev/null
+++ b/challenge-195/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,29 @@
+#! /usr/bin/ruby
+
+require 'test/unit'
+
+def specialintegers(n)
+ o = 0
+ 1.upto(n) do |i|
+ f = Hash.new(0)
+ for c in i.to_s.chars do
+ f[c] += 1
+ end
+ if f.values.max == 1 then
+ o += 1
+ end
+ end
+ return o
+end
+
+class TestSpecialintegers < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(14, specialintegers(15))
+ end
+
+ def test_ex2
+ assert_equal(32, specialintegers(35))
+ end
+
+end
diff --git a/challenge-195/roger-bell-west/ruby/ch-2.rb b/challenge-195/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..bd9dba8347
--- /dev/null
+++ b/challenge-195/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,34 @@
+#! /usr/bin/ruby
+
+require 'test/unit'
+
+def mostfrequenteven(l)
+ f = Hash.new(0)
+ l.each do |n|
+ if n % 2 == 0 then
+ f[n] += 1
+ end
+ end
+ if f.length > 0 then
+ m = f.values.max
+ l = f.keys.find_all { |x| f[x] == m}.sort
+ return l[0]
+ else
+ return -1
+ end
+end
+
+class TestMostFrequentEven < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(2, mostfrequenteven([1, 1, 2, 6, 2]))
+ end
+
+ def test_ex2
+ assert_equal(-1, mostfrequenteven([1, 3, 5, 7]))
+ end
+
+ def test_ex3
+ assert_equal(4, mostfrequenteven([6, 4, 4, 6, 1]))
+ end
+end
diff --git a/challenge-195/roger-bell-west/rust/ch-1.rs b/challenge-195/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..ff432e7607
--- /dev/null
+++ b/challenge-195/roger-bell-west/rust/ch-1.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::HashSet;
+
+#[test]
+fn test_ex1() {
+ assert_eq!(specialintegers(15), 14);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(specialintegers(35), 32);
+}
+
+fn specialintegers(n: usize) -> usize {
+ let mut o = 0;
+ for i in 1..=n {
+ let mut s = true;
+ let mut f: HashSet<char> = HashSet::new();
+ for c in i.to_string().chars() {
+ if f.contains(&c) {
+ s = false;
+ break;
+ } else {
+ f.insert(c);
+ }
+ }
+ if s {
+ o += 1;
+ }
+ }
+ o
+}
diff --git a/challenge-195/roger-bell-west/rust/ch-2.rs b/challenge-195/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..0588db1309
--- /dev/null
+++ b/challenge-195/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,38 @@
+#! /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!(mostfrequenteven(vec![1, 1, 2, 6, 2]), 2);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(mostfrequenteven(vec![1, 3, 5, 7]), -1);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(mostfrequenteven(vec![6, 4, 4, 6, 1]), 4);
+}
+
+fn mostfrequenteven(l: Vec<usize>) -> isize {
+ let mut f: HashMap<usize, usize> = HashMap::new();
+ for n in &l {
+ if *n % 2 == 0 {
+ let en = f.entry(*n).or_insert(0);
+ *en += 1;
+ }
+ }
+ if f.len() > 0 {
+ let m = f.values().max().unwrap();
+ let mut l =
+ f.keys().copied().filter(|i| f[i] == *m).collect::<Vec<usize>>();
+ l.sort();
+ l[0] as isize
+ } else {
+ -1
+ }
+}