aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2024-01-16 14:13:30 +0000
committerRoger Bell_West <roger@firedrake.org>2024-01-16 14:13:30 +0000
commit81e18817e54f47758158bc184be04b8c2ea3107f (patch)
tree529f47d72368ed8da59830703afe02961d7fc150
parent7efb373bb9adffa79f84825217015835805298b5 (diff)
downloadperlweeklychallenge-club-81e18817e54f47758158bc184be04b8c2ea3107f.tar.gz
perlweeklychallenge-club-81e18817e54f47758158bc184be04b8c2ea3107f.tar.bz2
perlweeklychallenge-club-81e18817e54f47758158bc184be04b8c2ea3107f.zip
RogerBW solutions for challenge no. 252
-rwxr-xr-xchallenge-252/roger-bell-west/javascript/ch-1.js26
-rwxr-xr-xchallenge-252/roger-bell-west/javascript/ch-2.js58
-rw-r--r--challenge-252/roger-bell-west/kotlin/ch-1.kt26
-rw-r--r--challenge-252/roger-bell-west/kotlin/ch-2.kt31
-rwxr-xr-xchallenge-252/roger-bell-west/lua/ch-1.lua26
-rwxr-xr-xchallenge-252/roger-bell-west/lua/ch-2.lua64
-rwxr-xr-xchallenge-252/roger-bell-west/perl/ch-1.pl20
-rwxr-xr-xchallenge-252/roger-bell-west/perl/ch-2.pl20
-rw-r--r--challenge-252/roger-bell-west/postscript/ch-1.ps100
-rw-r--r--challenge-252/roger-bell-west/postscript/ch-2.ps116
-rwxr-xr-xchallenge-252/roger-bell-west/python/ch-1.py20
-rwxr-xr-xchallenge-252/roger-bell-west/python/ch-2.py23
-rwxr-xr-xchallenge-252/roger-bell-west/raku/ch-1.p618
-rwxr-xr-xchallenge-252/roger-bell-west/raku/ch-2.p618
-rwxr-xr-xchallenge-252/roger-bell-west/ruby/ch-1.rb25
-rwxr-xr-xchallenge-252/roger-bell-west/ruby/ch-2.rb28
-rwxr-xr-xchallenge-252/roger-bell-west/rust/ch-1.rs20
-rwxr-xr-xchallenge-252/roger-bell-west/rust/ch-2.rs26
-rw-r--r--challenge-252/roger-bell-west/scala/ch-1.scala27
-rw-r--r--challenge-252/roger-bell-west/scala/ch-2.scala33
-rw-r--r--challenge-252/roger-bell-west/tests.yaml34
21 files changed, 759 insertions, 0 deletions
diff --git a/challenge-252/roger-bell-west/javascript/ch-1.js b/challenge-252/roger-bell-west/javascript/ch-1.js
new file mode 100755
index 0000000000..079ec31913
--- /dev/null
+++ b/challenge-252/roger-bell-west/javascript/ch-1.js
@@ -0,0 +1,26 @@
+#! /usr/bin/node
+
+"use strict"
+
+function specialnumbers(a) {
+ let t = 0;
+ a.forEach((n, i) => {
+ if (a.length % (i + 1) == 0) {
+ t += n * n;
+ }
+ });
+ return t;
+}
+
+if (specialnumbers([1, 2, 3, 4]) == 21) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (specialnumbers([2, 7, 1, 19, 18, 3]) == 63) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-252/roger-bell-west/javascript/ch-2.js b/challenge-252/roger-bell-west/javascript/ch-2.js
new file mode 100755
index 0000000000..d5c713cae2
--- /dev/null
+++ b/challenge-252/roger-bell-west/javascript/ch-2.js
@@ -0,0 +1,58 @@
+#! /usr/bin/node
+
+"use strict"
+
+// by Frank Tan
+// https://stackoverflow.com/questions/38400594/javascript-deep-comparison
+function deepEqual(a,b)
+{
+ if( (typeof a == 'object' && a != null) &&
+ (typeof b == 'object' && b != null) )
+ {
+ var count = [0,0];
+ for( var key in a) count[0]++;
+ for( var key in b) count[1]++;
+ if( count[0]-count[1] != 0) {return false;}
+ for( var key in a)
+ {
+ if(!(key in b) || !deepEqual(a[key],b[key])) {return false;}
+ }
+ for( var key in b)
+ {
+ if(!(key in a) || !deepEqual(b[key],a[key])) {return false;}
+ }
+ return true;
+ }
+ else
+ {
+ return a === b;
+ }
+}
+
+function uniquesumzero(n) {
+ if (n == 1) {
+ return [0];
+ }
+ let p = Array(n - 1).fill().map((element, index) => index + 1);
+ p.push(-n * (n-1) / 2);
+ return p;
+}
+
+if (deepEqual(uniquesumzero(5), [1, 2, 3, 4, -10])) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (deepEqual(uniquesumzero(3), [1, 2, -3])) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (deepEqual(uniquesumzero(1), [0])) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
diff --git a/challenge-252/roger-bell-west/kotlin/ch-1.kt b/challenge-252/roger-bell-west/kotlin/ch-1.kt
new file mode 100644
index 0000000000..7bff2fa828
--- /dev/null
+++ b/challenge-252/roger-bell-west/kotlin/ch-1.kt
@@ -0,0 +1,26 @@
+fun specialnumbers(a: List<Int>): Int {
+ var t = 0
+ a.forEachIndexed {i, n ->
+ if (a.size % (i + 1) == 0) {
+ t += n * n
+ }
+ }
+ return t
+}
+
+fun main() {
+
+ if (specialnumbers(listOf(1, 2, 3, 4)) == 21) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (specialnumbers(listOf(2, 7, 1, 19, 18, 3)) == 63) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-252/roger-bell-west/kotlin/ch-2.kt b/challenge-252/roger-bell-west/kotlin/ch-2.kt
new file mode 100644
index 0000000000..38fc67172e
--- /dev/null
+++ b/challenge-252/roger-bell-west/kotlin/ch-2.kt
@@ -0,0 +1,31 @@
+ fun uniquesumzero(n: Int): List<Int> {
+ if (n == 1) {
+ return listOf(0)
+ }
+ var p = ArrayList(generateSequence(1) { it + 1 }.take(n - 1).toList())
+ p.add(-n * (n-1) / 2)
+ return p.toList()
+ }
+
+fun main() {
+
+ if (uniquesumzero(5) == listOf(1, 2, 3, 4, -10)) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (uniquesumzero(3) == listOf(1, 2, -3)) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (uniquesumzero(1) == listOf(0)) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+}
diff --git a/challenge-252/roger-bell-west/lua/ch-1.lua b/challenge-252/roger-bell-west/lua/ch-1.lua
new file mode 100755
index 0000000000..de7ec27e60
--- /dev/null
+++ b/challenge-252/roger-bell-west/lua/ch-1.lua
@@ -0,0 +1,26 @@
+#! /usr/bin/lua
+
+function specialnumbers(a)
+ local t = 0
+ for i, n in ipairs(a) do
+ if #a % i == 0 then
+ t = t + n * n
+ end
+ end
+ return t
+end
+
+if specialnumbers({1, 2, 3, 4}) == 21 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if specialnumbers({2, 7, 1, 19, 18, 3}) == 63 then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-252/roger-bell-west/lua/ch-2.lua b/challenge-252/roger-bell-west/lua/ch-2.lua
new file mode 100755
index 0000000000..b262f82a1e
--- /dev/null
+++ b/challenge-252/roger-bell-west/lua/ch-2.lua
@@ -0,0 +1,64 @@
+#! /usr/bin/lua
+
+-- by Michael Anderson at
+-- https://stackoverflow.com/questions/8722620/comparing-two-index-tables-by-index-value-in-lua
+-- modified by Roger
+function recursive_compare(t1,t2)
+ -- Use usual comparison first.
+ if t1==t2 then return true end
+ -- We only support non-default behavior for tables
+ if (type(t1)~="table") then return false end
+ -- They better have the same metatables
+ local mt1 = getmetatable(t1)
+ local mt2 = getmetatable(t2)
+ if( not recursive_compare(mt1,mt2) ) then return false end
+ -- Build list of all keys
+ local kk = {}
+ for k1, _ in pairs(t1) do
+ kk[k1] = true
+ end
+ for k2, _ in pairs(t2) do
+ kk[k2] = true
+ end
+ -- Check each key that exists in at least one table
+ for _, k in ipairs(kk) do
+ if (not recursive_compare(t1[k], t2[k])) then
+ return false
+ end
+ end
+ return true
+end
+
+function uniquesumzero(n)
+ if n == 1 then
+ return { 0 }
+ end
+ local p = {}
+ for j = 1, n-1 do
+ table.insert(p, j)
+ end
+ table.insert(p, -n * (n-1) / 2)
+ return p
+end
+
+if recursive_compare(uniquesumzero(5), {1, 2, 3, 4, -10}) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if recursive_compare(uniquesumzero(3), {1, 2, -3}) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if recursive_compare(uniquesumzero(1), {0}) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+
diff --git a/challenge-252/roger-bell-west/perl/ch-1.pl b/challenge-252/roger-bell-west/perl/ch-1.pl
new file mode 100755
index 0000000000..add86f3523
--- /dev/null
+++ b/challenge-252/roger-bell-west/perl/ch-1.pl
@@ -0,0 +1,20 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 2;
+
+is(specialnumbers([1, 2, 3, 4]), 21, 'example 1');
+is(specialnumbers([2, 7, 1, 19, 18, 3]), 63, 'example 2');
+
+sub specialnumbers($a) {
+ my $t = 0;
+ foreach my $i (0 .. $#{$a}) {
+ if ((scalar @{$a}) % ($i + 1) == 0) {
+ $t += $a->[$i] * $a->[$i];
+ }
+ }
+ return $t;
+}
diff --git a/challenge-252/roger-bell-west/perl/ch-2.pl b/challenge-252/roger-bell-west/perl/ch-2.pl
new file mode 100755
index 0000000000..69e52e5f3a
--- /dev/null
+++ b/challenge-252/roger-bell-west/perl/ch-2.pl
@@ -0,0 +1,20 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use experimental 'signatures';
+
+use Test::More tests => 3;
+
+is_deeply(uniquesumzero(5), [1, 2, 3, 4, -10], 'example 1');
+is_deeply(uniquesumzero(3), [1, 2, -3], 'example 2');
+is_deeply(uniquesumzero(1), [0], 'example 3');
+
+sub uniquesumzero($n) {
+ if ($n == 1) {
+ return [0];
+ }
+ my @p = (1 .. $n - 1);
+ push @p, -$n * ($n - 1) / 2;
+ return \@p;
+}
diff --git a/challenge-252/roger-bell-west/postscript/ch-1.ps b/challenge-252/roger-bell-west/postscript/ch-1.ps
new file mode 100644
index 0000000000..7a105b6057
--- /dev/null
+++ b/challenge-252/roger-bell-west/postscript/ch-1.ps
@@ -0,0 +1,100 @@
+%!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
+
+/filter { % array proc(bool) -> array
+ 1 dict begin
+ /p exch def
+ [ exch
+ {
+ dup p not
+ {
+ pop
+ } if
+ } forall
+ ]
+ end
+} bind def
+
+/map { % array proc -> array
+ 2 dict begin
+ /p exch def
+ [ exch
+ {
+ p
+ } forall
+ ]
+ 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
+
+/enumerate.array {
+ 1 dict begin
+ /a exch def
+ [
+ 0 1 a length 1 sub {
+ [ exch dup a exch get ]
+ } for
+ ]
+ 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
+
+
+% end included library code
+
+/specialnumbers {
+ 0 dict begin
+ dup /l exch length def
+ enumerate.array
+ { 0 get 1 add l exch mod 0 eq } filter
+ { 1 get dup mul } map
+ { add } reduce
+ end
+} bind def
+
+(specialnumbers) test.start
+[1 2 3 4] specialnumbers 21 eq test
+[2 7 1 19 18 3] specialnumbers 63 eq test
+test.end
diff --git a/challenge-252/roger-bell-west/postscript/ch-2.ps b/challenge-252/roger-bell-west/postscript/ch-2.ps
new file mode 100644
index 0000000000..b3797f0aea
--- /dev/null
+++ b/challenge-252/roger-bell-west/postscript/ch-2.ps
@@ -0,0 +1,116 @@
+%!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
+
+/deepeq {
+ 2 dict begin
+ /a exch def
+ /b exch def
+ a type b type eq {
+ a type /dicttype eq {
+ a length b length eq {
+ <<
+ a {
+ pop
+ true
+ } forall
+ b {
+ pop
+ true
+ } forall
+ >>
+ true exch
+ {
+ pop
+ dup a exch known {
+ dup b exch known {
+ dup a exch get exch b exch get deepeq not {
+ pop false
+ } if
+ } {
+ false
+ } ifelse
+ } {
+ false
+ } ifelse
+ } forall
+ } {
+ false
+ } ifelse
+ } {
+ a type dup /arraytype eq exch /stringtype eq or {
+ a length b length eq {
+ true
+ 0 1 a length 1 sub {
+ dup a exch get exch b exch get deepeq not {
+ pop false
+ exit
+ } if
+ } for
+ } {
+ false
+ } ifelse
+ } {
+ a b eq
+ } ifelse
+ } ifelse
+ } {
+ false
+ } ifelse
+ end
+} bind def
+
+/test.start {
+ print (:) print
+ /test.pass 0 def
+ /test.count 0 def
+} bind def
+
+
+% end included library code
+
+/uniquesumzero {
+ 0 dict begin
+ /n exch def
+ n 1 eq {
+ [ 0 ]
+ } {
+ [
+ 1 1 n 1 sub {
+ } for
+ n dup 1 sub mul neg 2 idiv
+ ]
+ } ifelse
+ end
+} bind def
+
+(uniquesumzero) test.start
+5 uniquesumzero [1 2 3 4 -10] deepeq test
+3 uniquesumzero [1 2 -3] deepeq test
+1 uniquesumzero [0] deepeq test
+test.end
diff --git a/challenge-252/roger-bell-west/python/ch-1.py b/challenge-252/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..4e89dbfcc6
--- /dev/null
+++ b/challenge-252/roger-bell-west/python/ch-1.py
@@ -0,0 +1,20 @@
+#! /usr/bin/python3
+
+def specialnumbers(a):
+ t = 0
+ for i, v in enumerate(a):
+ if len(a) % (i + 1) == 0:
+ t += v * v
+ return t
+
+import unittest
+
+class TestSpecialnumbers(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(specialnumbers([1, 2, 3, 4]), 21, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(specialnumbers([2, 7, 1, 19, 18, 3]), 63, 'example 2')
+
+unittest.main()
diff --git a/challenge-252/roger-bell-west/python/ch-2.py b/challenge-252/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..f8bf61a527
--- /dev/null
+++ b/challenge-252/roger-bell-west/python/ch-2.py
@@ -0,0 +1,23 @@
+#! /usr/bin/python3
+
+def uniquesumzero(n):
+ if n == 1:
+ return [0]
+ p = list(range(1, n))
+ p.append(-n * (n - 1) / 2)
+ return p
+
+import unittest
+
+class TestUniquesumzero(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(uniquesumzero(5), [1, 2, 3, 4, -10], 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(uniquesumzero(3), [1, 2, -3], 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(uniquesumzero(1), [0], 'example 3')
+
+unittest.main()
diff --git a/challenge-252/roger-bell-west/raku/ch-1.p6 b/challenge-252/roger-bell-west/raku/ch-1.p6
new file mode 100755
index 0000000000..4290a75ffa
--- /dev/null
+++ b/challenge-252/roger-bell-west/raku/ch-1.p6
@@ -0,0 +1,18 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 2;
+
+is(specialnumbers([1, 2, 3, 4]), 21, 'example 1');
+is(specialnumbers([2, 7, 1, 19, 18, 3]), 63, 'example 2');
+
+sub specialnumbers(@a) {
+ my $t = 0;
+ for (0 .. @a.end) -> $i {
+ if (@a.elems % ($i + 1) == 0) {
+ $t += @a[$i] * @a[$i];
+ }
+ }
+ return $t;
+}
diff --git a/challenge-252/roger-bell-west/raku/ch-2.p6 b/challenge-252/roger-bell-west/raku/ch-2.p6
new file mode 100755
index 0000000000..8f3935d7e1
--- /dev/null
+++ b/challenge-252/roger-bell-west/raku/ch-2.p6
@@ -0,0 +1,18 @@
+#! /usr/bin/raku
+
+use Test;
+
+plan 3;
+
+is-deeply(uniquesumzero(5), [1, 2, 3, 4, -10], 'example 1');
+is-deeply(uniquesumzero(3), [1, 2, -3], 'example 2');
+is-deeply(uniquesumzero(1), [0], 'example 3');
+
+sub uniquesumzero($n) {
+ if ($n == 1) {
+ return [0];
+ }
+ my @p = [1 .. $n - 1];
+ @p.push(-$n * ($n - 1) div 2);
+ return @p;
+}
diff --git a/challenge-252/roger-bell-west/ruby/ch-1.rb b/challenge-252/roger-bell-west/ruby/ch-1.rb
new file mode 100755
index 0000000000..3302e4a406
--- /dev/null
+++ b/challenge-252/roger-bell-west/ruby/ch-1.rb
@@ -0,0 +1,25 @@
+#! /usr/bin/ruby
+
+def specialnumbers(a)
+ t = 0
+ a.each_with_index do |n, i|
+ if a.length % (i + 1) == 0 then
+ t += n * n
+ end
+ end
+ return t
+end
+
+require 'test/unit'
+
+class TestSpecialnumbers < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(21, specialnumbers([1, 2, 3, 4]))
+ end
+
+ def test_ex2
+ assert_equal(63, specialnumbers([2, 7, 1, 19, 18, 3]))
+ end
+
+end
diff --git a/challenge-252/roger-bell-west/ruby/ch-2.rb b/challenge-252/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..3568fe1292
--- /dev/null
+++ b/challenge-252/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,28 @@
+#! /usr/bin/ruby
+
+def uniquesumzero(n)
+ if n == 1 then
+ return [0]
+ end
+ p = Array.new(n - 1) {|i| i + 1}
+ p.push(-n * (n-1) / 2)
+ return p
+end
+
+require 'test/unit'
+
+class TestUniquesumzero < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal([1, 2, 3, 4, -10], uniquesumzero(5))
+ end
+
+ def test_ex2
+ assert_equal([1, 2, -3], uniquesumzero(3))
+ end
+
+ def test_ex3
+ assert_equal([0], uniquesumzero(1))
+ end
+
+end
diff --git a/challenge-252/roger-bell-west/rust/ch-1.rs b/challenge-252/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..76fcc063d4
--- /dev/null
+++ b/challenge-252/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,20 @@
+#! /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!(specialnumbers(vec![1, 2, 3, 4]), 21);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(specialnumbers(vec![2, 7, 1, 19, 18, 3]), 63);
+}
+
+fn specialnumbers(a: Vec<u32>) -> u32 {
+ a.iter()
+ .enumerate()
+ .filter(|(i, _n)| a.len() % (i + 1) == 0)
+ .map(|(_i, n)| n * n)
+ .sum()
+}
diff --git a/challenge-252/roger-bell-west/rust/ch-2.rs b/challenge-252/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..a23ce60251
--- /dev/null
+++ b/challenge-252/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,26 @@
+#! /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!(uniquesumzero(5), vec![1, 2, 3, 4, -10]);
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(uniquesumzero(3), vec![1, 2, -3]);
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(uniquesumzero(1), vec![0]);
+}
+
+fn uniquesumzero(n: i32) -> Vec<i32> {
+ if n == 1 {
+ return vec![0];
+ }
+ let mut p = (1..n).collect::<Vec<i32>>();
+ p.push(-n * (n - 1) / 2);
+ p
+}
diff --git a/challenge-252/roger-bell-west/scala/ch-1.scala b/challenge-252/roger-bell-west/scala/ch-1.scala
new file mode 100644
index 0000000000..01edd50657
--- /dev/null
+++ b/challenge-252/roger-bell-west/scala/ch-1.scala
@@ -0,0 +1,27 @@
+
+object Specialnumbers {
+ def specialnumbers(a: List[Int]): Int = {
+ var t = 0
+ for ((n, i) <- a.zipWithIndex) {
+ if (a.length % (i + 1) == 0) {
+ t += n * n
+ }
+ }
+ return t
+ }
+ def main(args: Array[String]) {
+ if (specialnumbers(List(1, 2, 3, 4)) == 21) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (specialnumbers(List(2, 7, 1, 19, 18, 3)) == 63) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+ }
+}
diff --git a/challenge-252/roger-bell-west/scala/ch-2.scala b/challenge-252/roger-bell-west/scala/ch-2.scala
new file mode 100644
index 0000000000..f4d30ac857
--- /dev/null
+++ b/challenge-252/roger-bell-west/scala/ch-2.scala
@@ -0,0 +1,33 @@
+import scala.collection.mutable.ListBuffer
+
+object Uniquesumzero {
+ def uniquesumzero(n: Int): List[Int] = {
+ if (n == 1) {
+ return List(0)
+ }
+ var p = List.range(1, n).to[ListBuffer]
+ p += -n * (n-1) / 2
+ return p.toList
+ }
+ def main(args: Array[String]) {
+ if (uniquesumzero(5) == List(1, 2, 3, 4, -10)) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (uniquesumzero(3) == List(1, 2, -3)) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ print(" ")
+ if (uniquesumzero(1) == List(0)) {
+ print("Pass")
+ } else {
+ print("Fail")
+ }
+ println("")
+
+ }
+}
diff --git a/challenge-252/roger-bell-west/tests.yaml b/challenge-252/roger-bell-west/tests.yaml
new file mode 100644
index 0000000000..44b469c187
--- /dev/null
+++ b/challenge-252/roger-bell-west/tests.yaml
@@ -0,0 +1,34 @@
+---
+ch-1:
+ - function: specialnumbers
+ arguments:
+ - 1
+ - 2
+ - 3
+ - 4
+ result: 21
+ - arguments:
+ - 2
+ - 7
+ - 1
+ - 19
+ - 18
+ - 3
+ result: 63
+ch-2:
+ - function: uniquesumzero
+ arguments: 5
+ result:
+ - 1
+ - 2
+ - 3
+ - 4
+ - -10
+ - arguments: 3
+ result:
+ - 1
+ - 2
+ - -3
+ - arguments: 1
+ result:
+ - 0