diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2024-08-13 10:39:33 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-13 10:39:33 +0100 |
| commit | 217ce0a85418baeff06cd44d8b8c3ba0473c0055 (patch) | |
| tree | 893f89b514c1349a3cb10895efab600d59e76c22 | |
| parent | f30ff0160fc6118f3736ac5d394f54a4dbac272f (diff) | |
| parent | 32c6e8534e4d0460d1f477517d0147ed06eba861 (diff) | |
| download | perlweeklychallenge-club-217ce0a85418baeff06cd44d8b8c3ba0473c0055.tar.gz perlweeklychallenge-club-217ce0a85418baeff06cd44d8b8c3ba0473c0055.tar.bz2 perlweeklychallenge-club-217ce0a85418baeff06cd44d8b8c3ba0473c0055.zip | |
Merge pull request #10606 from Firedrake/rogerbw-challenge-282
RogerBW solutions for challenge no. 282
23 files changed, 959 insertions, 0 deletions
diff --git a/challenge-282/roger-bell-west/crystal/ch-1.cr b/challenge-282/roger-bell-west/crystal/ch-1.cr new file mode 100755 index 0000000000..f3fd6c5fe2 --- /dev/null +++ b/challenge-282/roger-bell-west/crystal/ch-1.cr @@ -0,0 +1,26 @@ +#! /usr/bin/crystal +require "spec" +describe "goodinteger" do + it "test_ex1" do + goodinteger(12344456).should eq 444 + end + it "test_ex2" do + goodinteger(1233334).should eq -1 + end + it "test_ex3" do + goodinteger(10020003).should eq 0 + end +end + +def goodinteger(a) + winsize = 3 + d = a.to_s.chars + d.each_cons(winsize).each_with_index do |cc, offset| + if cc[0] == cc[1] && cc[1] == cc[2] + if (offset == 0 || d[offset - 1] != cc[0]) && (offset == d.size - winsize || d[offset + winsize] != cc[2]) + return cc.join("").to_i + end + end + end + -1 +end diff --git a/challenge-282/roger-bell-west/crystal/ch-2.cr b/challenge-282/roger-bell-west/crystal/ch-2.cr new file mode 100755 index 0000000000..b7b1110f47 --- /dev/null +++ b/challenge-282/roger-bell-west/crystal/ch-2.cr @@ -0,0 +1,27 @@ +#! /usr/bin/crystal +require "spec" +describe "changingkeys" do + it "test_ex1" do + changingkeys("pPeERrLl").should eq 3 + end + it "test_ex2" do + changingkeys("rRr").should eq 0 + end + it "test_ex3" do + changingkeys("GoO").should eq 1 + end +end + +def changingkeys(a) + oc = 'x' + out = 0 + a.downcase.chars.each_with_index do |c, i| + if i == 0 + oc = c + elsif c != oc + oc = c + out += 1 + end + end + out +end diff --git a/challenge-282/roger-bell-west/javascript/ch-1.js b/challenge-282/roger-bell-west/javascript/ch-1.js new file mode 100755 index 0000000000..4c36f7401a --- /dev/null +++ b/challenge-282/roger-bell-west/javascript/ch-1.js @@ -0,0 +1,46 @@ +#! /usr/bin/node + +"use strict" + +// by VLAZ +// https://stackoverflow.com/a/59322890 +function toWindows(inputArray, size) { + return Array.from( + {length: inputArray.length - (size - 1)}, //get the appropriate length + (_, index) => inputArray.slice(index, index+size) //create the windows + ) +} + +function goodinteger(a) { + const winsize = 3; + const d = a.toString().split(""); + let ex = -1; + toWindows(d, winsize).forEach((cc, offset) => { + if (ex == -1 && cc[0] == cc[1] && cc[1] == cc[2]) { + if ((offset == 0 || d[offset- 1] != cc[0]) && + (offset == d.size - winsize || d[offset + winsize] != cc[2])) { + ex = +cc.join(""); + } + } + }); + return ex; +} + +if (goodinteger(12344456) == 444) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (goodinteger(1233334) == -1) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (goodinteger(10020003) == 0) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-282/roger-bell-west/javascript/ch-2.js b/challenge-282/roger-bell-west/javascript/ch-2.js new file mode 100755 index 0000000000..04423e8aa1 --- /dev/null +++ b/challenge-282/roger-bell-west/javascript/ch-2.js @@ -0,0 +1,36 @@ +#! /usr/bin/node + +"use strict" + +function changingkeys(a) { + let oc = 'x'; + let out = 0; + a.toLowerCase().split("").forEach((c, i) => { + if (i == 0) { + oc = c; + } else if (c != oc) { + oc = c; + out ++; + } + }); + return out; +} + +if (changingkeys('pPeERrLl') == 3) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (changingkeys('rRr') == 0) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (changingkeys('GoO') == 1) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-282/roger-bell-west/kotlin/ch-1.kt b/challenge-282/roger-bell-west/kotlin/ch-1.kt new file mode 100644 index 0000000000..b2e63d62f2 --- /dev/null +++ b/challenge-282/roger-bell-west/kotlin/ch-1.kt @@ -0,0 +1,35 @@ +fun goodinteger(a: Int): Int { + val winsize = 3 + val d = a.toString().toList() + d.windowed(size = winsize).forEachIndexed{offset, cc -> + if (cc[0] == cc[1] && cc[1] == cc[2]) { + if ((offset == 0 || d[offset- 1] != cc[0]) && + (offset == d.size - winsize || d[offset + winsize] != cc[2])) { + return cc.joinToString("").toInt() + } + } + } + return -1 +} + +fun main() { + if (goodinteger(12344456) == 444) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (goodinteger(1233334) == -1) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (goodinteger(10020003) == 0) { + print("Pass") + } else { + print("Fail") + } + println("") + +} diff --git a/challenge-282/roger-bell-west/kotlin/ch-2.kt b/challenge-282/roger-bell-west/kotlin/ch-2.kt new file mode 100644 index 0000000000..c525861af5 --- /dev/null +++ b/challenge-282/roger-bell-west/kotlin/ch-2.kt @@ -0,0 +1,36 @@ +fun changingkeys(a: String): Int { + var oc = 'x' + var out = 0 + a.lowercase().forEachIndexed{i, c -> + if (i == 0) { + oc = c + } else if (c != oc) { + oc = c + out += 1 + } + } + return out +} + +fun main() { + + if (changingkeys("pPeERrLl") == 3) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (changingkeys("rRr") == 0) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (changingkeys("GoO") == 1) { + print("Pass") + } else { + print("Fail") + } + println("") + +} diff --git a/challenge-282/roger-bell-west/lua/ch-1.lua b/challenge-282/roger-bell-west/lua/ch-1.lua new file mode 100755 index 0000000000..9974154344 --- /dev/null +++ b/challenge-282/roger-bell-west/lua/ch-1.lua @@ -0,0 +1,57 @@ +#! /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 goodinteger(a) + local winsize = 3 + local d = split(a) + for offset = 1, #d - winsize + 1 do + local cc = {d[offset], d[offset + 1], d[offset + 2]} + if cc[1] == cc[2] and cc[2] == cc[3] then + if (offset == 1 or d[offset - 1] ~= cc[1]) and + (offset == #d - winsize + 1 or d[offset + winsize] ~= cc[3]) then + return join(cc) + 0 + end + end + end + return -1 +end + +if goodinteger(12344456) == 444 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if goodinteger(1233334) == -1 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if goodinteger(10020003) == 0 then + io.write("Pass") +else + io.write("FAIL") +end +print("") + diff --git a/challenge-282/roger-bell-west/lua/ch-2.lua b/challenge-282/roger-bell-west/lua/ch-2.lua new file mode 100755 index 0000000000..7dbb739188 --- /dev/null +++ b/challenge-282/roger-bell-west/lua/ch-2.lua @@ -0,0 +1,48 @@ +#! /usr/bin/lua + +function split(t) + local cl = {} + string.gsub(t, + "(.)", + function(c) + table.insert(cl, c) + end + ) + return cl +end + +function changingkeys(a) + local oc = "x" + local out = 0 + for i, c in ipairs(split(string.lower(a))) do + if i == 1 then + oc = c + elseif c ~= oc then + oc = c + out = out + 1 + end + end + return out +end + +if changingkeys("pPeERrLl") == 3 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if changingkeys("rRr") == 0 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if changingkeys("GoO") == 1 then + io.write("Pass") +else + io.write("FAIL") +end +print("") + diff --git a/challenge-282/roger-bell-west/perl/ch-1.pl b/challenge-282/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..c6610060dd --- /dev/null +++ b/challenge-282/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,30 @@ +#! /usr/bin/perl + +use strict; +use warnings; +use experimental 'signatures'; + +use Test::More tests => 3; + +is(goodinteger(12344456), 444, 'example 1'); +is(goodinteger(1233334), -1, 'example 2'); +is(goodinteger(10020003), 0, 'example 3'); + +use List::MoreUtils qw(slideatatime); + +sub goodinteger($a) { + my $winsize = 3; + my @d = split('', $a); + my $dd = slideatatime 1, $winsize, @d; + my $offset = 0; + while (my @cc = $dd->()) { + if ( scalar @cc == $winsize && $cc[0] eq $cc[1] && $cc[1] eq $cc[2]) { + if (($offset == 0 || $d[$offset - 1] ne $cc[0]) && + ($offset == (scalar @d) - $winsize || $d[$offset + $winsize] ne $cc[2])) { + return join('', @cc) + 0; + } + } + $offset++; + } + return -1; +} diff --git a/challenge-282/roger-bell-west/perl/ch-2.pl b/challenge-282/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..39ccfb0baa --- /dev/null +++ b/challenge-282/roger-bell-west/perl/ch-2.pl @@ -0,0 +1,26 @@ +#! /usr/bin/perl + +use strict; +use warnings; +use experimental 'signatures'; + +use Test::More tests => 3; + +is(changingkeys('pPeERrLl'), 3, 'example 1'); +is(changingkeys('rRr'), 0, 'example 2'); +is(changingkeys('GoO'), 1, 'example 3'); + +sub changingkeys($a) { + my $oc = 'x'; + my $out = 0; + my @s = split('', lc($a)); + while (my ($i, $c) = each @s) { + if ($i == 0) { + $oc = $c; + } elsif ($c ne $oc) { + $oc = $c; + $out++; + } + } + return $out; +} diff --git a/challenge-282/roger-bell-west/postscript/ch-1.ps b/challenge-282/roger-bell-west/postscript/ch-1.ps new file mode 100644 index 0000000000..d5cc6be7fc --- /dev/null +++ b/challenge-282/roger-bell-west/postscript/ch-1.ps @@ -0,0 +1,140 @@ +%!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.start { + print (:) print + /test.pass 0 def + /test.count 0 def +} bind def + +/enumerate.array { + 1 dict begin + /a exch def + [ + 0 1 a length 1 sub { + [ exch dup a exch get ] + } for + ] + 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 + +/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 + +/rotor { + 5 dict begin + /delta exch def + /size exch def + dup length /len exch def + /ar exch def + /ix 0 def + [ + { + ix size add len gt { + exit + } if + ar ix size getinterval + /ix ix size delta add add def + } loop + ] + end +} bind def + +/alloccvs { + 2 dict begin + /n exch def + /a 1 def + n + dup 0 lt { + /a a 1 add def + neg + } if + { + dup 10 lt { + exit + } if + /a a 1 add def + 10 idiv + } loop + pop + n a string cvs + end +} bind def + + +% end included library code + +/goodinteger { + 0 dict begin + /winsize 3 def + alloccvs s2a /d exch def + -1 + d winsize 1 winsize sub rotor enumerate.array { + aload pop + /cc exch def + /offset exch def + cc 0 get cc 1 get eq cc 1 get cc 2 get eq and { + /valid true def + offset 0 ne { + d offset 1 sub get cc 0 get eq { + /valid false def + } if + } if + offset d length winsize sub ne { + d offset winsize add get cc 2 get eq { + /valid false def + } if + } if + valid { + pop + cc a2s cvi + exit + } if + } if + } forall + end +} bind def + +(goodinteger) test.start +12344456 goodinteger 444 eq test +1233334 goodinteger -1 eq test +10020003 goodinteger 0 eq test +test.end diff --git a/challenge-282/roger-bell-west/postscript/ch-2.ps b/challenge-282/roger-bell-west/postscript/ch-2.ps new file mode 100644 index 0000000000..5adf0bef92 --- /dev/null +++ b/challenge-282/roger-bell-west/postscript/ch-2.ps @@ -0,0 +1,101 @@ +%!PS + +% begin included library code +% see https://codeberg.org/Firedrake/postscript-libraries/ +/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 { + /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 + +/enumerate.array { + 1 dict begin + /a exch def + [ + 0 1 a length 1 sub { + [ exch dup a exch get ] + } for + ] + end +} bind def + +/tolower { + s2a + [ exch + { + dup dup 65 ge exch 90 le and { + 32 add + } if + } forall + ] a2s +} bind def + +/s2a { + [ exch { } forall ] +} 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 + +/changingkeys { + 0 dict begin + /oc 0 def + /out 0 def + tolower s2a enumerate.array { + aload pop + /c exch def + /i exch def + i 0 eq { + /oc c def + } { + c oc ne { + /oc c def + /out out 1 add def + } if + } ifelse + } forall + out + end +} bind def + +(changingkeys) test.start +(pPeERrLl) changingkeys 3 eq test +(rRr) changingkeys 0 eq test +(GoO) changingkeys 1 eq test +test.end diff --git a/challenge-282/roger-bell-west/python/ch-1.py b/challenge-282/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..65f3bff361 --- /dev/null +++ b/challenge-282/roger-bell-west/python/ch-1.py @@ -0,0 +1,39 @@ +#! /usr/bin/python3 + +import collections +from itertools import islice + +# https://docs.python.org/3/library/itertools.html +def sliding_window(iterable, n): + # sliding_window('ABCDEFG', 4) --> ABCD BCDE CDEF DEFG + it = iter(iterable) + window = collections.deque(islice(it, n), maxlen=n) + if len(window) == n: + yield tuple(window) + for x in it: + window.append(x) + yield tuple(window) + +def goodinteger(a): + winsize = 3 + d = str(a) + for offset, cc in enumerate(sliding_window(d, winsize)): + if cc[0] == cc[1] and cc[1] == cc[2]: + if (offset == 0 or d[offset - 1] != cc[0]) and (offset == len(d) - winsize or d[offset + winsize] != cc[2]): + return int("".join(cc)) + return -1 + +import unittest + +class TestGoodinteger(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(goodinteger(12344456), 444, 'example 1') + + def test_ex2(self): + self.assertEqual(goodinteger(1233334), -1, 'example 2') + + def test_ex3(self): + self.assertEqual(goodinteger(10020003), 0, 'example 3') + +unittest.main() diff --git a/challenge-282/roger-bell-west/python/ch-2.py b/challenge-282/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..ebe05e4c8d --- /dev/null +++ b/challenge-282/roger-bell-west/python/ch-2.py @@ -0,0 +1,27 @@ +#! /usr/bin/python3 + +def changingkeys(a): + oc = "x" + out = 0 + for i, c in enumerate(a.lower()): + if i == 0: + oc = c + elif c != oc: + oc = c + out += 1 + return out + +import unittest + +class TestChangingkeys(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(changingkeys("pPeERrLl"), 3, 'example 1') + + def test_ex2(self): + self.assertEqual(changingkeys("rRr"), 0, 'example 2') + + def test_ex3(self): + self.assertEqual(changingkeys("GoO"), 1, 'example 3') + +unittest.main() diff --git a/challenge-282/roger-bell-west/raku/ch-1.p6 b/challenge-282/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..9bf22afd31 --- /dev/null +++ b/challenge-282/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,23 @@ +#! /usr/bin/raku + +use Test; + +plan 3; + +is(goodinteger(12344456), 444, 'example 1'); +is(goodinteger(1233334), -1, 'example 2'); +is(goodinteger(10020003), 0, 'example 3'); + +sub goodinteger($a) { + my $winsize = 3; + my @d = $a.comb; + for @d.rotor($winsize => 1 - $winsize).kv -> $offset, @cc { + if (@cc[0] == @cc[1] && @cc[1] == @cc[2]) { + if (($offset == 0 || @d[$offset - 1] != @cc[0]) && + ($offset == @d.elems - $winsize || @d[$offset + $winsize]!= @cc[2])) { + return @cc.join('') + 0; + } + } + } + -1 +} diff --git a/challenge-282/roger-bell-west/raku/ch-2.p6 b/challenge-282/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..e6f292ab78 --- /dev/null +++ b/challenge-282/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,23 @@ +#! /usr/bin/raku + +use Test; + +plan 3; + +is(changingkeys('pPeERrLl'), 3, 'example 1'); +is(changingkeys('rRr'), 0, 'example 2'); +is(changingkeys('GoO'), 1, 'example 3'); + +sub changingkeys($a) { + my $oc = 'x'; + my $out = 0; + for $a.lc.comb.kv -> $i, $c { + if ($i == 0) { + $oc = $c; + } elsif ($c ne $oc) { + $oc = $c; + $out++; + } + } + return $out; +} diff --git a/challenge-282/roger-bell-west/ruby/ch-1.rb b/challenge-282/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..7cfa7c4919 --- /dev/null +++ b/challenge-282/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,32 @@ +#! /usr/bin/ruby + +require 'test/unit' + +class TestGoodinteger < Test::Unit::TestCase + + def test_ex1 + assert_equal(444, goodinteger(12344456)) + end + + def test_ex2 + assert_equal(-1, goodinteger(1233334)) + end + + def test_ex3 + assert_equal(0, goodinteger(10020003)) + end + +end + +def goodinteger(a) + winsize = 3 + d = a.to_s.chars + d.each_cons(winsize).each_with_index do |cc, offset| + if cc[0] == cc[1] && cc[1] == cc[2] + if (offset == 0 || d[offset - 1] != cc[0]) && (offset == d.size - winsize || d[offset + winsize] != cc[2]) + return cc.join("").to_i + end + end + end + -1 +end diff --git a/challenge-282/roger-bell-west/ruby/ch-2.rb b/challenge-282/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..6a28c5241d --- /dev/null +++ b/challenge-282/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,33 @@ +#! /usr/bin/ruby + +require 'test/unit' + +class TestChangingkeys < Test::Unit::TestCase + + def test_ex1 + assert_equal(3, changingkeys('pPeERrLl')) + end + + def test_ex2 + assert_equal(0, changingkeys('rRr')) + end + + def test_ex3 + assert_equal(1, changingkeys('GoO')) + end + +end + +def changingkeys(a) + oc = 'x' + out = 0 + a.downcase.chars.each_with_index do |c, i| + if i == 0 + oc = c + elsif c != oc + oc = c + out += 1 + end + end + out +end diff --git a/challenge-282/roger-bell-west/rust/ch-1.rs b/challenge-282/roger-bell-west/rust/ch-1.rs new file mode 100755 index 0000000000..a29d508fca --- /dev/null +++ b/challenge-282/roger-bell-west/rust/ch-1.rs @@ -0,0 +1,36 @@ +#! /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!(goodinteger(12344456), 444); +} + +#[test] +fn test_ex2() { + assert_eq!(goodinteger(1233334), -1); +} + +#[test] +fn test_ex3() { + assert_eq!(goodinteger(10020003), 0); +} + +fn goodinteger(a: u32) -> i32 { + let winsize = 3; + let d = a.to_string().chars().collect::<Vec<char>>(); + for (offset, cc) in d.windows(winsize).enumerate() { + if cc[0] == cc[1] && cc[1] == cc[2] { + if (offset == 0 || d[offset - 1] != cc[0]) + && (offset == d.len() - winsize || d[offset + winsize] != cc[2]) + { + return cc + .into_iter() + .collect::<String>() + .parse::<i32>() + .unwrap(); + } + } + } + -1 +} diff --git a/challenge-282/roger-bell-west/rust/ch-2.rs b/challenge-282/roger-bell-west/rust/ch-2.rs new file mode 100755 index 0000000000..a8ae2fc51d --- /dev/null +++ b/challenge-282/roger-bell-west/rust/ch-2.rs @@ -0,0 +1,31 @@ +#! /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!(changingkeys("pPeERrLl"), 3); +} + +#[test] +fn test_ex2() { + assert_eq!(changingkeys("rRr"), 0); +} + +#[test] +fn test_ex3() { + assert_eq!(changingkeys("GoO"), 1); +} + +fn changingkeys(a: &str) -> u32 { + let mut oc = 'x'; + let mut out = 0; + for (i, c) in a.to_ascii_lowercase().chars().enumerate() { + if i == 0 { + oc = c; + } else if c != oc { + oc = c; + out += 1; + } + } + out +} diff --git a/challenge-282/roger-bell-west/scala/ch-1.scala b/challenge-282/roger-bell-west/scala/ch-1.scala new file mode 100644 index 0000000000..bb649303f0 --- /dev/null +++ b/challenge-282/roger-bell-west/scala/ch-1.scala @@ -0,0 +1,38 @@ + +object Goodinteger { + def goodinteger(a: Int): Int = { + val winsize = 3 + val d = a.toString.split("") + var ex = -1 + for ((cc, offset) <- d.sliding(winsize).zipWithIndex) { + if (ex == -1 && cc(0) == cc(1) && cc(1) == cc(2)) { + if ((offset == 0 || d(offset- 1) != cc(0)) && + (offset == d.size - winsize || d(offset + winsize) != cc(2))) { + ex = cc.mkString("").toInt + } + } + } + ex + } + def main(args: Array[String]) { + if (goodinteger(12344456) == 444) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (goodinteger(1233334) == -1) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (goodinteger(10020003) == 0) { + print("Pass") + } else { + print("Fail") + } |
