diff options
| author | Roger Bell_West <roger@firedrake.org> | 2024-03-19 14:10:22 +0000 |
|---|---|---|
| committer | Roger Bell_West <roger@firedrake.org> | 2024-03-19 14:10:22 +0000 |
| commit | 663fd070fd184f18c959237e2fb40da3553ef307 (patch) | |
| tree | fa7310b545e93b857a2a99e526003775f4d1b249 | |
| parent | b91a4623cd4c2b51f779f59b53310a0bd745f03f (diff) | |
| download | perlweeklychallenge-club-663fd070fd184f18c959237e2fb40da3553ef307.tar.gz perlweeklychallenge-club-663fd070fd184f18c959237e2fb40da3553ef307.tar.bz2 perlweeklychallenge-club-663fd070fd184f18c959237e2fb40da3553ef307.zip | |
RogerBW solutions for challenge no. 261
21 files changed, 754 insertions, 0 deletions
diff --git a/challenge-261/roger-bell-west/javascript/ch-1.js b/challenge-261/roger-bell-west/javascript/ch-1.js new file mode 100755 index 0000000000..59a8a4e4a6 --- /dev/null +++ b/challenge-261/roger-bell-west/javascript/ch-1.js @@ -0,0 +1,42 @@ +#! /usr/bin/node + +"use strict" + +function elementdigitsum(a) { + let delta = 0; + for (let n0 of a) { + let n = Math.floor(n0 / 10); + let m = 10; + while (n > 0) { + delta += (n % 10) * (m - 1); + n = Math.floor(n / 10); + m *= 10; + } + } + return delta; +} + +if (elementdigitsum([1, 2, 3, 45]) == 36) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (elementdigitsum([1, 12, 3]) == 9) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (elementdigitsum([1, 2, 3, 4]) == 0) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (elementdigitsum([236, 416, 336, 350]) == 1296) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-261/roger-bell-west/javascript/ch-2.js b/challenge-261/roger-bell-west/javascript/ch-2.js new file mode 100755 index 0000000000..e86a5024f0 --- /dev/null +++ b/challenge-261/roger-bell-west/javascript/ch-2.js @@ -0,0 +1,31 @@ +#! /usr/bin/node + +"use strict" + +function multiplybytwo(a, start) { + const p = new Set(a); + let v = start; + while (p.has(v)) { + v *= 2; + } + return v; +} + +if (multiplybytwo([5, 3, 6, 1, 12], 3) == 24) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (multiplybytwo([1, 2, 4, 3], 1) == 8) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (multiplybytwo([5, 6, 7], 2) == 2) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-261/roger-bell-west/kotlin/ch-1.kt b/challenge-261/roger-bell-west/kotlin/ch-1.kt new file mode 100644 index 0000000000..de87955b33 --- /dev/null +++ b/challenge-261/roger-bell-west/kotlin/ch-1.kt @@ -0,0 +1,42 @@ +fun elementdigitsum(a: List<Int>): Int { + var delta = 0 + for (n0 in a) { + var n = n0 / 10 + var m = 10 + while (n > 0) { + delta += (n % 10) * (m - 1) + n /= 10 + m *= 10 + } + } + return delta +} + +fun main() { + + if (elementdigitsum(listOf(1, 2, 3, 45)) == 36) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (elementdigitsum(listOf(1, 12, 3)) == 9) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (elementdigitsum(listOf(1, 2, 3, 4)) == 0) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (elementdigitsum(listOf(236, 416, 336, 350)) == 1296) { + print("Pass") + } else { + print("Fail") + } + println("") + +} diff --git a/challenge-261/roger-bell-west/kotlin/ch-2.kt b/challenge-261/roger-bell-west/kotlin/ch-2.kt new file mode 100644 index 0000000000..e53ba7ac07 --- /dev/null +++ b/challenge-261/roger-bell-west/kotlin/ch-2.kt @@ -0,0 +1,32 @@ + +fun multiplybytwo(a: List<Int>, start: Int): Int { + val p = a.toSet() + var v = start + while (p.contains(v)) { + v *= 2 + } + return v +} + +fun main() { + + if (multiplybytwo(listOf(5, 3, 6, 1, 12), 3) == 24) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (multiplybytwo(listOf(1, 2, 4, 3), 1) == 8) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (multiplybytwo(listOf(5, 6, 7), 2) == 2) { + print("Pass") + } else { + print("Fail") + } + println("") + +} diff --git a/challenge-261/roger-bell-west/lua/ch-1.lua b/challenge-261/roger-bell-west/lua/ch-1.lua new file mode 100755 index 0000000000..a5f862e831 --- /dev/null +++ b/challenge-261/roger-bell-west/lua/ch-1.lua @@ -0,0 +1,44 @@ +#! /usr/bin/lua + +function elementdigitsum(a) + local delta = 0 + for _, n0 in ipairs(a) do + local n = n0 // 10 + local m = 10 + while n > 0 do + delta = delta + (n % 10) * (m - 1) + n = n // 10 + m = m * 10 + end + end + return delta +end + +if elementdigitsum({1, 2, 3, 45}) == 36 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if elementdigitsum({1, 12, 3}) == 9 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if elementdigitsum({1, 2, 3, 4}) == 0 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if elementdigitsum({236, 416, 336, 350}) == 1296 then + io.write("Pass") +else + io.write("FAIL") +end +print("") + diff --git a/challenge-261/roger-bell-west/lua/ch-2.lua b/challenge-261/roger-bell-west/lua/ch-2.lua new file mode 100755 index 0000000000..a9a4a6092a --- /dev/null +++ b/challenge-261/roger-bell-west/lua/ch-2.lua @@ -0,0 +1,35 @@ +#! /usr/bin/lua + +function multiplybytwo(a, start) + local p = {} + for _, v in ipairs(a) do + p[v] = true + end + local v = start + while p[v] ~= nil do + v = v * 2 + end + return v +end + +if multiplybytwo({5, 3, 6, 1, 12}, 3) == 24 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if multiplybytwo({1, 2, 4, 3}, 1) == 8 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if multiplybytwo({5, 6, 7}, 2) == 2 then + io.write("Pass") +else + io.write("FAIL") +end +print("") + diff --git a/challenge-261/roger-bell-west/perl/ch-1.pl b/challenge-261/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..0d79e8c19c --- /dev/null +++ b/challenge-261/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 => 4; + +is(elementdigitsum([1, 2, 3, 45]), 36, 'example 1'); +is(elementdigitsum([1, 12, 3]), 9, 'example 2'); +is(elementdigitsum([1, 2, 3, 4]), 0, 'example 3'); +is(elementdigitsum([236, 416, 336, 350]), 1296, 'example 4'); + +sub elementdigitsum($a) { + my $delta = 0; + foreach my $n0 (@{$a}) { + my $n= int($n0 / 10); + my $m = 10; + while ($n > 0) { + $delta += ($n % 10) * ($m - 1); + $n = int($n / 10); + $m *= 10; + } + } + return $delta; +} diff --git a/challenge-261/roger-bell-west/perl/ch-2.pl b/challenge-261/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..292dff0ddd --- /dev/null +++ b/challenge-261/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(multiplybytwo([5, 3, 6, 1, 12], 3), 24, 'example 1'); +is(multiplybytwo([1, 2, 4, 3], 1), 8, 'example 2'); +is(multiplybytwo([5, 6, 7], 2), 2, 'example 3'); + +sub multiplybytwo($a, $start) { + my %p = map {$_ => 1} @{$a}; + my $v = $start; + while (exists $p{$v}) { + $v *= 2; + } + return $v; +} diff --git a/challenge-261/roger-bell-west/postscript/ch-1.ps b/challenge-261/roger-bell-west/postscript/ch-1.ps new file mode 100644 index 0000000000..6dde0d5f96 --- /dev/null +++ b/challenge-261/roger-bell-west/postscript/ch-1.ps @@ -0,0 +1,63 @@ +%!PS + +% begin included library code +% see https://codeberg.org/Firedrake/postscript-libraries/ +/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 + + +% end included library code + +/elementdigitsum { + 0 dict begin + 0 exch + { + /n exch 10 idiv def + /m 10 def + { + n 0 le { + exit + } if + /digit n 10 mod def + /n n 10 idiv def + digit m 1 sub mul add + /m m 10 mul def + } loop + } forall + end +} bind def + +(elementdigitsum) test.start +[1 2 3 45] elementdigitsum 36 eq test +[1 12 3] elementdigitsum 9 eq test +[1 2 3 4] elementdigitsum 0 eq test +[236 416 336 350] elementdigitsum 1296 eq test +test.end diff --git a/challenge-261/roger-bell-west/postscript/ch-2.ps b/challenge-261/roger-bell-west/postscript/ch-2.ps new file mode 100644 index 0000000000..cce8a4537b --- /dev/null +++ b/challenge-261/roger-bell-west/postscript/ch-2.ps @@ -0,0 +1,65 @@ +%!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 + +/toset { % array -> dict of (value, true) + << exch + { + true + } 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 + +/multiplybytwo { + 0 dict begin + exch + /p exch toset def + { + dup p exch known { + 2 mul + } { + exit + } ifelse + } loop + end +} bind def + +(multiplybytwo) test.start +[5 3 6 1 12] 3 multiplybytwo 24 eq test +[1 2 4 3] 1 multiplybytwo 8 eq test +[5 6 7] 2 multiplybytwo 2 eq test +test.end diff --git a/challenge-261/roger-bell-west/python/ch-1.py b/challenge-261/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..a1353f2bad --- /dev/null +++ b/challenge-261/roger-bell-west/python/ch-1.py @@ -0,0 +1,30 @@ +#! /usr/bin/python3 + +def elementdigitsum(a): + delta = 0 + for n0 in a: + n = n0 // 10 + m = 10 + while n > 0: + delta += (n % 10) * (m - 1) + n //= 10 + m *= 10 + return delta + +import unittest + +class TestElementdigitsum(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(elementdigitsum([1, 2, 3, 45]), 36, 'example 1') + + def test_ex2(self): + self.assertEqual(elementdigitsum([1, 12, 3]), 9, 'example 2') + + def test_ex3(self): + self.assertEqual(elementdigitsum([1, 2, 3, 4]), 0, 'example 3') + + def test_ex4(self): + self.assertEqual(elementdigitsum([236, 416, 336, 350]), 1296, 'example 4') + +unittest.main() diff --git a/challenge-261/roger-bell-west/python/ch-2.py b/challenge-261/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..7bdbaa66ef --- /dev/null +++ b/challenge-261/roger-bell-west/python/ch-2.py @@ -0,0 +1,23 @@ +#! /usr/bin/python3 + +def multiplybytwo(a, start): + p = set(a) + v = start + while v in p: + v *= 2 + return v + +import unittest + +class TestMultiplybytwo(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(multiplybytwo([5, 3, 6, 1, 12], 3), 24, 'example 1') + + def test_ex2(self): + self.assertEqual(multiplybytwo([1, 2, 4, 3], 1), 8, 'example 2') + + def test_ex3(self): + self.assertEqual(multiplybytwo([5, 6, 7], 2), 2, 'example 3') + +unittest.main() diff --git a/challenge-261/roger-bell-west/raku/ch-1.p6 b/challenge-261/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..12ba1f04fc --- /dev/null +++ b/challenge-261/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,24 @@ +#! /usr/bin/raku + +use Test; + +plan 4; + +is(elementdigitsum([1, 2, 3, 45]), 36, 'example 1'); +is(elementdigitsum([1, 12, 3]), 9, 'example 2'); +is(elementdigitsum([1, 2, 3, 4]), 0, 'example 3'); +is(elementdigitsum([236, 416, 336, 350]), 1296, 'example 4'); + +sub elementdigitsum(@a) { + my $delta = 0; + for @a -> $n0 { + my $n = $n0 div 10; + my $m = 10; + while ($n > 0) { + $delta += ($n % 10) * ($m - 1); + $n = $n div 10; + $m *= 10; + } + } + return $delta; +} diff --git a/challenge-261/roger-bell-west/raku/ch-2.p6 b/challenge-261/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..063856d4bd --- /dev/null +++ b/challenge-261/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,18 @@ +#! /usr/bin/raku + +use Test; + +plan 3; + +is(multiplybytwo([5, 3, 6, 1, 12], 3), 24, 'example 1'); +is(multiplybytwo([1, 2, 4, 3], 1), 8, 'example 2'); +is(multiplybytwo([5, 6, 7], 2), 2, 'example 3'); + +sub multiplybytwo(@a, $start) { + my %p = Set(@a); + my $v = $start; + while (%p{$v}:exists) { + $v *= 2; + } + return $v; +} diff --git a/challenge-261/roger-bell-west/ruby/ch-1.rb b/challenge-261/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..4248d92429 --- /dev/null +++ b/challenge-261/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,37 @@ +#! /usr/bin/ruby + +def elementdigitsum(a) + delta = 0 + a.each do |n0| + n = n0.div(10) + m = 10 + while n > 0 do + n, digit = n.divmod(10) + delta += digit * (m - 1) + m *= 10 + end + end + return delta +end + +require 'test/unit' + +class TestElementdigitsum < Test::Unit::TestCase + + def test_ex1 + assert_equal(36, elementdigitsum([1, 2, 3, 45])) + end + + def test_ex2 + assert_equal(9, elementdigitsum([1, 12, 3])) + end + + def test_ex3 + assert_equal(0, elementdigitsum([1, 2, 3, 4])) + end + + def test_ex4 + assert_equal(1296, elementdigitsum([236, 416, 336, 350])) + end + +end diff --git a/challenge-261/roger-bell-west/ruby/ch-2.rb b/challenge-261/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..1fc43b3733 --- /dev/null +++ b/challenge-261/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,30 @@ +#! /usr/bin/ruby + +require 'set' + +def multiplybytwo(a, start) + p = Set.new(a) + v = start + while p.include?(v) do + v *= 2 + end + return v +end + +require 'test/unit' + +class TestMultiplybytwo < Test::Unit::TestCase + + def test_ex1 + assert_equal(24, multiplybytwo([5, 3, 6, 1, 12], 3)) + end + + def test_ex2 + assert_equal(8, multiplybytwo([1, 2, 4, 3], 1)) + end + + def test_ex3 + assert_equal(2, multiplybytwo([5, 6, 7], 2)) + end + +end diff --git a/challenge-261/roger-bell-west/rust/ch-1.rs b/challenge-261/roger-bell-west/rust/ch-1.rs new file mode 100755 index 0000000000..f24470d00e --- /dev/null +++ b/challenge-261/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!(elementdigitsum(vec![1, 2, 3, 45]), 36); +} + +#[test] +fn test_ex2() { + assert_eq!(elementdigitsum(vec![1, 12, 3]), 9); +} + +#[test] +fn test_ex3() { + assert_eq!(elementdigitsum(vec![1, 2, 3, 4]), 0); +} + +#[test] +fn test_ex4() { + assert_eq!(elementdigitsum(vec![236, 416, 336, 350]), 1296); +} + +fn elementdigitsum(a: Vec<u32>) -> u32 { + let mut delta = 0; + for n0 in a { + let mut n = n0 / 10; + let mut m = 10; + while n > 0 { + delta += (n % 10) * (m - 1); + n /= 10; + m *= 10; + } + } + delta +} diff --git a/challenge-261/roger-bell-west/rust/ch-2.rs b/challenge-261/roger-bell-west/rust/ch-2.rs new file mode 100755 index 0000000000..b20ababdf8 --- /dev/null +++ b/challenge-261/roger-bell-west/rust/ch-2.rs @@ -0,0 +1,29 @@ +#! /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!(multiplybytwo(vec![5, 3, 6, 1, 12], 3), 24); +} + +#[test] +fn test_ex2() { + assert_eq!(multiplybytwo(vec![1, 2, 4, 3], 1), 8); +} + +#[test] +fn test_ex3() { + assert_eq!(multiplybytwo(vec![5, 6, 7], 2), 2); +} + +use std::collections::HashSet; +use std::iter::FromIterator; + +fn multiplybytwo(a: Vec<u32>, start: u32) -> u32 { + let p: HashSet<u32> = HashSet::from_iter(a); + let mut v = start; + while p.contains(&v) { + v *= 2; + } + v +} diff --git a/challenge-261/roger-bell-west/scala/ch-1.scala b/challenge-261/roger-bell-west/scala/ch-1.scala new file mode 100644 index 0000000000..ea97dd0ff0 --- /dev/null +++ b/challenge-261/roger-bell-west/scala/ch-1.scala @@ -0,0 +1,43 @@ + +object Elementdigitsum { + def elementdigitsum(a: List[Int]): Int = { + var delta = 0 + for (n0 <- a) { + var n = n0 / 10 + var m = 10 + while (n > 0) { + delta += (n % 10) * (m - 1) + n /= 10 + m *= 10 + } + } + delta + } + def main(args: Array[String]) { + if (elementdigitsum(List(1, 2, 3, 45)) == 36) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (elementdigitsum(List(1, 12, 3)) == 9) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (elementdigitsum(List(1, 2, 3, 4)) == 0) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (elementdigitsum(List(236, 416, 336, 350)) == 1296) { + print("Pass") + } else { + print("Fail") + } + println("") + + } +} diff --git a/challenge-261/roger-bell-west/scala/ch-2.scala b/challenge-261/roger-bell-west/scala/ch-2.scala new file mode 100644 index 0000000000..c486f6233c --- /dev/null +++ b/challenge-261/roger-bell-west/scala/ch-2.scala @@ -0,0 +1,32 @@ + +object Multiplybytwo { + def multiplybytwo(a: List[Int], start: Int): Int = { + val p = a.toSet + var v = start + while (p.contains(v)) { + v *= 2 + } + v + } + def main(args: Array[String]) { + if (multiplybytwo(List(5, 3, 6, 1, 12), 3) == 24) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (multiplybytwo(List(1, 2, 4, 3), 1) == 8) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (multiplybytwo(List(5, 6, 7), 2) == 2) { + print("Pass") + } else { + print("Fail") + } + println("") + + } +} diff --git a/challenge-261/roger-bell-west/tests.yaml b/challenge-261/roger-bell-west/tests.yaml new file mode 100644 index 0000000000..be63f8b908 --- /dev/null +++ b/challenge-261/roger-bell-west/tests.yaml @@ -0,0 +1,52 @@ +--- +ch-1: + - function: elementdigitsum + arguments: + - 1 + - 2 + - 3 + - 45 + result: 36 + - arguments: + - 1 + - 12 + - 3 + result: 9 + - arguments: + - 1 + - 2 + - 3 + - 4 + result: 0 + - arguments: + - 236 + - 416 + - 336 + - 350 + result: 1296 +ch-2: + - function: multiplybytwo + multiarg: true + arguments: + - - 5 + - 3 + - 6 + - 1 + - 12 + - 3 + result: 24 + - multiarg: true + arguments: + - - 1 + - 2 + - 4 + - 3 + - 1 + result: 8 + - multiarg: true + arguments: + - - 5 + - 6 + - 7 + - 2 + result: 2 |
