aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2024-01-31 13:26:55 +0000
committerGitHub <noreply@github.com>2024-01-31 13:26:55 +0000
commita52561b3a2f2989033faea3c0948020a10720dbb (patch)
tree9dd1466c117888f77f2e2dde7c1a5baaa5e399a3
parent14a71230782641a6eb108626e1aa9fa6c68586f2 (diff)
parent36f651dc0ada9626d4299275c1ffc92b3a7d8717 (diff)
downloadperlweeklychallenge-club-a52561b3a2f2989033faea3c0948020a10720dbb.tar.gz
perlweeklychallenge-club-a52561b3a2f2989033faea3c0948020a10720dbb.tar.bz2
perlweeklychallenge-club-a52561b3a2f2989033faea3c0948020a10720dbb.zip
Merge pull request #9496 from Firedrake/rogerbw-challenge-254
RogerBW solutions for challenge no. 254
-rwxr-xr-xchallenge-254/roger-bell-west/javascript/ch-1.js46
-rwxr-xr-xchallenge-254/roger-bell-west/javascript/ch-2.js67
-rw-r--r--challenge-254/roger-bell-west/kotlin/ch-1.kt46
-rw-r--r--challenge-254/roger-bell-west/kotlin/ch-2.kt56
-rwxr-xr-xchallenge-254/roger-bell-west/lua/ch-1.lua47
-rwxr-xr-xchallenge-254/roger-bell-west/lua/ch-2.lua67
-rwxr-xr-xchallenge-254/roger-bell-west/perl/ch-1.pl35
-rwxr-xr-xchallenge-254/roger-bell-west/perl/ch-2.pl42
-rw-r--r--challenge-254/roger-bell-west/postscript/ch-1.ps73
-rw-r--r--challenge-254/roger-bell-west/postscript/ch-2.ps136
-rwxr-xr-xchallenge-254/roger-bell-west/python/ch-1.py34
-rwxr-xr-xchallenge-254/roger-bell-west/python/ch-2.py43
-rwxr-xr-xchallenge-254/roger-bell-west/raku/ch-1.p633
-rwxr-xr-xchallenge-254/roger-bell-west/raku/ch-2.p640
-rwxr-xr-xchallenge-254/roger-bell-west/ruby/ch-1.rb43
-rwxr-xr-xchallenge-254/roger-bell-west/ruby/ch-2.rb53
-rwxr-xr-xchallenge-254/roger-bell-west/rust/ch-1.rs41
-rwxr-xr-xchallenge-254/roger-bell-west/rust/ch-2.rs51
-rw-r--r--challenge-254/roger-bell-west/scala/ch-1.scala48
-rw-r--r--challenge-254/roger-bell-west/scala/ch-2.scala58
-rw-r--r--challenge-254/roger-bell-west/tests.yaml19
21 files changed, 1078 insertions, 0 deletions
diff --git a/challenge-254/roger-bell-west/javascript/ch-1.js b/challenge-254/roger-bell-west/javascript/ch-1.js
new file mode 100755
index 0000000000..ea5bcfa91f
--- /dev/null
+++ b/challenge-254/roger-bell-west/javascript/ch-1.js
@@ -0,0 +1,46 @@
+#! /usr/bin/node
+
+"use strict"
+
+function threepower(n0) {
+ if (n0 == 0) {
+ return false;
+ }
+ let n = Math.abs(n0);
+ let lo = 1;
+ let hi = Math.floor(n / 2);
+ while (true) {
+ const t = Math.floor((lo + hi) / 2);
+ const c = t * t * t;
+ if (c == n) {
+ return true;
+ }
+ if (lo == t) {
+ return false;
+ }
+ if (c < n) {
+ lo = t;
+ } else {
+ hi = t;
+ }
+ }
+}
+
+if (threepower(27)) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (!threepower(0)) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (!threepower(6)) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-254/roger-bell-west/javascript/ch-2.js b/challenge-254/roger-bell-west/javascript/ch-2.js
new file mode 100755
index 0000000000..0386bdcdb4
--- /dev/null
+++ b/challenge-254/roger-bell-west/javascript/ch-2.js
@@ -0,0 +1,67 @@
+#! /usr/bin/node
+
+"use strict"
+
+function is_vowel(c) {
+ switch (c.toLowerCase()) {
+ case "a":
+ return true;
+ case "e":
+ return true;
+ case "i":
+ return true;
+ case "o":
+ return true;
+ case "u":
+ return true;
+ default:
+ return false;
+ }
+}
+
+function reversevowels(a) {
+ const p = a.split("");
+ const q = p.filter(c => is_vowel(c));
+ let qi = q.length;
+ let o = [];
+ for (let c of p) {
+ if (is_vowel(c)) {
+ qi -= 1;
+ let nc = q[qi];
+ if (c.toUpperCase() == c) {
+ nc = nc.toUpperCase();
+ } else {
+ nc = nc.toLowerCase();
+ }
+ o.push(nc);
+ } else {
+ o.push(c);
+ }
+ }
+ return o.join("");
+}
+
+if (reversevowels('Raku') == 'Ruka') {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (reversevowels('Perl') == 'Perl') {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (reversevowels('Julia') == 'Jaliu') {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (reversevowels('Uiua') == 'Auiu') {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-254/roger-bell-west/kotlin/ch-1.kt b/challenge-254/roger-bell-west/kotlin/ch-1.kt
new file mode 100644
index 0000000000..4461e0a14d
--- /dev/null
+++ b/challenge-254/roger-bell-west/kotlin/ch-1.kt
@@ -0,0 +1,46 @@
+fun threepower(n0: Int): Boolean {
+ if (n0 == 0) {
+ return false
+ }
+ val n = Math.abs(n0)
+ var lo = 1
+ var hi = n / 2
+ while (true) {
+ val t = (lo + hi) / 2
+ val c = t * t * t
+ if (c == n) {
+ return true
+ }
+ if (lo == t) {
+ return false
+ }
+ if (c < n) {
+ lo = t
+ } else {
+ hi = t
+ }
+ }
+}
+
+fun main() {
+
+ if (threepower(27)) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (!threepower(0)) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (!threepower(6)) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-254/roger-bell-west/kotlin/ch-2.kt b/challenge-254/roger-bell-west/kotlin/ch-2.kt
new file mode 100644
index 0000000000..69eedcfb34
--- /dev/null
+++ b/challenge-254/roger-bell-west/kotlin/ch-2.kt
@@ -0,0 +1,56 @@
+fun is_vowel(c: Char): Boolean {
+ return when (c.lowercaseChar()) {
+ 'a', 'e', 'i', 'o', 'u' -> true
+ else -> false
+ }
+}
+fun reversevowels(a: String): String {
+ val p = a.toCharArray().toList()
+ val q = p.filter{is_vowel(it)}
+ var qi = q.size
+ var o = ArrayList<Char>()
+ for (c in p) {
+ if (is_vowel(c)) {
+ qi -= 1;
+ var nc = q[qi]
+ if (c.isUpperCase()) {
+ nc = nc.uppercaseChar()
+ } else {
+ nc = nc.lowercaseChar()
+ }
+ o.add(nc)
+ } else {
+ o.add(c)
+ }
+ }
+ return o.joinToString("")
+}
+
+fun main() {
+
+ if (reversevowels("Raku") == "Ruka") {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (reversevowels("Perl") == "Perl") {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (reversevowels("Julia") == "Jaliu") {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (reversevowels("Uiua") == "Auiu") {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-254/roger-bell-west/lua/ch-1.lua b/challenge-254/roger-bell-west/lua/ch-1.lua
new file mode 100755
index 0000000000..f76b1db415
--- /dev/null
+++ b/challenge-254/roger-bell-west/lua/ch-1.lua
@@ -0,0 +1,47 @@
+#! /usr/bin/lua
+
+function threepower(n0)
+ if n0 == 0 then
+ return false
+ end
+ local n = math.abs(n0)
+ local lo = 1
+ local hi = math.floor(n / 2)
+ while true do
+ local t= math.floor((lo + hi) / 2)
+ local c = t * t * t
+ if c == n then
+ return true
+ end
+ if lo == t then
+ return false
+ end
+ if c < n then
+ lo = t
+ else
+ hi = t
+ end
+ end
+end
+
+if threepower(27) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if not threepower(0) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if not threepower(6) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-254/roger-bell-west/lua/ch-2.lua b/challenge-254/roger-bell-west/lua/ch-2.lua
new file mode 100755
index 0000000000..0751ba8dae
--- /dev/null
+++ b/challenge-254/roger-bell-west/lua/ch-2.lua
@@ -0,0 +1,67 @@
+#! /usr/bin/lua
+
+function is_vowel(c)
+ if string.find(string.lower(c), "[aeiou]") == 1 then
+ return true
+ else
+ return false
+ end
+end
+
+function reversevowels(a)
+ local p = {}
+ local q = {}
+ for i = 1, string.len(a) do
+ local c = string.sub(a, i, i)
+ table.insert(p, c)
+ if is_vowel(c) then
+ table.insert(q, c)
+ end
+ end
+ local qi = #q
+ local o = ""
+ for _, c in ipairs(p) do
+ if is_vowel(c) then
+ nc = q[qi]
+ qi = qi - 1
+ if string.upper(c) == c then
+ nc = string.upper(nc)
+ else
+ nc = string.lower(nc)
+ end
+ o = o .. nc
+ else
+ o = o .. c
+ end
+ end
+ return o
+end
+
+if reversevowels("Raku") == "Ruka" then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if reversevowels("Perl") == "Perl" then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if reversevowels("Julia") == "Jaliu" then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if reversevowels("Uiua") == "Auiu" then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-254/roger-bell-west/perl/ch-1.pl b/challenge-254/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..64077004d8
--- /dev/null
+++ b/challenge-254/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,35 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 3;
+
+is(threepower(27), 1, 'example 1');
+is(threepower(0), 0, 'example 2');
+is(threepower(6), 0, 'example 3');
+
+sub threepower($n0) {
+ if ($n0 == 0) {
+ return 0;
+ }
+ my $n = abs($n0);
+ my $lo = 1;
+ my $hi = int($n / 2);
+ while (1) {
+ my $t = int(($lo + $hi) / 2);
+ my $c = $t * $t * $t;
+ if ($c == $n) {
+ return 1;
+ }
+ if ($lo == $t) {
+ return 0;
+ }
+ if ($c < $n) {
+ $lo = $t;
+ } else {
+ $hi = $t;
+ }
+ }
+}
diff --git a/challenge-254/roger-bell-west/perl/ch-2.pl b/challenge-254/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..879bdbb9fb
--- /dev/null
+++ b/challenge-254/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,42 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 4;
+
+is(reversevowels('Raku'), 'Ruka', 'example 1');
+is(reversevowels('Perl'), 'Perl', 'example 2');
+is(reversevowels('Julia'), 'Jaliu', 'example 3');
+is(reversevowels('Uiua'), 'Auiu', 'example 4');
+
+sub is_vowel($c) {
+ if ($c =~ /[aeiou]/i) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+sub reversevowels($a) {
+ my @p = split('', $a);
+ my @q = grep {is_vowel($_)} @p;
+ my $qi = scalar @q;
+ my @o;
+ foreach my $c (@p) {
+ if (is_vowel($c)) {
+ $qi--;
+ my $nc = $q[$qi];
+ if ($c eq uc($c)) {
+ $nc = uc($nc);
+ } else {
+ $nc = lc($nc);
+ }
+ push @o, $nc;
+ } else {
+ push @o, $c;
+ }
+ }
+ return join('', @o);
+}
diff --git a/challenge-254/roger-bell-west/postscript/ch-1.ps b/challenge-254/roger-bell-west/postscript/ch-1.ps
new file mode 100644
index 0000000000..f05cec0e91
--- /dev/null
+++ b/challenge-254/roger-bell-west/postscript/ch-1.ps
@@ -0,0 +1,73 @@
+%!PS
+
+% begin included library code
+% see https://codeberg.org/Firedrake/postscript-libraries/
+/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 {
+ /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
+
+
+% end included library code
+
+/threepower {
+ 0 dict begin
+ /n exch def
+ n 0 eq {
+ false
+ } {
+ /n n abs def
+ /lo 1 def
+ /hi n 2 idiv def
+ {
+ /t lo hi add 2 idiv def
+ /c t dup dup mul mul def
+ c n eq {
+ true
+ exit
+ } if
+ lo t eq {
+ false
+ exit
+ } if
+ c n lt {
+ /lo t def
+ } {
+ /hi t def
+ } ifelse
+ } loop
+ } ifelse
+ end
+} bind def
+
+(threepower) test.start
+27 threepower test
+0 threepower not test
+6 threepower not test
+test.end
diff --git a/challenge-254/roger-bell-west/postscript/ch-2.ps b/challenge-254/roger-bell-west/postscript/ch-2.ps
new file mode 100644
index 0000000000..743759e592
--- /dev/null
+++ b/challenge-254/roger-bell-west/postscript/ch-2.ps
@@ -0,0 +1,136 @@
+%!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
+
+/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
+
+/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 {
+ /test.count test.count 1 add def
+ {
+ /test.pass test.pass 1 add def
+ } {
+ ( ) print
+ test.count (....) cvs print
+ (-fail) print
+ } ifelse
+} bind def
+
+/toupper {
+ s2a
+ [ exch
+ {
+ dup dup 97 ge exch 122 le and {
+ 32 sub
+ } if
+ } forall
+ ] a2s
+} bind def
+
+/tolower {
+ s2a
+ [ exch
+ {
+ dup dup 65 ge exch 90 le and {
+ 32 add
+ } if
+ } forall
+ ] a2s
+} bind def
+
+
+% end included library code
+
+/is_vowel {
+ << 65 true
+ 69 true
+ 73 true
+ 79 true
+ 85 true
+ 97 true
+ 101 true
+ 105 true
+ 111 true
+ 117 true >>
+ exch known
+} bind def
+
+/reversevowels {
+ 0 dict begin
+ /p exch s2a def
+ /q p { is_vowel } filter def
+ /qi q length def
+ [
+ p {
+ /c exch def
+ c is_vowel {
+ /qi qi 1 sub def
+ /nc q qi get def
+ c 65 ge c 90 le and {
+ 1 string dup 0 nc put toupper 0 get /nc exch def
+ } {
+ c 97 ge c 122 le and {
+ 1 string dup 0 nc put tolower 0 get /nc exch def
+ } if
+ } ifelse
+ nc
+ } {
+ c
+ } ifelse
+ } forall
+ ] a2s
+ end
+} bind def
+
+(reversevowels) test.start
+(Raku) reversevowels (Ruka) eq test
+(Perl) reversevowels (Perl) eq test
+(Julia) reversevowels (Jaliu) eq test
+(Uiua) reversevowels (Auiu) eq test
+test.end
diff --git a/challenge-254/roger-bell-west/python/ch-1.py b/challenge-254/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..80b30293ea
--- /dev/null
+++ b/challenge-254/roger-bell-west/python/ch-1.py
@@ -0,0 +1,34 @@
+#! /usr/bin/python3
+
+def threepower(n0):
+ if n0 == 0:
+ return False
+ n = abs(n0)
+ lo = 1
+ hi = int(n / 2)
+ while True:
+ t = int((lo + hi) / 2)
+ c = t * t * t
+ if c == n:
+ return True
+ if lo == t:
+ return False
+ if c < n:
+ lo = t
+ else:
+ hi = t
+
+import unittest
+
+class TestThreepower(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(threepower(27), True, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(threepower(0), False, 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(threepower(6), False, 'example 3')
+
+unittest.main()
diff --git a/challenge-254/roger-bell-west/python/ch-2.py b/challenge-254/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..3a206826be
--- /dev/null
+++ b/challenge-254/roger-bell-west/python/ch-2.py
@@ -0,0 +1,43 @@
+#! /usr/bin/python3
+
+def is_vowel(c):
+ match c.lower():
+ case 'a' | 'e' | 'i' | 'o' | 'u':
+ return True
+ case _:
+ return False
+
+def reversevowels(a):
+ q = [c for c in a if is_vowel(c)]
+ qi = len(q)
+ o = []
+ for c in a:
+ if is_vowel(c):
+ qi -= 1
+ nc = q[qi]
+ if c.isupper():
+ nc = nc.upper()
+ else:
+ nc = nc.lower()
+ o.append(nc)
+ else:
+ o.append(c)
+ return "".join(o)
+
+import unittest
+
+class TestReversevowels(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(reversevowels("Raku"), "Ruka", 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(reversevowels("Perl"), "Perl", 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(reversevowels("Julia"), "Jaliu", 'example 3')
+
+ def test_ex4(self):
+ self.assertEqual(reversevowels("Uiua"), "Auiu", 'example 4')
+
+unittest.main()
diff --git a/challenge-254/roger-bell-west/raku/ch-1.p6 b/challenge-254/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..f0f09cac8d
--- /dev/null
+++ b/challenge-254/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,33 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 3;
+
+is(threepower(27), True, 'example 1');
+is(threepower(0), False, 'example 2');
+is(threepower(6), False, 'example 3');
+
+sub threepower($n0) {
+ if ($n0 == 0) {
+ return False;
+ }
+ my $n = abs($n0);
+ my $lo = 1;
+ my Int $hi = $n div 2;
+ while (True) {
+ my Int $t = ($lo + $hi) div 2;
+ my $c = $t * $t * $t;
+ if ($c == $n) {
+ return True;
+ }
+ if ($lo == $t) {
+ return False;
+ }
+ if ($c < $n) {
+ $lo = $t;
+ } else {
+ $hi = $t;
+ }
+ }
+}
diff --git a/challenge-254/roger-bell-west/raku/ch-2.p6 b/challenge-254/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..e62d934ce5
--- /dev/null
+++ b/challenge-254/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,40 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 4;
+
+is(reversevowels('Raku'), 'Ruka', 'example 1');
+is(reversevowels('Perl'), 'Perl', 'example 2');
+is(reversevowels('Julia'), 'Jaliu', 'example 3');
+is(reversevowels('Uiua'), 'Auiu', 'example 4');
+
+sub is_vowel($c) {
+ if ($c ~~ m:i/<[aeiou]>/) {
+ return True;
+ } else {
+ return False;
+ }
+}
+
+sub reversevowels($a) {
+ my @p = $a.comb();
+ my @q = @p.grep({is_vowel($_)});
+ my $qi = @q.elems;
+ my @o;
+ for @p -> $c {
+ if (is_vowel($c)) {
+ $qi--;
+ my $nc = @q[$qi];
+ if ($c eq uc($c)) {
+ $nc = uc($nc);
+ } else {
+ $nc = lc($nc);
+ }
+ @o.push($nc);
+ } else {
+ @o.push($c);
+ }
+ }
+ return @o.join('');
+}
diff --git a/challenge-254/roger-bell-west/ruby/ch-1.rb b/challenge-254/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..530cbb8229
--- /dev/null
+++ b/challenge-254/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,43 @@
+#! /usr/bin/ruby
+
+def threepower(n0)
+ if n0 == 0 then
+ return false
+ end
+ n = n0.abs
+ lo = 1
+ hi = n.div(2)
+ while true do
+ t = (lo + hi).div(2)
+ c = t * t * t
+ if c == n then
+ return true
+ end
+ if lo == t then
+ return false
+ end
+ if c < n then
+ lo = t
+ else
+ hi = t
+ end
+ end
+end
+
+require 'test/unit'
+
+class TestThreepower < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(true, threepower(27))
+ end
+
+ def test_ex2
+ assert_equal(false, threepower(0))
+ end
+
+ def test_ex3
+ assert_equal(false, threepower(6))
+ end
+
+end
diff --git a/challenge-254/roger-bell-west/ruby/ch-2.rb b/challenge-254/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..7e0413801d
--- /dev/null
+++ b/challenge-254/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,53 @@
+#! /usr/bin/ruby
+
+def is_vowel(c)
+ if c.downcase =~ /[aeiou]/ then
+ return true
+ else
+ return false
+ end
+end
+
+def reversevowels(a)
+ p = a.split('')
+ q = p.find_all { |c| is_vowel(c) }
+ qi = q.length
+ o = []
+ p.each do |c|
+ if is_vowel(c)
+ qi -= 1
+ nc = q[qi]
+ if c == c.upcase then
+ nc = nc.upcase
+ else
+ nc = nc.downcase
+ end
+ o.push(nc)
+ else
+ o.push(c)
+ end
+ end
+ return o.join("")
+end
+
+require 'test/unit'
+
+class TestReversevowels < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal('Ruka', reversevowels('Raku'))
+ end
+
+ def test_ex2
+ assert_equal('Perl', reversevowels('Perl'))
+ end
+
+ def test_ex3
+ assert_equal('Jaliu', reversevowels('Julia'))
+ end
+
+ def test_ex4
+ assert_equal('Auiu', reversevowels('Uiua'))
+ end
+
+end
diff --git a/challenge-254/roger-bell-west/rust/ch-1.rs b/challenge-254/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..cf992ffd44
--- /dev/null
+++ b/challenge-254/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,41 @@
+#! /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!(threepower(27), true);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(threepower(0), false);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(threepower(6), false);
+}
+
+fn threepower(n0: i32) -> bool {
+ if n0 == 0 {
+ return false;
+ }
+ let n = n0.abs();
+ let mut lo = 1;
+ let mut hi = n / 2;
+ loop {
+ let t = (lo + hi) / 2;
+ let c = t * t * t;
+ if c == n {
+ return true;
+ }
+ if lo == t {
+ return false;
+ }
+ if c < n {
+ lo = t;
+ } else {
+ hi = t;
+ }
+ }
+}
diff --git a/challenge-254/roger-bell-west/rust/ch-2.rs b/challenge-254/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..ed16b36e2e
--- /dev/null
+++ b/challenge-254/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,51 @@
+#! /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!(reversevowels("Raku"), "Ruka");
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(reversevowels("Perl"), "Perl");
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(reversevowels("Julia"), "Jaliu");
+}
+
+#[test]
+fn test_ex4() {
+ assert_eq!(reversevowels("Uiua"), "Auiu");
+}
+
+fn is_vowel(c: char) -> bool {
+ match c.to_ascii_lowercase() {
+ 'a' | 'e' | 'i' | 'o' | 'u' => true,
+ _ => false,
+ }
+}
+
+fn reversevowels(a: &str) -> String {
+ let p = a.chars().collect::<Vec<_>>();
+ let q = p.iter().filter(|c| is_vowel(**c)).collect::<Vec<_>>();
+ let mut qi = q.len();
+ let mut o: Vec<char> = Vec::new();
+ for c in &p {
+ if is_vowel(*c) {
+ qi -= 1;
+ let mut nc = *q[qi];
+ if c.is_uppercase() {
+ nc = nc.to_ascii_uppercase();
+ } else {
+ nc = nc.to_ascii_lowercase();
+ }
+ o.push(nc);
+ } else {
+ o.push(*c);
+ }
+ }
+ o.iter().collect::<String>()
+}
diff --git a/challenge-254/roger-bell-west/scala/ch-1.scala b/challenge-254/roger-bell-west/scala/ch-1.scala
new file mode 100644
index 0000000000..58f2c83a25
--- /dev/null
+++ b/challenge-254/roger-bell-west/scala/ch-1.scala
@@ -0,0 +1,48 @@
+
+object Threepower {
+ def threepower(n0: Int): Boolean = {
+ if (n0 == 0) {
+ return false
+ }
+ var n = n0.abs
+ var lo = 1
+ var hi = n / 2
+ while (true) {
+ val t = (lo + hi) / 2
+ val c = t * t * t
+ if (c == n) {
+ return true
+ }
+ if (lo == t) {
+ return false
+ }
+ if (c < n) {
+ lo = t
+ } else {
+ hi = t
+ }
+ }
+ return false
+ }
+ def ma