diff options
25 files changed, 1250 insertions, 0 deletions
diff --git a/challenge-341/roger-bell-west/crystal/ch-1.cr b/challenge-341/roger-bell-west/crystal/ch-1.cr new file mode 100755 index 0000000000..68861b61c7 --- /dev/null +++ b/challenge-341/roger-bell-west/crystal/ch-1.cr @@ -0,0 +1,32 @@ +#! /usr/bin/crystal + +def brokenkeyboard(a, b) + bk = Set.new(b.map{|x| x.downcase.chars[0]}) + ct = 0 + a.downcase.split(" ").each do |w| + nk = Set.new(w.chars) + if (bk & nk).size == 0 + ct += 1 + end + end + ct +end + +require "spec" +describe "brokenkeyboard" do + it "test_ex1" do + brokenkeyboard("Hello World", ["d"]).should eq 1 + end + it "test_ex2" do + brokenkeyboard("apple banana cherry", ["a", "e"]).should eq 0 + end + it "test_ex3" do + brokenkeyboard("Coding is fun", [] of String).should eq 3 + end + it "test_ex4" do + brokenkeyboard("The Weekly Challenge", ["a", "b"]).should eq 2 + end + it "test_ex5" do + brokenkeyboard("Perl and Python", ["p"]).should eq 1 + end +end diff --git a/challenge-341/roger-bell-west/crystal/ch-2.cr b/challenge-341/roger-bell-west/crystal/ch-2.cr new file mode 100755 index 0000000000..e699af0d21 --- /dev/null +++ b/challenge-341/roger-bell-west/crystal/ch-2.cr @@ -0,0 +1,32 @@ +#! /usr/bin/crystal + +def reverseprefix(a, f) + c = a.split("") + p = a.index(f) + if !p.nil? + jr = c[0, p + 1].reverse + jr.each_with_index do |ch, i| + c[i] = ch + end + end + c.join("") +end + +require "spec" +describe "reverseprefix" do + it "test_ex1" do + reverseprefix("programming", "g").should eq "gorpramming" + end + it "test_ex2" do + reverseprefix("hello", "h").should eq "hello" + end + it "test_ex3" do + reverseprefix("abcdefghij", "h").should eq "hgfedcbaij" + end + it "test_ex4" do + reverseprefix("reverse", "s").should eq "srevere" + end + it "test_ex5" do + reverseprefix("perl", "r").should eq "repl" + end +end diff --git a/challenge-341/roger-bell-west/javascript/ch-1.js b/challenge-341/roger-bell-west/javascript/ch-1.js new file mode 100755 index 0000000000..950b9e944d --- /dev/null +++ b/challenge-341/roger-bell-west/javascript/ch-1.js @@ -0,0 +1,47 @@ +#! /usr/bin/node + +"use strict" + +function brokenkeyboard(a, b) { + const bk = new Set(b.map( k => k.toLowerCase().split('')[0] )); + let ct = 0; + for (let w of a.split(" ")) { + const nk = new Set(w.toLowerCase().split("")); + const intersect = new Set([...bk].filter(i => nk.has(i))); + if (intersect.size == 0) { + ct += 1; + } + } + return ct; +} + +if (brokenkeyboard('Hello World', ['d']) == 1) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (brokenkeyboard('apple banana cherry', ['a', 'e']) == 0) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (brokenkeyboard('Coding is fun', []) == 3) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (brokenkeyboard('The Weekly Challenge', ['a', 'b']) == 2) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (brokenkeyboard('Perl and Python', ['p']) == 1) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-341/roger-bell-west/javascript/ch-2.js b/challenge-341/roger-bell-west/javascript/ch-2.js new file mode 100755 index 0000000000..f5ec32ce22 --- /dev/null +++ b/challenge-341/roger-bell-west/javascript/ch-2.js @@ -0,0 +1,47 @@ +#! /usr/bin/node + +"use strict" + +function reverseprefix(a, f) { + let c = a.split(''); + const fc = f.split('')[0]; + const p = c.indexOf(fc); + if (p >= 0) { + let jr = c.slice(0, p + 1); + jr.reverse(); + let cr = c.slice(p + 1); + c = jr.concat(cr); + } + return c.join(""); +} + +if (reverseprefix('programming', 'g') == 'gorpramming') { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (reverseprefix('hello', 'h') == 'hello') { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (reverseprefix('abcdefghij', 'h') == 'hgfedcbaij') { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (reverseprefix('reverse', 's') == 'srevere') { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (reverseprefix('perl', 'r') == 'repl') { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-341/roger-bell-west/kotlin/ch-1.kt b/challenge-341/roger-bell-west/kotlin/ch-1.kt new file mode 100644 index 0000000000..182fa1a24e --- /dev/null +++ b/challenge-341/roger-bell-west/kotlin/ch-1.kt @@ -0,0 +1,46 @@ +fun brokenkeyboard(a: String, b: List<String>): Int { + val bk = b.map{ it.lowercase().toList()[0] }.toSet() + var ct = 0 + for (w in a.split(" ")) { + val nl = w.lowercase().toSet() + if (bk.intersect(nl).isEmpty()) { + ct += 1 + } + } + return ct +} + +fun main() { + + if (brokenkeyboard("Hello World", listOf("d")) == 1) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (brokenkeyboard("apple banana cherry", listOf("a", "e")) == 0) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (brokenkeyboard("Coding is fun", emptyList<String>()) == 3) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (brokenkeyboard("The Weekly Challenge", listOf("a", "b")) == 2) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (brokenkeyboard("Perl and Python", listOf("p")) == 1) { + print("Pass") + } else { + print("Fail") + } + println("") + +} diff --git a/challenge-341/roger-bell-west/kotlin/ch-2.kt b/challenge-341/roger-bell-west/kotlin/ch-2.kt new file mode 100644 index 0000000000..d40b410335 --- /dev/null +++ b/challenge-341/roger-bell-west/kotlin/ch-2.kt @@ -0,0 +1,45 @@ +fun reverseprefix(a: String, f: String): String { + var c = a.toList() + val fc = f.toList()[0] + val p = c.indexOf(fc) + if (p >= 0) { + val jr = c.slice(0 .. p).asReversed() + c = jr + c.asReversed().slice(0 .. c.size - p - 2).asReversed() + } + return c.joinToString("") +} + +fun main() { + + if (reverseprefix("programming", "g") == "gorpramming") { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (reverseprefix("hello", "h") == "hello") { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (reverseprefix("abcdefghij", "h") == "hgfedcbaij") { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (reverseprefix("reverse", "s") == "srevere") { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (reverseprefix("perl", "r") == "repl") { + print("Pass") + } else { + print("Fail") + } + println("") + +} diff --git a/challenge-341/roger-bell-west/lua/ch-1.lua b/challenge-341/roger-bell-west/lua/ch-1.lua new file mode 100755 index 0000000000..e563dedeb4 --- /dev/null +++ b/challenge-341/roger-bell-west/lua/ch-1.lua @@ -0,0 +1,95 @@ +#! /usr/bin/lua + +function split(t) + local cl = {} + string.gsub(t, + "(.)", + function(c) + table.insert(cl, c) + end + ) + return cl +end + +function splits(inputstr, sep) + sep = sep or '%s' + local starts = {1} + local ends = {} + local n = 1 + while true do + local fs, fe = string.find(inputstr, sep, n) + if fs == nil then + break + end + table.insert(ends, fs - 1) + table.insert(starts, fe + 1) + n = fe + 1 + end + table.insert(ends, #inputstr) + local t = {} + for i = 1, #starts do + local s = starts[i] + local e = ends[i] + if e >= s then + table.insert(t, string.sub(inputstr, s, e)) + end + end + return t +end + +function brokenkeyboard(a, b) + local bk = {} + for _, c in ipairs(b) do + bk[string.lower(c)] = true + end + local ct = 0 + for _, w in ipairs(splits(string.lower(a), " ")) do + local valid = true + for __, c in ipairs(split(w)) do + if bk[c] ~= nil then + valid = false + break + end + end + if valid then + ct = ct + 1 + end + end + return ct +end + +if brokenkeyboard("Hello World", {"d"}) == 1 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if brokenkeyboard("apple banana cherry", {"a", "e"}) == 0 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if brokenkeyboard("Coding is fun", {}) == 3 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if brokenkeyboard("The Weekly Challenge", {"a", "b"}) == 2 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if brokenkeyboard("Perl and Python", {"p"}) == 1 then + io.write("Pass") +else + io.write("FAIL") +end +print("") + diff --git a/challenge-341/roger-bell-west/lua/ch-2.lua b/challenge-341/roger-bell-west/lua/ch-2.lua new file mode 100755 index 0000000000..3c031d8074 --- /dev/null +++ b/challenge-341/roger-bell-west/lua/ch-2.lua @@ -0,0 +1,79 @@ +#! /usr/bin/lua + +function split(t) + local cl = {} + string.gsub(t, + "(.)", + function(c) + table.insert(cl, c) + end + ) + return cl +end + +function join(t) + local out="" + for i, v in ipairs(t) do + out = out .. v + end + return out +end + +function deepcopy(src) + local dst = {} + for k, v in pairs(src) do + if type(v) == "table" then + v = deepcopy(v) + end + dst[k] = v + end + return dst +end + +function reverseprefix(a, b) + local c = split(a) + local p = string.find(a, b) + if p ~= nil then + local jr = deepcopy(c) + for i = 1, p do + c[p + 1 - i] = jr[i] + end + end + return join(c) +end + +if reverseprefix("programming", "g") == "gorpramming" then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if reverseprefix("hello", "h") == "hello" then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if reverseprefix("abcdefghij", "h") == "hgfedcbaij" then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if reverseprefix("reverse", "s") == "srevere" then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if reverseprefix("perl", "r") == "repl" then + io.write("Pass") +else + io.write("FAIL") +end +print("") + diff --git a/challenge-341/roger-bell-west/perl/ch-1.pl b/challenge-341/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..e0aa74cce2 --- /dev/null +++ b/challenge-341/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,32 @@ +#! /usr/bin/perl + +use strict; +use warnings; +use experimental 'signatures'; + +use Test::More tests => 5; + +is(brokenkeyboard('Hello World', ['d']), 1, 'example 1'); +is(brokenkeyboard('apple banana cherry', ['a', 'e']), 0, 'example 2'); +is(brokenkeyboard('Coding is fun', []), 3, 'example 3'); +is(brokenkeyboard('The Weekly Challenge', ['a', 'b']), 2, 'example 4'); +is(brokenkeyboard('Perl and Python', ['p']), 1, 'example 5'); + +sub brokenkeyboard($a, $b) { + my %bk; + foreach my $ch (@{$b}) { + $bk{lc($ch)} = 1; + } + my $ct = 0; + foreach my $w (split ' ', $a) { + my %nk; + foreach my $ch (split '', lc($w)) { + $nk{$ch} = 1; + } + my @intersect = grep {exists $nk{$_}} keys %bk; + if (scalar @intersect == 0) { + $ct += 1; + } + } + $ct; +} diff --git a/challenge-341/roger-bell-west/perl/ch-2.pl b/challenge-341/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..013fc1ca47 --- /dev/null +++ b/challenge-341/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 => 5; + +is(reverseprefix('programming', 'g'), 'gorpramming', 'example 1'); +is(reverseprefix('hello', 'h'), 'hello', 'example 2'); +is(reverseprefix('abcdefghij', 'h'), 'hgfedcbaij', 'example 3'); +is(reverseprefix('reverse', 's'), 'srevere', 'example 4'); +is(reverseprefix('perl', 'r'), 'repl', 'example 5'); + +sub reverseprefix($a, $f) { + my @c = split '', $a; + my $p = index($a, $f); + if ( $p > -1 ) { + my @jr = @c[0 .. $p]; + @jr = reverse @jr; + splice @c, 0, $p + 1, @jr; + } + join('', @c); +} diff --git a/challenge-341/roger-bell-west/postscript/ch-1.ps b/challenge-341/roger-bell-west/postscript/ch-1.ps new file mode 100644 index 0000000000..bb9cdf01da --- /dev/null +++ b/challenge-341/roger-bell-west/postscript/ch-1.ps @@ -0,0 +1,153 @@ +%!PS + +% begin included library code +% see https://codeberg.org/Firedrake/postscript-libraries/ +/strsplit % (ajbjc) (j) -> [ (a) (b) (c) ] +{ + 1 dict begin + /sep exch def + [ exch + { + dup length 0 eq { + pop + exit + } { + sep search { + exch pop + dup length 0 eq { + pop + } { + exch + } ifelse + } { + () + } ifelse + } ifelse + } loop + ] + end +} bind def + +/test.start { + print (:) print + /test.pass 0 def + /test.count 0 def +} bind def + +/toset { % array -> dict of (value, true) + << exch + { + true + } forall + >> +} bind def + +/tolower { + s2a + [ exch + { + dup dup 65 ge exch 90 le and { + 32 add + } if + } forall + ] a2s +} 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 + +/a2s { + 2 dict begin + /i exch def + i length dup string /o exch def + 1 sub 0 exch 1 exch { + dup i 3 -1 roll get o 3 1 roll put + } for + o + end +} bind def + +/set.intersection { + 4 dict begin + /s 0 dict def + /b exch def + /a exch def + a keys { + /k exch def + b k known { + s k true put + } if + } forall + s + end +} bind def + +/map { % array proc -> array + 2 dict begin + /p exch def + [ exch + { + p + } forall + ] + end +} bind def + +/keys { % dict -> array of dict keys + [ exch + { + pop + } forall + ] +} bind def + +/s2a { + [ exch { } forall ] +} bind def + + + +% end included library code + +/brokenkeyboard { + 0 dict begin + /bk exch { tolower s2a 0 get } map toset def + 0 exch + tolower ( ) strsplit { + /valid true def + s2a toset bk set.intersection length 0 eq { + 1 add + } if + } forall + end +} bind def + +(brokenkeyboard) test.start +(Hello World) [(d)] brokenkeyboard 1 eq test +(apple banana cherry) [(a) (e)] brokenkeyboard 0 eq test +(Coding is fun) [] brokenkeyboard 3 eq test +(The Weekly Challenge) [(a) (b)] brokenkeyboard 2 eq test +(Perl and Python) [(p)] brokenkeyboard 1 eq test +test.end diff --git a/challenge-341/roger-bell-west/postscript/ch-2.ps b/challenge-341/roger-bell-west/postscript/ch-2.ps new file mode 100644 index 0000000000..a87784699c --- /dev/null +++ b/challenge-341/roger-bell-west/postscript/ch-2.ps @@ -0,0 +1,86 @@ +%!PS + +% begin included library code +% see https://codeberg.org/Firedrake/postscript-libraries/ +/s2a { + [ exch { } forall ] +} bind def + +/a2s { + 2 dict begin + /i exch def + i length dup string /o exch def + 1 sub 0 exch 1 exch { + dup i 3 -1 roll get o 3 1 roll put + } for + o + 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 + +/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 + +/reverse { + 1 dict begin + dup length /l exch def + [ exch + aload pop + 2 1 l { + -1 roll + } for + ] + end +} bind def + + +% end included library code + +/reverseprefix { + /f exch def + /a exch def + /c a s2a def + a f search { + length /p exch def pop pop + c 0 p 1 add getinterval reverse + c exch 0 exch putinterval + } { + pop + } ifelse + c a2s +} bind def + +(reverseprefix) test.start +(programming) (g) reverseprefix (gorpramming) eq test +(hello) (h) reverseprefix (hello) eq test +(abcdefghij) (h) reverseprefix (hgfedcbaij) eq test +(reverse) (s) reverseprefix (srevere) eq test +(perl) (r) reverseprefix (repl) eq test +test.end diff --git a/challenge-341/roger-bell-west/python/ch-1.py b/challenge-341/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..61330f6f9a --- /dev/null +++ b/challenge-341/roger-bell-west/python/ch-1.py @@ -0,0 +1,32 @@ +#! /usr/bin/python3 + +def brokenkeyboard(a, b): + bk = set([x.lower() for x in b]) + ct = 0 + for w in a.split(" "): + nk = set(w.lower()) + inter = nk.intersection(bk) + if len(inter) == 0: + ct += 1 + return ct + +import unittest + +class TestBrokenkeyboard(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(brokenkeyboard("Hello World", ["d"]), 1, 'example 1') + + def test_ex2(self): + self.assertEqual(brokenkeyboard("apple banana cherry", ["a", "e"]), 0, 'example 2') + + def test_ex3(self): + self.assertEqual(brokenkeyboard("Coding is fun", []), 3, 'example 3') + + def test_ex4(self): + self.assertEqual(brokenkeyboard("The Weekly Challenge", ["a", "b"]), 2, 'example 4') + + def test_ex5(self): + self.assertEqual(brokenkeyboard("Perl and Python", ["p"]), 1, 'example 5') + +unittest.main() diff --git a/challenge-341/roger-bell-west/python/ch-2.py b/challenge-341/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..e36ec84643 --- /dev/null +++ b/challenge-341/roger-bell-west/python/ch-2.py @@ -0,0 +1,32 @@ +#! /usr/bin/python3 + +def reverseprefix(a, f): + c = list(a) + p = a.find(f) + if p > -1: + jr = c[0:p + 1] + jr = jr[::-1] + for i, l in enumerate(jr): + c[i] = l + return "".join(c) + +import unittest + +class TestReverseprefix(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(reverseprefix("programming", "g"), "gorpramming", 'example 1') + + def test_ex2(self): + self.assertEqual(reverseprefix("hello", "h"), "hello", 'example 2') + + def test_ex3(self): + self.assertEqual(reverseprefix("abcdefghij", "h"), "hgfedcbaij", 'example 3') + + def test_ex4(self): + self.assertEqual(reverseprefix("reverse", "s"), "srevere", 'example 4') + + def test_ex5(self): + self.assertEqual(reverseprefix("perl", "r"), "repl", 'example 5') + +unittest.main() diff --git a/challenge-341/roger-bell-west/raku/ch-1.p6 b/challenge-341/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..3b4ca5d0aa --- /dev/null +++ b/challenge-341/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,23 @@ +#! /usr/bin/raku + +use Test; + +plan 5; + +is(brokenkeyboard('Hello World', ['d']), 1, 'example 1'); +is(brokenkeyboard('apple banana cherry', ['a', 'e']), 0, 'example 2'); +is(brokenkeyboard('Coding is fun', []), 3, 'example 3'); +is(brokenkeyboard('The Weekly Challenge', ['a', 'b']), 2, 'example 4'); +is(brokenkeyboard('Perl and Python', ['p']), 1, 'example 5'); + +sub brokenkeyboard($a, @b) { + my %bk = Set.new(@b.map({lc($_)})); + my $ct = 0; + for $a.split(' ') -> $w { + my %nk = Set.new($w.lc.comb); + if ((%nk (&) %bk).elems == 0) { + $ct += 1; + } + } + $ct; +} diff --git a/challenge-341/roger-bell-west/raku/ch-2.p6 b/challenge-341/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..f7669e5a7a --- /dev/null +++ b/challenge-341/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,23 @@ +#! /usr/bin/raku + +use Test; + +plan 5; + +is(reverseprefix('programming', 'g'), 'gorpramming', 'example 1'); +is(reverseprefix('hello', 'h'), 'hello', 'example 2'); +is(reverseprefix('abcdefghij', 'h'), 'hgfedcbaij', 'example 3'); +is(reverseprefix('reverse', 's'), 'srevere', 'example 4'); +is(reverseprefix('perl', 'r'), 'repl', 'example 5'); + + +sub reverseprefix($a, $f) { + my @c = $a.comb; + my $p = index($a, $f); + with ($p) { + my @jr = @c[0 .. $p]; + @jr = @jr.reverse; + splice @c, 0, $p + 1, @jr; + } + join('', @c); +} diff --git a/challenge-341/roger-bell-west/ruby/ch-1.rb b/challenge-341/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..6fb5548710 --- /dev/null +++ b/challenge-341/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,41 @@ +#! /usr/bin/ruby + +require 'set' + +def brokenkeyboard(a, b) + bk = Set.new(b.map{|x| x.downcase}) + ct = 0 + a.downcase.split(" ").each do |w| + nk = Set.new(w.chars) + if (bk & nk).length == 0 + ct += 1 + end + end + ct +end + +require 'test/unit' + +class TestBrokenkeyboard < Test::Unit::TestCase + + def test_ex1 + assert_equal(1, brokenkeyboard('Hello World', ['d'])) + end + + def test_ex2 + assert_equal(0, brokenkeyboard('apple banana cherry', ['a', 'e'])) + end + + def test_ex3 + assert_equal(3, brokenkeyboard('Coding is fun', [])) + end + + def test_ex4 + assert_equal(2, brokenkeyboard('The Weekly Challenge', ['a', 'b'])) + end + + def test_ex5 + assert_equal(1, brokenkeyboard('Perl and Python', ['p'])) + end + +end diff --git a/challenge-341/roger-bell-west/ruby/ch-2.rb b/challenge-341/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..6dd7f0df84 --- /dev/null +++ b/challenge-341/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,39 @@ +#! /usr/bin/ruby + +def reverseprefix(a, f) + c = a.split("") + p = a.index(f) + if p >= 0 + jr = c.slice(0, p + 1).reverse + jr.each_with_index do |ch, i| + c[i] = ch + end + end + c.join("") +end + +require 'test/unit' + +class TestReverseprefix < Test::Unit::TestCase + + def test_ex1 + assert_equal('gorpramming', reverseprefix('programming', 'g')) + end + + def test_ex2 + assert_equal('hello', reverseprefix('hello', 'h')) + end + + def test_ex3 + assert_equal('hgfedcbaij', reverseprefix('abcdefghij', 'h')) + end + + def test_ex4 + assert_equal('srevere', reverseprefix('reverse', 's')) + end + + def test_ex5 + assert_equal('repl', reverseprefix('perl', 'r')) + end + +end diff --git a/challenge-341/roger-bell-west/rust/ch-1.rs b/challenge-341/roger-bell-west/rust/ch-1.rs new file mode 100755 index 0000000000..ac25d2c3bc --- /dev/null +++ b/challenge-341/roger-bell-west/rust/ch-1.rs @@ -0,0 +1,45 @@ +#! /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!(brokenkeyboard("Hello World", vec!["d"]), 1); +} + +#[test] +fn test_ex2() { + assert_eq!(brokenkeyboard("apple banana cherry", vec!["a", "e"]), 0); +} + +#[test] +fn test_ex3() { + assert_eq!(brokenkeyboard("Coding is fun", Vec::<&str>::new()), 3); +} + +#[test] +fn test_ex4() { + assert_eq!(brokenkeyboard("The Weekly Challenge", vec!["a", "b"]), 2); +} + +#[test] +fn test_ex5() { + assert_eq!(brokenkeyboard("Perl and Python", vec!["p"]), 1); +} + +fn brok |
