aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-323/deadmarshal/blog.txt1
-rw-r--r--challenge-323/deadmarshal/erlang/ch1.erl11
-rw-r--r--challenge-323/deadmarshal/erlang/ch2.erl12
-rw-r--r--challenge-323/deadmarshal/go/ch1.go27
-rw-r--r--challenge-323/deadmarshal/go/ch2.go21
-rw-r--r--challenge-323/deadmarshal/java/Ch1.java16
-rw-r--r--challenge-323/deadmarshal/java/Ch2.java17
-rw-r--r--challenge-323/deadmarshal/modula-3/Ch1/src/Ch1.m327
-rw-r--r--challenge-323/deadmarshal/modula-3/Ch1/src/m3makefile4
-rw-r--r--challenge-323/deadmarshal/modula-3/Ch2/src/Ch2.m335
-rw-r--r--challenge-323/deadmarshal/modula-3/Ch2/src/m3makefile4
-rw-r--r--challenge-323/deadmarshal/perl/ch-1.pl14
-rw-r--r--challenge-323/deadmarshal/perl/ch-2.pl18
13 files changed, 207 insertions, 0 deletions
diff --git a/challenge-323/deadmarshal/blog.txt b/challenge-323/deadmarshal/blog.txt
new file mode 100644
index 0000000000..c2b8c8da6d
--- /dev/null
+++ b/challenge-323/deadmarshal/blog.txt
@@ -0,0 +1 @@
+https://deadmarshal.blogspot.com/2025/05/twc323.html
diff --git a/challenge-323/deadmarshal/erlang/ch1.erl b/challenge-323/deadmarshal/erlang/ch1.erl
new file mode 100644
index 0000000000..4c198e46b1
--- /dev/null
+++ b/challenge-323/deadmarshal/erlang/ch1.erl
@@ -0,0 +1,11 @@
+-module(ch1).
+-export([increment_decrement/1]).
+
+increment_decrement(L) ->
+ lists:foldl(fun(E,Acc) ->
+ case string:find(E,"++",leading) of
+ nomatch -> Acc-1;
+ _ -> Acc+1
+ end
+ end,0,L).
+
diff --git a/challenge-323/deadmarshal/erlang/ch2.erl b/challenge-323/deadmarshal/erlang/ch2.erl
new file mode 100644
index 0000000000..572cc753ff
--- /dev/null
+++ b/challenge-323/deadmarshal/erlang/ch2.erl
@@ -0,0 +1,12 @@
+-module(ch2).
+-export([tax_amount/2]).
+
+tax_amount(Income,Taxes) ->
+ tax_amount(Income,Taxes,0,0).
+
+tax_amount(Income,[[Upper,Percent]|T],Prev,Tax) when Income > 0 ->
+ Curr = Upper - Prev,
+ Tax2 = Tax + min(Income,Curr) * Percent / 100,
+ tax_amount(Income - Curr, T, Upper, Tax2);
+tax_amount(_,_,_,Tax) -> Tax.
+
diff --git a/challenge-323/deadmarshal/go/ch1.go b/challenge-323/deadmarshal/go/ch1.go
new file mode 100644
index 0000000000..afb0c3effc
--- /dev/null
+++ b/challenge-323/deadmarshal/go/ch1.go
@@ -0,0 +1,27 @@
+package main
+
+import (
+ "fmt"
+ "strings"
+)
+
+func incrementDecrement(arr []string) int {
+ x := 0
+ for _, v := range arr {
+ if strings.Contains(v, "++") {
+ x++
+ } else {
+ x--
+ }
+ }
+ return x
+}
+
+func main() {
+ arr1 := []string{"--x", "x++", "x++"}
+ arr2 := []string{"x++", "++x", "x++"}
+ arr3 := []string{"x++", "++x", "--x", "x--"}
+ fmt.Println(incrementDecrement(arr1))
+ fmt.Println(incrementDecrement(arr2))
+ fmt.Println(incrementDecrement(arr3))
+}
diff --git a/challenge-323/deadmarshal/go/ch2.go b/challenge-323/deadmarshal/go/ch2.go
new file mode 100644
index 0000000000..be4b581469
--- /dev/null
+++ b/challenge-323/deadmarshal/go/ch2.go
@@ -0,0 +1,21 @@
+package main
+
+import (
+ "fmt"
+)
+
+func tax_amount(income int, taxes [][]int) float64 {
+ res := 0
+ prev := 0
+ for _, e := range taxes {
+ res += max(0, min(income, e[0])-prev) * e[1]
+ prev = e[0]
+ }
+ return float64(res) / 100.0
+}
+
+func main() {
+ fmt.Println(tax_amount(10, [][]int{{3, 50}, {7, 10}, {12, 25}}))
+ fmt.Println(tax_amount(2, [][]int{{1, 0}, {4, 25}, {5, 50}}))
+ fmt.Println(tax_amount(0, [][]int{{2, 50}}))
+}
diff --git a/challenge-323/deadmarshal/java/Ch1.java b/challenge-323/deadmarshal/java/Ch1.java
new file mode 100644
index 0000000000..d83355c039
--- /dev/null
+++ b/challenge-323/deadmarshal/java/Ch1.java
@@ -0,0 +1,16 @@
+public class Ch1 {
+ public static void main(String[] args) {
+ System.out.println(increment_decrement(new String[]{"--x", "x++", "x++"}));
+ System.out.println(increment_decrement(new String[]{"x++", "++x", "x++"}));
+ System.out.println(increment_decrement(new String[]{"x++", "++x", "--x", "x--"}));
+ }
+
+ private static int increment_decrement(String[] arr) {
+ int x = 0;
+ for (String s : arr) {
+ if (s.contains("++")) x++;
+ else x--;
+ }
+ return x;
+ }
+}
diff --git a/challenge-323/deadmarshal/java/Ch2.java b/challenge-323/deadmarshal/java/Ch2.java
new file mode 100644
index 0000000000..b2208c1d23
--- /dev/null
+++ b/challenge-323/deadmarshal/java/Ch2.java
@@ -0,0 +1,17 @@
+public class Ch2 {
+ public static void main(String[] args) {
+ System.out.println(tax_amount(10, new int[][]{{3, 50}, {7, 10}, {12, 25}}));
+ System.out.println(tax_amount(2, new int[][]{{1, 0}, {4, 25}, {5, 50}}));
+ System.out.println(tax_amount(0, new int[][]{{2, 50}}));
+ }
+
+ private static double tax_amount(int income, int[][] taxes) {
+ int res = 0, prev = 0;
+ for (var e : taxes) {
+ res += Math.max(0, Math.min(income, e[0]) - prev) * e[1];
+ prev = e[0];
+ }
+ return res / 100.0;
+ }
+}
+
diff --git a/challenge-323/deadmarshal/modula-3/Ch1/src/Ch1.m3 b/challenge-323/deadmarshal/modula-3/Ch1/src/Ch1.m3
new file mode 100644
index 0000000000..68a9099534
--- /dev/null
+++ b/challenge-323/deadmarshal/modula-3/Ch1/src/Ch1.m3
@@ -0,0 +1,27 @@
+MODULE Ch1 EXPORTS Main;
+
+IMPORT SIO,Text;
+
+VAR
+ A1 := ARRAY[0..2] OF TEXT{"--x","x++","x++"};
+ A2 := ARRAY[0..2] OF TEXT{"x++","++x","x++"};
+ A3 := ARRAY[0..3] OF TEXT{"x++","++x","--x","x--"};
+
+PROCEDURE IncrementDecrement(VAR A:ARRAY OF TEXT):INTEGER =
+ VAR X:INTEGER;
+ BEGIN
+ FOR I := FIRST(A) TO LAST(A) DO
+ IF Text.FindChar(A[I],'+',0) # -1 THEN
+ INC(X)
+ ELSE DEC(X)
+ END;
+ END;
+ RETURN X
+ END IncrementDecrement;
+
+BEGIN
+ SIO.PutInt(IncrementDecrement(A1)); SIO.Nl();
+ SIO.PutInt(IncrementDecrement(A2)); SIO.Nl();
+ SIO.PutInt(IncrementDecrement(A3)); SIO.Nl()
+END Ch1.
+
diff --git a/challenge-323/deadmarshal/modula-3/Ch1/src/m3makefile b/challenge-323/deadmarshal/modula-3/Ch1/src/m3makefile
new file mode 100644
index 0000000000..643b33d043
--- /dev/null
+++ b/challenge-323/deadmarshal/modula-3/Ch1/src/m3makefile
@@ -0,0 +1,4 @@
+import("libm3")
+import("libsio")
+implementation("Ch1")
+program("Ch1")
diff --git a/challenge-323/deadmarshal/modula-3/Ch2/src/Ch2.m3 b/challenge-323/deadmarshal/modula-3/Ch2/src/Ch2.m3
new file mode 100644
index 0000000000..e92fd964cd
--- /dev/null
+++ b/challenge-323/deadmarshal/modula-3/Ch2/src/Ch2.m3
@@ -0,0 +1,35 @@
+MODULE Ch2 EXPORTS Main;
+
+IMPORT SIO;
+
+VAR
+ A1 := ARRAY[0..2],[0..1] OF INTEGER{
+ ARRAY[0..1] OF INTEGER{3,50},
+ ARRAY[0..1] OF INTEGER{7,10},
+ ARRAY[0..1] OF INTEGER{12,25}};
+
+ A2 := ARRAY[0..2],[0..1] OF INTEGER{
+ ARRAY[0..1] OF INTEGER{1,0},
+ ARRAY[0..1] OF INTEGER{4,25},
+ ARRAY[0..1] OF INTEGER{5,50}};
+
+ A3 := ARRAY[0..0],[0..1] OF INTEGER{
+ ARRAY[0..1] OF INTEGER{2,50}};
+
+PROCEDURE TaxAmount(READONLY Income:INTEGER;
+ VAR A:ARRAY OF ARRAY OF INTEGER):LONGREAL =
+ VAR Res,Prev:INTEGER;
+ BEGIN
+ FOR I := FIRST(A) TO LAST(A) DO
+ INC(Res,MAX(0,MIN(Income,A[I][0]) - Prev) * A[I][1]);
+ Prev := A[I][0]
+ END;
+ RETURN FLOAT(Res,LONGREAL) / 100.0D0;
+ END TaxAmount;
+
+BEGIN
+ SIO.PutLongReal(TaxAmount(10,A1)); SIO.Nl();
+ SIO.PutLongReal(TaxAmount(2,A2)); SIO.Nl();
+ SIO.PutLongReal(TaxAmount(0,A3)); SIO.Nl()
+END Ch2.
+
diff --git a/challenge-323/deadmarshal/modula-3/Ch2/src/m3makefile b/challenge-323/deadmarshal/modula-3/Ch2/src/m3makefile
new file mode 100644
index 0000000000..78802242fe
--- /dev/null
+++ b/challenge-323/deadmarshal/modula-3/Ch2/src/m3makefile
@@ -0,0 +1,4 @@
+import("libm3")
+import("libsio")
+implementation("Ch2")
+program("Ch2")
diff --git a/challenge-323/deadmarshal/perl/ch-1.pl b/challenge-323/deadmarshal/perl/ch-1.pl
new file mode 100644
index 0000000000..d4813d8a61
--- /dev/null
+++ b/challenge-323/deadmarshal/perl/ch-1.pl
@@ -0,0 +1,14 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+sub increment_decrement{
+ my $x = 0;
+ map{/\+\+/ ? $x++ : $x--} @{$_[0]};
+ $x
+}
+
+printf "%d\n",increment_decrement(["--x","x++","x++"]);
+printf "%d\n",increment_decrement(["x++","++x","x++"]);
+printf "%d\n",increment_decrement(["x++","++x","--x","x--"]);
+
diff --git a/challenge-323/deadmarshal/perl/ch-2.pl b/challenge-323/deadmarshal/perl/ch-2.pl
new file mode 100644
index 0000000000..3831303b06
--- /dev/null
+++ b/challenge-323/deadmarshal/perl/ch-2.pl
@@ -0,0 +1,18 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use List::Util qw(min max);
+
+sub tax_amount{
+ my ($res,$prev) = (0,0);
+ foreach(@{$_[1]}){
+ $res += max(0,min($_[0],$_->[0]) - $prev) * $_->[1];
+ $prev = $_->[0]
+ }
+ $res / 100.0
+}
+
+printf "%.2f\n",tax_amount(10,[[3,50],[7,10],[12,25]]);
+printf "%.2f\n",tax_amount(2,[[1,0],[4,25],[5,50]]);
+printf "%.2f\n",tax_amount(0,[[2,50]]);
+