diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2025-05-27 11:34:18 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-27 11:34:18 +0100 |
| commit | e27e602ad21dc021475821391b63f6611f970605 (patch) | |
| tree | d86c7c2c487a3588dcaf706b5054e2342ebb5aaf | |
| parent | 60ee688460273895dc1ceeb61a070ecec0f381be (diff) | |
| parent | f6cde2100949b1d1ca3d907f9238d257c6ec93c5 (diff) | |
| download | perlweeklychallenge-club-e27e602ad21dc021475821391b63f6611f970605.tar.gz perlweeklychallenge-club-e27e602ad21dc021475821391b63f6611f970605.tar.bz2 perlweeklychallenge-club-e27e602ad21dc021475821391b63f6611f970605.zip | |
Merge pull request #12096 from Firedrake/rogerbw-challenge-323
RogerBW solutions for challenge no. 323
25 files changed, 826 insertions, 0 deletions
diff --git a/challenge-323/roger-bell-west/crystal/ch-1.cr b/challenge-323/roger-bell-west/crystal/ch-1.cr new file mode 100755 index 0000000000..6349a16df7 --- /dev/null +++ b/challenge-323/roger-bell-west/crystal/ch-1.cr @@ -0,0 +1,26 @@ +#! /usr/bin/crystal + +def incrementdecrement(operations) + p = 0 + operations.each do |s| + if s.chars()[1] == '+' + p += 1 + else + p -= 1 + end + end + p +end + +require "spec" +describe "incrementdecrement" do + it "test_ex1" do + incrementdecrement(["--x", "x++", "x++"]).should eq 1 + end + it "test_ex2" do + incrementdecrement(["x++", "++x", "x++"]).should eq 3 + end + it "test_ex3" do + incrementdecrement(["x++", "++x", "--x", "x--"]).should eq 0 + end +end diff --git a/challenge-323/roger-bell-west/crystal/ch-2.cr b/challenge-323/roger-bell-west/crystal/ch-2.cr new file mode 100755 index 0000000000..ea73f6c2b3 --- /dev/null +++ b/challenge-323/roger-bell-west/crystal/ch-2.cr @@ -0,0 +1,28 @@ +#! /usr/bin/crystal + +def taxamount(income, brackets) + tax = 0 + lastbracket = 0 + brackets.each do |bracket| + if income > lastbracket + tax += ([income, bracket[0]].min - lastbracket) * bracket[1] + else + break + end + lastbracket = bracket[0] + end + tax / 100.0 +end + +require "spec" +describe "taxamount" do + it "test_ex1" do + taxamount(10, [[3, 50], [7, 10], [12, 25]]).should eq 2.65 + end + it "test_ex2" do + taxamount(2, [[1, 0], [4, 25], [5, 50]]).should eq 0.25 + end + it "test_ex3" do + taxamount(0, [[2, 50]]).should eq 0 + end +end diff --git a/challenge-323/roger-bell-west/javascript/ch-1.js b/challenge-323/roger-bell-west/javascript/ch-1.js new file mode 100755 index 0000000000..9373b341a2 --- /dev/null +++ b/challenge-323/roger-bell-west/javascript/ch-1.js @@ -0,0 +1,34 @@ +#! /usr/bin/node + +"use strict" + +function incrementdecrement(operations) { + let p = 0; + for (let s of operations) { + if (s.charAt(1) == '+') { + p += 1; + } else { + p -= 1; + } + } + return p; +} + +if (incrementdecrement(['--x', 'x++', 'x++']) == 1) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (incrementdecrement(['x++', '++x', 'x++']) == 3) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (incrementdecrement(['x++', '++x', '--x', 'x--']) == 0) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-323/roger-bell-west/javascript/ch-2.js b/challenge-323/roger-bell-west/javascript/ch-2.js new file mode 100755 index 0000000000..00808e1d88 --- /dev/null +++ b/challenge-323/roger-bell-west/javascript/ch-2.js @@ -0,0 +1,36 @@ +#! /usr/bin/node + +"use strict" + +function taxamount(income, brackets) { + let tax = 0 + let lastbracket = 0 + for (let bracket of brackets) { + if (income > lastbracket) { + tax += (Math.min(income, bracket[0]) - lastbracket) * bracket[1]; + } else { + break; + } + lastbracket = bracket[0]; + } + return tax / 100.0; +} + +if (taxamount(10, [[3, 50], [7, 10], [12, 25]]) == 2.65) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (taxamount(2, [[1, 0], [4, 25], [5, 50]]) == 0.25) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (taxamount(0, [[2, 50]]) == 0) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-323/roger-bell-west/kotlin/ch-1.kt b/challenge-323/roger-bell-west/kotlin/ch-1.kt new file mode 100644 index 0000000000..639d4ddf06 --- /dev/null +++ b/challenge-323/roger-bell-west/kotlin/ch-1.kt @@ -0,0 +1,34 @@ +fun incrementdecrement(operations: List<String>): Int { + var p = 0 + for (s in operations) { + if (s.get(1) == '+') { + p += 1 + } else { + p -= 1 + } + } + return p +} + +fun main() { + + if (incrementdecrement(listOf("--x", "x++", "x++")) == 1) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (incrementdecrement(listOf("x++", "++x", "x++")) == 3) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (incrementdecrement(listOf("x++", "++x", "--x", "x--")) == 0) { + print("Pass") + } else { + print("Fail") + } + println("") + +} diff --git a/challenge-323/roger-bell-west/kotlin/ch-2.kt b/challenge-323/roger-bell-west/kotlin/ch-2.kt new file mode 100644 index 0000000000..6f73a0eb16 --- /dev/null +++ b/challenge-323/roger-bell-west/kotlin/ch-2.kt @@ -0,0 +1,34 @@ +fun taxamount(income: Int, brackets: List<List<Int>>): Double { + var tax = 0 + var lastbracket = 0 + for (bracket in brackets) { + if (income > lastbracket) { + tax += (listOf(income, bracket[0]).minOrNull()!! - lastbracket) * bracket[1] + } + lastbracket = bracket[0] + } + return tax.toDouble() / 100.0 +} + +fun main() { + + if (taxamount(10, listOf(listOf(3, 50), listOf(7, 10), listOf(12, 25))) == 2.65) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (taxamount(2, listOf(listOf(1, 0), listOf(4, 25), listOf(5, 50))) == 0.25) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (taxamount(0, listOf(listOf(2, 50))) == 0.0) { + print("Pass") + } else { + print("Fail") + } + println("") + +} diff --git a/challenge-323/roger-bell-west/lua/ch-1.lua b/challenge-323/roger-bell-west/lua/ch-1.lua new file mode 100755 index 0000000000..d2402dbd25 --- /dev/null +++ b/challenge-323/roger-bell-west/lua/ch-1.lua @@ -0,0 +1,35 @@ +#! /usr/bin/lua + +function incrementdecrement(operations) + local p = 0 + for _, s in ipairs(operations) do + if string.sub(s, 2, 2) == "+" then + p = p + 1 + else + p = p - 1 + end + end + return p +end + +if incrementdecrement({"--x", "x++", "x++"}) == 1 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if incrementdecrement({"x++", "++x", "x++"}) == 3 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if incrementdecrement({"x++", "++x", "--x", "x--"}) == 0 then + io.write("Pass") +else + io.write("FAIL") +end +print("") + diff --git a/challenge-323/roger-bell-west/lua/ch-2.lua b/challenge-323/roger-bell-west/lua/ch-2.lua new file mode 100755 index 0000000000..8237c90a9d --- /dev/null +++ b/challenge-323/roger-bell-west/lua/ch-2.lua @@ -0,0 +1,37 @@ +#! /usr/bin/lua + +function taxamount(income, brackets) + local tax = 0 + local lastbracket = 0 + for _, bracket in ipairs(brackets) do + if income > lastbracket then + tax = tax + (math.min(income, bracket[1]) - lastbracket) * bracket[2] + else + break + end + lastbracket = bracket[1] + end + return tax / 100 +end + +if taxamount(10, {{3, 50}, {7, 10}, {12, 25}}) == 2.65 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if taxamount(2, {{1, 0}, {4, 25}, {5, 50}}) == 0.25 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if taxamount(0, {{2, 50}}) == 0 then + io.write("Pass") +else + io.write("FAIL") +end +print("") + diff --git a/challenge-323/roger-bell-west/perl/ch-1.pl b/challenge-323/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..ba8628e642 --- /dev/null +++ b/challenge-323/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,23 @@ +#! /usr/bin/perl + +use strict; +use warnings; +use experimental 'signatures'; + +use Test::More tests => 3; + +is(incrementdecrement(['--x', 'x++', 'x++']), 1, 'example 1'); +is(incrementdecrement(['x++', '++x', 'x++']), 3, 'example 2'); +is(incrementdecrement(['x++', '++x', '--x', 'x--']), 0, 'example 3'); + +sub incrementdecrement($operations) { + my $p = 0; + foreach my $s (@{$operations}) { + if ($s =~ /\+/) { + $p++; + } else { + $p--; + } + } + $p; +} diff --git a/challenge-323/roger-bell-west/perl/ch-2.pl b/challenge-323/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..4dc58ac728 --- /dev/null +++ b/challenge-323/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(taxamount(10, [[3, 50], [7, 10], [12, 25]]), 2.65, 'example 1'); +is(taxamount(2, [[1, 0], [4, 25], [5, 50]]), 0.25, 'example 2'); +is(taxamount(0, [[2, 50]]), 0, 'example 3'); + +use List::Util qw(min); + +sub taxamount($income, $brackets) { + my $tax = 0; + my $lastbracket = 0; + foreach my $bracket (@{$brackets}) { + if ($income > $lastbracket) { + $tax += (min($income, $bracket->[0]) - $lastbracket) * $bracket->[1]; + } else { + last; + } + $lastbracket = $bracket->[0]; + } + $tax / 100; +} diff --git a/challenge-323/roger-bell-west/postscript/ch-1.ps b/challenge-323/roger-bell-west/postscript/ch-1.ps new file mode 100644 index 0000000000..d4c8919ffd --- /dev/null +++ b/challenge-323/roger-bell-west/postscript/ch-1.ps @@ -0,0 +1,54 @@ +%!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 { + /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 + + +% end included library code + +/incrementdecrement { + 0 exch + { + 1 get 43 eq { + 1 add + } { + 1 sub + } ifelse + } forall +} bind def + +(incrementdecrement) test.start +[(--x) (x++) (x++)] incrementdecrement 1 eq test +[(x++) (++x) (x++)] incrementdecrement 3 eq test +[(x++) (++x) (--x) (x--)] incrementdecrement 0 eq test +test.end diff --git a/challenge-323/roger-bell-west/postscript/ch-2.ps b/challenge-323/roger-bell-west/postscript/ch-2.ps new file mode 100644 index 0000000000..550402392c --- /dev/null +++ b/challenge-323/roger-bell-west/postscript/ch-2.ps @@ -0,0 +1,62 @@ +%!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 + +/taxamount { + 0 dict begin + /brackets exch def + /income exch def + /lastbracket 0 def + 0 + brackets { + /bracket exch def + income lastbracket gt { + income bracket 0 get min lastbracket sub bracket 1 get mul add + } { + exit + } ifelse + /lastbracket bracket 0 get def + } forall + 100.0 div + end +} bind def + +(taxamount) test.start +10 [[3 50] [7 10] [12 25]] taxamount 2.65 eq test +2 [[1 0] [4 25] [5 50]] taxamount 0.25 eq test +0 [[2 50]] taxamount 0 eq test +test.end diff --git a/challenge-323/roger-bell-west/python/ch-1.py b/challenge-323/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..9890b59848 --- /dev/null +++ b/challenge-323/roger-bell-west/python/ch-1.py @@ -0,0 +1,25 @@ +#! /usr/bin/python3 + +def incrementdecrement(operations): + p = 0 + for s in operations: + if s[1] == "+": + p += 1 + else: + p -= 1 + return p + +import unittest + +class TestIncrementdecrement(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(incrementdecrement(["--x", "x++", "x++"]), 1, 'example 1') + + def test_ex2(self): + self.assertEqual(incrementdecrement(["x++", "++x", "x++"]), 3, 'example 2') + + def test_ex3(self): + self.assertEqual(incrementdecrement(["x++", "++x", "--x", "x--"]), 0, 'example 3') + +unittest.main() diff --git a/challenge-323/roger-bell-west/python/ch-2.py b/challenge-323/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..f29bd23a75 --- /dev/null +++ b/challenge-323/roger-bell-west/python/ch-2.py @@ -0,0 +1,27 @@ +#! /usr/bin/python3 + +def taxamount(income, brackets): + tax = 0 + lastbracket = 0 + for bracket in brackets: + if income > lastbracket: + tax += (min(income, bracket[0]) - lastbracket) * bracket[1] + else: + break + lastbracket = bracket[0] + return tax / 100 + +import unittest + +class TestTaxamount(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(taxamount(10, [[3, 50], [7, 10], [12, 25]]), 2.65, 'example 1') + + def test_ex2(self): + self.assertEqual(taxamount(2, [[1, 0], [4, 25], [5, 50]]), 0.25, 'example 2') + + def test_ex3(self): + self.assertEqual(taxamount(0, [[2, 50]]), 0, 'example 3') + +unittest.main() diff --git a/challenge-323/roger-bell-west/raku/ch-1.p6 b/challenge-323/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..2fe8905ee3 --- /dev/null +++ b/challenge-323/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,21 @@ +#! /usr/bin/raku + +use Test; + +plan 3; + +is(incrementdecrement(['--x', 'x++', 'x++']), 1, 'example 1'); +is(incrementdecrement(['x++', '++x', 'x++']), 3, 'example 2'); +is(incrementdecrement(['x++', '++x', '--x', 'x--']), 0, 'example 3'); + +sub incrementdecrement(@operations) { + my $p = 0; + for @operations -> $s { + if ($s ~~ /\+/) { + $p++; + } else { + $p--; + } + } + $p; +} diff --git a/challenge-323/roger-bell-west/raku/ch-2.p6 b/challenge-323/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..1dce267343 --- /dev/null +++ b/challenge-323/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,23 @@ +#! /usr/bin/raku + +use Test; + +plan 3; + +is(taxamount(10, [[3, 50], [7, 10], [12, 25]]), 2.65, 'example 1'); +is(taxamount(2, [[1, 0], [4, 25], [5, 50]]), 0.25, 'example 2'); +is(taxamount(0, [[2, 50], ]), 0, 'example 3'); + +sub taxamount($income, @brackets) { + my $tax = 0; + my $lastbracket = 0; + for @brackets -> @bracket { + if ($income > $lastbracket) { + $tax += (min($income, @bracket[0]) - $lastbracket) * @bracket[1]; + } else { + last; + } + $lastbracket = @bracket[0]; + } + $tax / 100; +} diff --git a/challenge-323/roger-bell-west/ruby/ch-1.rb b/challenge-323/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..55b1ba200c --- /dev/null +++ b/challenge-323/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,31 @@ +#! /usr/bin/ruby + +def incrementdecrement(operations) + p = 0 + operations.each do |s| + if s.chars()[1] == "+" + p += 1 + else + p -= 1 + end + end + p +end + +require 'test/unit' + +class TestIncrementdecrement < Test::Unit::TestCase + + def test_ex1 + assert_equal(1, incrementdecrement(['--x', 'x++', 'x++'])) + end + + def test_ex2 + assert_equal(3, incrementdecrement(['x++', '++x', 'x++'])) + end + + def test_ex3 + assert_equal(0, incrementdecrement(['x++', '++x', '--x', 'x--'])) + end + +end diff --git a/challenge-323/roger-bell-west/ruby/ch-2.rb b/challenge-323/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..f41340b758 --- /dev/null +++ b/challenge-323/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,33 @@ +#! /usr/bin/ruby + +def taxamount(income, brackets) + tax = 0 + lastbracket = 0 + brackets.each do |bracket| + if income > lastbracket + tax += ([income, bracket[0]].min - lastbracket) * bracket[1] + else + break + end + lastbracket = bracket[0] + end + tax / 100.0 +end + +require 'test/unit' + +class TestTaxamount < Test::Unit::TestCase + + def test_ex1 + assert_equal(2.65, taxamount(10, [[3, 50], [7, 10], [12, 25]])) + end + + def test_ex2 + assert_equal(0.25, taxamount(2, [[1, 0], [4, 25], [5, 50]])) + end + + def test_ex3 + assert_equal(0, taxamount(0, [[2, 50]])) + end + +end diff --git a/challenge-323/roger-bell-west/rust/ch-1.rs b/challenge-323/roger-bell-west/rust/ch-1.rs new file mode 100755 index 0000000000..2b4702923b --- /dev/null +++ b/challenge-323/roger-bell-west/rust/ch-1.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!(incrementdecrement(vec!["--x", "x++", "x++"]), 1); +} + +#[test] +fn test_ex2() { + assert_eq!(incrementdecrement(vec!["x++", "++x", "x++"]), 3); +} + +#[test] +fn test_ex3() { + assert_eq!(incrementdecrement(vec!["x++", "++x", "--x", "x--"]), 0); +} + +fn incrementdecrement(operations: Vec<&str>) -> i32 { + let mut p = 0; + for s in operations { + if s.chars().nth(1).unwrap() == '+' { + p += 1; + } else { + p -= 1; + } + } + p +} diff --git a/challenge-323/roger-bell-west/rust/ch-2.rs b/challenge-323/roger-bell-west/rust/ch-2.rs new file mode 100755 index 0000000000..bc33c44a88 --- /dev/null +++ b/challenge-323/roger-bell-west/rust/ch-2.rs @@ -0,0 +1,35 @@ +#! /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!( + taxamount(10, vec![vec![3, 50], vec![7, 10], vec![12, 25]]), + 2.65 + ); +} + +#[test] +fn test_ex2() { + assert_eq!(taxamount(2, vec![vec![1, 0], vec![4, 25], vec![5, 50]]), 0.25); +} + +#[test] +fn test_ex3() { + assert_eq!(taxamount(0, vec![vec![2, 50]]), 0.0); +} + +fn taxamount(income: u32, brackets: Vec<Vec<u32>>) -> f64 { + let mut tax = 0; + let mut lastbracket = 0; + for bracket in brackets { + if income > lastbracket { + tax += + (std::cmp::min(income, bracket[0]) - lastbracket) * bracket[1]; + } else { + break; + } + lastbracket = bracket[0]; + } + (tax as f64) / 100.0 +} diff --git a/challenge-323/roger-bell-west/scala/ch-1.scala b/challenge-323/roger-bell-west/scala/ch-1.scala new file mode 100644 index 0000000000..ef492e940d --- /dev/null +++ b/challenge-323/roger-bell-west/scala/ch-1.scala @@ -0,0 +1,35 @@ + +object Incrementdecrement { + def incrementdecrement(operations: List[String]): Int = { + var p = 0 + for (s <- operations) { + if (s.charAt(1) == '+') { + p += 1 + } else { + p -= 1 + } + } + p + } + def main(args: Array[String]) { + if (incrementdecrement(List("--x", "x++", "x++")) == 1) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (incrementdecrement(List("x++", "++x", "x++")) == 3) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (incrementdecrement(List("x++", "++x", "--x", "x--")) == 0) { + print("Pass") + } else { + print("Fail") + } + println("") + + } +} diff --git a/challenge-323/roger-bell-west/scala/ch-2.scala b/challenge-323/roger-bell-west/scala/ch-2.scala new file mode 100644 index 0000000000..e06d6ded96 --- /dev/null +++ b/challenge-323/roger-bell-west/scala/ch-2.scala @@ -0,0 +1,35 @@ + +object Taxamount { + def taxamount(income: Int, brackets: List[List[Int]]): Double = { + var tax = 0 + var lastbracket = 0 + for (bracket <- brackets) { + if (income > lastbracket) { + tax += (List(income, bracket(0)).min - lastbracket) * bracket(1) + } + lastbracket = bracket(0) + } + tax.toDouble / 100.0 + } + def main(args: Array[String]) { + if (taxamount(10, List(List(3, 50), List(7, 10), List(12, 25))) == 2.65) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (taxamount(2, List(List(1, 0), List(4, 25), List(5, 50))) == 0.25) { + print("Pass") + } else { + print("Fail") + } + print(" ") + if (taxamount(0, List(List(2, 50))) == 0.0) { + print("Pass") + } else { + print("Fail") + } + println("") + + } +} diff --git a/challenge-323/roger-bell-west/tests.json b/challenge-323/roger-bell-west/tests.json new file mode 100644 index 0000000000..e2cb72854d --- /dev/null +++ b/challenge-323/roger-bell-west/tests.json @@ -0,0 +1,44 @@ +{ + "ch-1" : [ + { + "function" : "incrementdecrement", + "arguments" : [ "--x", "x++", "x++" ], + "result" : 1 + }, + { + "arguments" : [ "x++", "++x", "x++" ], + "result" : 3 + }, + { + "arguments" : [ "x++", "++x", "--x", "x--" ], + "result" : 0 + } + ], + "ch-2" : [ + { + "function" : "taxamount", + "multiarg" : true, + "arguments" : [ + 10.0, + [ [3, 50], [7, 10], [12, 25] ] + ], + "result" : 2.65 + }, + { + "multiarg" : true, + "arguments" : [ + 2.0, + [ [1, 0], [4, 25], [5, 50] ] + ], + "result" : 0.25 + }, + { + "multiarg" : true, + "arguments" : [ + 0.0, + [ [2, 50] ] + ], + "result" : 0.0 + } + ] +} diff --git a/challenge-323/roger-bell-west/typst/ch-1.typ b/challenge-323/roger-bell-west/typst/ch-1.typ new file mode 100644 index 0000000000..3f863e61c0 --- /dev/null +++ b/challenge-323/roger-bell-west/typst/ch-1.typ @@ -0,0 +1,29 @@ +#let incrementdecrement(operations) = { + let p = 0 + for s in operations { + if s.at(1) == "+" { + p += 1 + } else { + p -= 1 + } + } + p +} + +#let testresult(pass) = { + if pass { + text(fill: green, "Pass") + } else { + text(fill: red, "Fail") + } +} + +Test 1: + #testresult(incrementdecrement(("--x", "x++", "x++")) == 1) + +Test 2: + #testresult(incrementdecrement(("x++", "++x", "x++")) == 3) + +Test 3: + #testresult(incrementdecrement(("x++", "++x", "--x", "x--")) == 0) + diff --git a/challenge-323/roger-bell-west/typst/ch-2.typ b/challenge-323/roger-bell-west/typst/ch-2.typ new file mode 100644 index 0000000000..afc239f19b --- /dev/null +++ b/challenge-323/roger-bell-west/typst/ch-2.typ @@ -0,0 +1,29 @@ +#let taxamount(income, brackets) = { + let tax = 0 + let lastbracket = 0 + for bracket in brackets { + if income > lastbracket { + tax += (calc.min(income, bracket.at(0)) - lastbracket) * bracket.at(1) + } + lastbracket = bracket.at(0) + } + float(tax) / 100.0 +} + +#let testresult(pass) = { + if pass { + text(fill: green, "Pass") + } else { + text(fill: red, "Fail") + } +} + +Test 1: + #testresult(taxam |
