diff options
| author | Roger Bell_West <roger@firedrake.org> | 2025-05-06 09:57:21 +0100 |
|---|---|---|
| committer | Roger Bell_West <roger@firedrake.org> | 2025-05-06 09:57:21 +0100 |
| commit | caaca4983b4426010c4e98a840d8641b76c3e772 (patch) | |
| tree | fb56989233909a773e03234c146447b1cc768d54 | |
| parent | c2dfc21f245feea2957a4e7561bc1bb07f5a6004 (diff) | |
| download | perlweeklychallenge-club-caaca4983b4426010c4e98a840d8641b76c3e772.tar.gz perlweeklychallenge-club-caaca4983b4426010c4e98a840d8641b76c3e772.tar.bz2 perlweeklychallenge-club-caaca4983b4426010c4e98a840d8641b76c3e772.zip | |
RogerBW solutions for challenge no. 320
25 files changed, 861 insertions, 0 deletions
diff --git a/challenge-320/roger-bell-west/crystal/ch-1.cr b/challenge-320/roger-bell-west/crystal/ch-1.cr new file mode 100755 index 0000000000..1a9e9767a1 --- /dev/null +++ b/challenge-320/roger-bell-west/crystal/ch-1.cr @@ -0,0 +1,27 @@ +#! /usr/bin/crystal + +def maximumcount(a) + pos = 0 + neg = 0 + a.each do |n| + if n > 0 + pos += 1 + elsif n < 0 + neg += 1 + end + end + [pos, neg].max +end + +require "spec" +describe "maximumcount" do + it "test_ex1" do + maximumcount([-3, -2, -1, 1, 2, 3]).should eq 3 + end + it "test_ex2" do + maximumcount([-2, -1, 0, 0, 1]).should eq 2 + end + it "test_ex3" do + maximumcount([1, 2, 3, 4]).should eq 4 + end +end diff --git a/challenge-320/roger-bell-west/crystal/ch-2.cr b/challenge-320/roger-bell-west/crystal/ch-2.cr new file mode 100755 index 0000000000..992d1ab2cb --- /dev/null +++ b/challenge-320/roger-bell-west/crystal/ch-2.cr @@ -0,0 +1,30 @@ +#! /usr/bin/crystal + +def sumdifference(a) + delta = 0 + a.each do |x| + if x >= 10 + digitsum = 0 + xa = x + while xa > 0 + xa, y = xa.divmod(10) + digitsum += y + end + delta += x - digitsum + end + end + delta +end + +require "spec" +describe "sumdifference" do + it "test_ex1" do + sumdifference([1, 23, 4, 5]).should eq 18 + end + it "test_ex2" do + sumdifference([1, 2, 3, 4, 5]).should eq 0 + end + it "test_ex3" do + sumdifference([1, 2, 34]).should eq 27 + end +end diff --git a/challenge-320/roger-bell-west/javascript/ch-1.js b/challenge-320/roger-bell-west/javascript/ch-1.js new file mode 100755 index 0000000000..81fe7262df --- /dev/null +++ b/challenge-320/roger-bell-west/javascript/ch-1.js @@ -0,0 +1,35 @@ +#! /usr/bin/node + +"use strict" + +function maximumcount(a) { + let pos = 0; + let neg = 0; + for (let n of a) { + if (n > 0) { + pos++; + } else if (n < 0) { + neg++; + } + } + return Math.max(pos, neg); +} + +if (maximumcount([-3, -2, -1, 1, 2, 3]) == 3) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (maximumcount([-2, -1, 0, 0, 1]) == 2) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (maximumcount([1, 2, 3, 4]) == 4) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-320/roger-bell-west/javascript/ch-2.js b/challenge-320/roger-bell-west/javascript/ch-2.js new file mode 100755 index 0000000000..c362fac6e0 --- /dev/null +++ b/challenge-320/roger-bell-west/javascript/ch-2.js @@ -0,0 +1,38 @@ +#! /usr/bin/node + +"use strict" + +function sumdifference(a) { + let delta = 0; + for (let x of a) { + if (x >= 10) { + let digitsum = 0; + let xa = x; + while (xa > 0) { + digitsum += xa % 10; + xa = Math.floor(xa / 10); + } + delta += x - digitsum; + } + } + return delta; +} + +if (sumdifference([1, 23, 4, 5]) == 18) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (sumdifference([1, 2, 3, 4, 5]) == 0) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (sumdifference([1, 2, 34]) == 27) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-320/roger-bell-west/kotlin/ch-1.kt b/challenge-320/roger-bell-west/kotlin/ch-1.kt new file mode 100644 index 0000000000..ea9f14b7c3 --- /dev/null +++ b/challenge-320/roger-bell-west/kotlin/ch-1.kt @@ -0,0 +1,35 @@ +fun maximumcount(a: List<Int>): Int { + var pos = 0 + var neg = 0 + for (n in a) { + if (n > 0) { + pos++ + } else if (n < 0) { + neg++ + } + } + return listOf(pos, neg).maxOrNull()!! +} + +fun main() { + + if (maximumcount(listOf(-3, -2, -1, 1, 2, 3)) == 3) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (maximumcount(listOf(-2, -1, 0, 0, 1)) == 2) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (maximumcount(listOf(1, 2, 3, 4)) == 4) { + print("Pass") + } else { + print("Fail") + } + println("") + +} diff --git a/challenge-320/roger-bell-west/kotlin/ch-2.kt b/challenge-320/roger-bell-west/kotlin/ch-2.kt new file mode 100644 index 0000000000..7b47053d83 --- /dev/null +++ b/challenge-320/roger-bell-west/kotlin/ch-2.kt @@ -0,0 +1,38 @@ +fun sumdifference(a: List<Int>): Int { + var delta = 0 + for (x in a) { + if (x >= 10) { + var digitsum = 0 + var xa = x + while (xa > 0) { + digitsum += xa % 10 + xa = xa / 10 + } + delta += x - digitsum + } + } + return delta +} + +fun main() { + + if (sumdifference(listOf(1, 23, 4, 5)) == 18) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (sumdifference(listOf(1, 2, 3, 4, 5)) == 0) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (sumdifference(listOf(1, 2, 34)) == 27) { + print("Pass") + } else { + print("Fail") + } + println("") + +} diff --git a/challenge-320/roger-bell-west/lua/ch-1.lua b/challenge-320/roger-bell-west/lua/ch-1.lua new file mode 100755 index 0000000000..6d27ada1b6 --- /dev/null +++ b/challenge-320/roger-bell-west/lua/ch-1.lua @@ -0,0 +1,36 @@ +#! /usr/bin/lua + +function maximumcount(a) + local pos = 0 + local neg = 0 + for _, n in ipairs(a) do + if n > 0 then + pos = pos + 1 + elseif n < 0 then + neg = neg + 1 + end + end + return math.max(pos, neg) +end + +if maximumcount({-3, -2, -1, 1, 2, 3}) == 3 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if maximumcount({-2, -1, 0, 0, 1}) == 2 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if maximumcount({1, 2, 3, 4}) == 4 then + io.write("Pass") +else + io.write("FAIL") +end +print("") + diff --git a/challenge-320/roger-bell-west/lua/ch-2.lua b/challenge-320/roger-bell-west/lua/ch-2.lua new file mode 100755 index 0000000000..10b1d67c77 --- /dev/null +++ b/challenge-320/roger-bell-west/lua/ch-2.lua @@ -0,0 +1,39 @@ +#! /usr/bin/lua + +function sumdifference(a) + local delta = 0 + for _, x in ipairs(a) do + if x >= 10 then + local digitsum = 0 + local xa = x + while xa > 0 do + digitsum = digitsum + xa % 10 + xa = xa // 10 + end + delta = delta + x - digitsum + end + end + return delta +end + +if sumdifference({1, 23, 4, 5}) == 18 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if sumdifference({1, 2, 3, 4, 5}) == 0 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if sumdifference({1, 2, 34}) == 27 then + io.write("Pass") +else + io.write("FAIL") +end +print("") + diff --git a/challenge-320/roger-bell-west/perl/ch-1.pl b/challenge-320/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..ec2a38aa14 --- /dev/null +++ b/challenge-320/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 => 3; + +is(maximumcount([-3, -2, -1, 1, 2, 3]), 3, 'example 1'); +is(maximumcount([-2, -1, 0, 0, 1]), 2, 'example 2'); +is(maximumcount([1, 2, 3, 4]), 4, 'example 3'); + +use List::Util qw(max); + +sub maximumcount($a) { + my $pos = 0; + my $neg = 0; + foreach my $n (@{$a}) { + if ($n > 0) { + $pos++; + } elsif ($n < 0) { + $neg++; + } + } + max($pos, $neg); +} diff --git a/challenge-320/roger-bell-west/perl/ch-2.pl b/challenge-320/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..df3f7348a3 --- /dev/null +++ b/challenge-320/roger-bell-west/perl/ch-2.pl @@ -0,0 +1,27 @@ +#! /usr/bin/perl + +use strict; +use warnings; +use experimental 'signatures'; + +use Test::More tests => 3; + +is(sumdifference([1, 23, 4, 5]), 18, 'example 1'); +is(sumdifference([1, 2, 3, 4, 5]), 0, 'example 2'); +is(sumdifference([1, 2, 34]), 27, 'example 3'); + +sub sumdifference($a) { + my $delta = 0; + foreach my $x (@{$a}) { + if ($x >= 10) { + my $digitsum = 0; + my $xa = $x; + while ($xa > 0) { + $digitsum += $xa % 10; + $xa = int($xa / 10); + } + $delta += $x - $digitsum; + } + } + $delta; +} diff --git a/challenge-320/roger-bell-west/postscript/ch-1.ps b/challenge-320/roger-bell-west/postscript/ch-1.ps new file mode 100644 index 0000000000..e10a84a6e3 --- /dev/null +++ b/challenge-320/roger-bell-west/postscript/ch-1.ps @@ -0,0 +1,61 @@ +%!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.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 + + +% end included library code + +/maximumcount { + 0 dict begin + /pos 0 def + /ng 0 def + { + /n exch def + n 0 gt { + /pos pos 1 add def + } { + n 0 lt { + /ng ng 1 add def + } if + } ifelse + } forall + pos ng max + end +} bind def + +(maximumcount) test.start +[-3 -2 -1 1 2 3] maximumcount 3 eq test +[-2 -1 0 0 1] maximumcount 2 eq test +[1 2 3 4] maximumcount 4 eq test +test.end diff --git a/challenge-320/roger-bell-west/postscript/ch-2.ps b/challenge-320/roger-bell-west/postscript/ch-2.ps new file mode 100644 index 0000000000..9b63dabff1 --- /dev/null +++ b/challenge-320/roger-bell-west/postscript/ch-2.ps @@ -0,0 +1,64 @@ +%!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 + +/sumdifference { + 0 dict begin + 0 exch + { + /x exch def + x 10 ge { + /digitsum 0 def + /xa x def + { + xa 0 eq { + exit + } if + /digitsum digitsum xa 10 mod add def + /xa xa 10 idiv def + } loop + x add digitsum sub + } if + } forall + end +} bind def + +(sumdifference) test.start +[1 23 4 5] sumdifference 18 eq test +[1 2 3 4 5] sumdifference 0 eq test +[1 2 34] sumdifference 27 eq test +test.end diff --git a/challenge-320/roger-bell-west/python/ch-1.py b/challenge-320/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..1266001c43 --- /dev/null +++ b/challenge-320/roger-bell-west/python/ch-1.py @@ -0,0 +1,26 @@ +#! /usr/bin/python3 + +def maximumcount(a): + pos = 0 + neg = 0 + for n in a: + if n > 0: + pos += 1 + elif n < 0: + neg += 1 + return max(pos, neg) + +import unittest + +class TestMaximumcount(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(maximumcount([-3, -2, -1, 1, 2, 3]), 3, 'example 1') + + def test_ex2(self): + self.assertEqual(maximumcount([-2, -1, 0, 0, 1]), 2, 'example 2') + + def test_ex3(self): + self.assertEqual(maximumcount([1, 2, 3, 4]), 4, 'example 3') + +unittest.main() diff --git a/challenge-320/roger-bell-west/python/ch-2.py b/challenge-320/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..8d031fd6f7 --- /dev/null +++ b/challenge-320/roger-bell-west/python/ch-2.py @@ -0,0 +1,28 @@ +#! /usr/bin/python3 + +def sumdifference(a): + delta = 0 + for x in a: + if x >= 10: + digitsum = 0 + xa = x + while xa > 0: + digitsum += xa % 10 + xa = int(xa / 10) + delta += x - digitsum + return delta + +import unittest + +class TestSumdifference(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(sumdifference([1, 23, 4, 5]), 18, 'example 1') + + def test_ex2(self): + self.assertEqual(sumdifference([1, 2, 3, 4, 5]), 0, 'example 2') + + def test_ex3(self): + self.assertEqual(sumdifference([1, 2, 34]), 27, 'example 3') + +unittest.main() diff --git a/challenge-320/roger-bell-west/raku/ch-1.p6 b/challenge-320/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..ff691f34e3 --- /dev/null +++ b/challenge-320/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,22 @@ +#! /usr/bin/raku + +use Test; + +plan 3; + +is(maximumcount([-3, -2, -1, 1, 2, 3]), 3, 'example 1'); +is(maximumcount([-2, -1, 0, 0, 1]), 2, 'example 2'); +is(maximumcount([1, 2, 3, 4]), 4, 'example 3'); + +sub maximumcount(@a) { + my $pos = 0; + my $neg = 0; + for @a -> $n { + if ($n > 0) { + $pos++; + } elsif ($n < 0) { + $neg++; + } + } + max($pos, $neg); +} diff --git a/challenge-320/roger-bell-west/raku/ch-2.p6 b/challenge-320/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..bad78fce1f --- /dev/null +++ b/challenge-320/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,25 @@ +#! /usr/bin/raku + +use Test; + +plan 3; + +is(sumdifference([1, 23, 4, 5]), 18, 'example 1'); +is(sumdifference([1, 2, 3, 4, 5]), 0, 'example 2'); +is(sumdifference([1, 2, 34]), 27, 'example 3'); + +sub sumdifference(@a) { + my $delta = 0; + for @a -> $x { + if ($x >= 10) { + my $digitsum = 0; + my $xa = $x; + while ($xa > 0) { + $digitsum += $xa % 10; + $xa = floor($xa / 10); + } + $delta += $x - $digitsum; + } + } + $delta; +} diff --git a/challenge-320/roger-bell-west/ruby/ch-1.rb b/challenge-320/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..07172f8d7a --- /dev/null +++ b/challenge-320/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,32 @@ +#! /usr/bin/ruby + +def maximumcount(a) + pos = 0 + neg = 0 + a.each do |n| + if n > 0 + pos += 1 + elsif n < 0 + neg += 1 + end + end + [pos, neg].max +end + +require 'test/unit' + +class TestMaximumcount < Test::Unit::TestCase + + def test_ex1 + assert_equal(3, maximumcount([-3, -2, -1, 1, 2, 3])) + end + + def test_ex2 + assert_equal(2, maximumcount([-2, -1, 0, 0, 1])) + end + + def test_ex3 + assert_equal(4, maximumcount([1, 2, 3, 4])) + end + +end diff --git a/challenge-320/roger-bell-west/ruby/ch-2.rb b/challenge-320/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..0d1bf88aaf --- /dev/null +++ b/challenge-320/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,35 @@ +#! /usr/bin/ruby + +def sumdifference(a) + delta = 0 + a.each do |x| + if x >= 10 + digitsum = 0 + xa = x + while xa > 0 + (xa, y) = xa.divmod(10) + digitsum += y + end + delta += x - digitsum + end + end + delta +end + +require 'test/unit' + +class TestSumdifference < Test::Unit::TestCase + + def test_ex1 + assert_equal(18, sumdifference([1, 23, 4, 5])) + end + + def test_ex2 + assert_equal(0, sumdifference([1, 2, 3, 4, 5])) + end + + def test_ex3 + assert_equal(27, sumdifference([1, 2, 34])) + end + +end diff --git a/challenge-320/roger-bell-west/rust/ch-1.rs b/challenge-320/roger-bell-west/rust/ch-1.rs new file mode 100755 index 0000000000..5d8eb95f1f --- /dev/null +++ b/challenge-320/roger-bell-west/rust/ch-1.rs @@ -0,0 +1,30 @@ +#! /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!(maximumcount(vec![-3, -2, -1, 1, 2, 3]), 3); +} + +#[test] +fn test_ex2() { + assert_eq!(maximumcount(vec![-2, -1, 0, 0, 1]), 2); +} + +#[test] +fn test_ex3() { + assert_eq!(maximumcount(vec![1, 2, 3, 4]), 4); +} + +fn maximumcount(a: Vec<i32>) -> usize { + let mut pos = 0; + let mut neg = 0; + for n in a { + if n > 0 { + pos += 1; + } else if n < 0 { + neg += 1; + } + } + std::cmp::max(pos, neg) +} diff --git a/challenge-320/roger-bell-west/rust/ch-2.rs b/challenge-320/roger-bell-west/rust/ch-2.rs new file mode 100755 index 0000000000..3f7746556c --- /dev/null +++ b/challenge-320/roger-bell-west/rust/ch-2.rs @@ -0,0 +1,33 @@ +#! /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!(sumdifference(vec![1, 23, 4, 5]), 18); +} + +#[test] +fn test_ex2() { + assert_eq!(sumdifference(vec![1, 2, 3, 4, 5]), 0); +} + +#[test] +fn test_ex3() { + assert_eq!(sumdifference(vec![1, 2, 34]), 27); +} + +fn sumdifference(a: Vec<u32>) -> u32 { + let mut delta = 0; + for x in a { + if x >= 10 { + let mut digitsum = 0; + let mut xa = x; + while xa > 0 { + digitsum += xa % 10; + xa /= 10; + } + delta += x - digitsum; + } + } + delta +} diff --git a/challenge-320/roger-bell-west/scala/ch-1.scala b/challenge-320/roger-bell-west/scala/ch-1.scala new file mode 100644 index 0000000000..c70ed047e2 --- /dev/null +++ b/challenge-320/roger-bell-west/scala/ch-1.scala @@ -0,0 +1,38 @@ + +object Maximumcount { + + def maximumcount(a: List[Int]): Int = { + var pos = 0 + var neg = 0 + for (n <- a) { + if (n > 0) { + pos += 1 + } else if (n < 0) { + neg += 1 + } + } + List(pos, neg).max + } + + def main(args: Array[String]) { + if (maximumcount(List(-3, -2, -1, 1, 2, 3)) == 3) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (maximumcount(List(-2, -1, 0, 0, 1)) == 2) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (maximumcount(List(1, 2, 3, 4)) == 4) { + print("Pass") + } else { + print("Fail") + } + println("") + + } +} diff --git a/challenge-320/roger-bell-west/scala/ch-2.scala b/challenge-320/roger-bell-west/scala/ch-2.scala new file mode 100644 index 0000000000..95e0610c3d --- /dev/null +++ b/challenge-320/roger-bell-west/scala/ch-2.scala @@ -0,0 +1,41 @@ + +object Sumdifference { + + def sumdifference(a: List[Int]): Int = { + var delta = 0 + for (x <- a) { + if (x >= 10) { + var digitsum = 0 + var xa = x + while (xa > 0) { + digitsum += xa % 10 + xa = xa / 10 + } + delta += x - digitsum + } + } + return delta + } + + def main(args: Array[String]) { + if (sumdifference(List(1, 23, 4, 5)) == 18) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (sumdifference(List(1, 2, 3, 4, 5)) == 0) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (sumdifference(List(1, 2, 34)) == 27) { + print("Pass") + } else { + print("Fail") + } + println("") + + } +} diff --git a/challenge-320/roger-bell-west/tests.json b/challenge-320/roger-bell-west/tests.json new file mode 100644 index 0000000000..dd19d552b9 --- /dev/null +++ b/challenge-320/roger-bell-west/tests.json @@ -0,0 +1,32 @@ +{ + "ch-1" : [ + { + "function" : "maximumcount", + "arguments" : [-3, -2, -1, 1, 2, 3], + "result" : 3 + }, + { + "arguments" : [-2, -1, 0, 0, 1], + "result" : 2 + }, + { + "arguments" : [1, 2, 3, 4], + "result" : 4 + } + ], + "ch-2" : [ + { + "function" : "sumdifference", + "arguments" : [ 1, 23, 4, 5 ], + "result" : 18 + }, + { + "arguments" : [ 1, 2, 3, 4, 5 ], + "result" : 0 + }, + { + "arguments" : [ 1, 2, 34 ], + "result" : 27 + } + ] +} diff --git a/challenge-320/roger-bell-west/typst/ch-1.typ b/challenge-320/roger-bell-west/typst/ch-1.typ new file mode 100644 index 0000000000..545077f5da --- /dev/null +++ b/challenge-320/roger-bell-west/typst/ch-1.typ @@ -0,0 +1,30 @@ +#let maximumcount(a) = { + let pos = 0 + let neg = 0 + for n in a { + if n > 0 { + pos += 1 + } else if n < 0 { + neg += 1 + } + } + calc.max(pos, neg) +} + +#let testresult(pass) = { + if pass { + text(fill: green, "Pass") + } else { + text(fill: red, "Fail") + } +} + +Test 1: + #testresult(maximumcount((-3, -2, -1, 1, 2, 3)) == 3) + +Test 2: + #testresult(maximumcount((-2, -1, 0, 0, 1)) == 2) + +Test 3: + #testresult(maximumcount((1, 2, 3, 4)) == 4) + diff --git a/challenge-320/roger-bell-west/typst/ch-2.typ b/challenge-320/roger-bell-west/typst/ch-2.typ new file mode 100644 index 0000000000..59db0198f0 --- /dev/null +++ b/challenge-320/roger-bell-west/typst/ch-2.typ @@ -0,0 +1,33 @@ +#let sumdifference(a) = { + let delta = 0 + for x in a { + if x >= 10 { + let digitsum = 0 + let xa = x + while xa > 0 { + digitsum += calc.rem-euclid(xa, 10) + xa = calc.div-euclid(xa, 10) + } + delta += x - digitsum + } + } + delta +} + +#let testresult(pass) = { + if pass { + text(fill: green, "Pass") + } else { + text(fill: red, "Fail") + } +} + +Test 1: + #testresult(sumdifference((1, 23, 4, 5)) == 18) + +Test 2: + #testresult(sumdifference((1, 2, 3, 4, 5)) == 0) + +Test 3: + #testresult(sumdifference((1, 2, 34)) == 27) + |
