aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2025-08-04 23:38:41 +0100
committerGitHub <noreply@github.com>2025-08-04 23:38:41 +0100
commite7b7e4d53ed43950effa2822f420dbf4eeb726f8 (patch)
tree2831e9f0f0072a3f245532b18466df5ce712c98e
parent741cefe18001f6fed70297862bfe9535db2bd7c1 (diff)
parentb830fb716a3819d5494d850f4fbec45ac3c49ddf (diff)
downloadperlweeklychallenge-club-e7b7e4d53ed43950effa2822f420dbf4eeb726f8.tar.gz
perlweeklychallenge-club-e7b7e4d53ed43950effa2822f420dbf4eeb726f8.tar.bz2
perlweeklychallenge-club-e7b7e4d53ed43950effa2822f420dbf4eeb726f8.zip
Merge pull request #12461 from deadmarshal/TWC333
TWC333
-rw-r--r--challenge-333/deadmarshal/blog.txt1
-rw-r--r--challenge-333/deadmarshal/go/ch1.go27
-rw-r--r--challenge-333/deadmarshal/go/ch2.go47
-rw-r--r--challenge-333/deadmarshal/java/Ch1.java19
-rw-r--r--challenge-333/deadmarshal/java/Ch2.java36
-rw-r--r--challenge-333/deadmarshal/modula-3/Ch1/src/Ch1.m353
-rw-r--r--challenge-333/deadmarshal/modula-3/Ch1/src/m3makefile4
-rw-r--r--challenge-333/deadmarshal/modula-3/Ch2/src/Ch2.m357
-rw-r--r--challenge-333/deadmarshal/modula-3/Ch2/src/m3makefile4
-rw-r--r--challenge-333/deadmarshal/perl/ch-1.pl22
-rw-r--r--challenge-333/deadmarshal/perl/ch-2.pl25
11 files changed, 295 insertions, 0 deletions
diff --git a/challenge-333/deadmarshal/blog.txt b/challenge-333/deadmarshal/blog.txt
new file mode 100644
index 0000000000..f922aeb1a9
--- /dev/null
+++ b/challenge-333/deadmarshal/blog.txt
@@ -0,0 +1 @@
+https://deadmarshal.blogspot.com/2025/08/twc333.html
diff --git a/challenge-333/deadmarshal/go/ch1.go b/challenge-333/deadmarshal/go/ch1.go
new file mode 100644
index 0000000000..173392003d
--- /dev/null
+++ b/challenge-333/deadmarshal/go/ch1.go
@@ -0,0 +1,27 @@
+package main
+
+import (
+ "fmt"
+)
+
+func straightLine(arr [][]int) bool {
+ x1, y1 := arr[0][0], arr[0][1]
+ x2, y2 := arr[1][0], arr[1][1]
+ for i := 2; i < len(arr); i++ {
+ x, y := arr[i][0], arr[i][1]
+ if (x-x1)*(y2-y1) != (y-y1)*(x2-x1) {
+ return false
+ }
+ }
+ return true
+}
+
+func main() {
+ fmt.Println(straightLine([][]int{{2, 1}, {2, 3}, {2, 5}}))
+ fmt.Println(straightLine([][]int{{1, 4}, {3, 4}, {10, 4}}))
+ fmt.Println(straightLine([][]int{{0, 0}, {1, 1}, {2, 3}}))
+ fmt.Println(straightLine([][]int{{1, 1}, {1, 1}, {1, 1}}))
+ fmt.Println(straightLine([][]int{{1000000, 1000000},
+ {2000000, 2000000},
+ {3000000, 3000000}}))
+}
diff --git a/challenge-333/deadmarshal/go/ch2.go b/challenge-333/deadmarshal/go/ch2.go
new file mode 100644
index 0000000000..a93532127b
--- /dev/null
+++ b/challenge-333/deadmarshal/go/ch2.go
@@ -0,0 +1,47 @@
+package main
+
+import (
+ "fmt"
+)
+
+func duplicateZeros(arr []int) {
+ n := len(arr)
+ i, k := -1, 0
+ for k < n {
+ i, k = i+1, k+1
+ if arr[i] == 0 {
+ k++
+ }
+ }
+ j := n - 1
+ if k == n+1 {
+ arr[j] = 0
+ i, j = i-1, j-1
+ }
+ for j >= 0 {
+ arr[j] = arr[i]
+ if arr[i] == 0 {
+ j--
+ arr[j] = arr[i]
+ }
+ i, j = i-1, j-1
+ }
+}
+
+func main() {
+ a1 := []int{1, 0, 2, 3, 0, 4, 5, 0}
+ a2 := []int{1, 2, 3}
+ a3 := []int{1, 2, 3, 0}
+ a4 := []int{0, 0, 1, 2}
+ a5 := []int{1, 2, 0, 3, 4}
+ duplicateZeros(a1)
+ duplicateZeros(a2)
+ duplicateZeros(a3)
+ duplicateZeros(a4)
+ duplicateZeros(a5)
+ fmt.Println(a1)
+ fmt.Println(a2)
+ fmt.Println(a3)
+ fmt.Println(a4)
+ fmt.Println(a5)
+}
diff --git a/challenge-333/deadmarshal/java/Ch1.java b/challenge-333/deadmarshal/java/Ch1.java
new file mode 100644
index 0000000000..c426d8ccbf
--- /dev/null
+++ b/challenge-333/deadmarshal/java/Ch1.java
@@ -0,0 +1,19 @@
+public class Ch1 {
+ public static void main(String[] args) {
+ System.out.println(straight_line(new int[][]{{2, 1}, {2, 3}, {2, 5}}));
+ System.out.println(straight_line(new int[][]{{1, 4}, {3, 4}, {10, 4}}));
+ System.out.println(straight_line(new int[][]{{0, 0}, {1, 1}, {2, 3}}));
+ System.out.println(straight_line(new int[][]{{1, 1}, {1, 1}, {1, 1}}));
+ System.out.println(straight_line(new int[][]{{1000000, 1000000},
+ {2000000, 2000000}, {3000000, 3000000}}));
+ }
+
+ private static boolean straight_line(int[][] arr) {
+ int x1 = arr[0][0], y1 = arr[0][1], x2 = arr[1][0], y2 = arr[1][1];
+ for (int i = 2; i < arr.length; ++i) {
+ int x = arr[i][0], y = arr[i][1];
+ if ((x - x1) * (y2 - y1) != (y - y1) * (x2 - x1)) return false;
+ }
+ return true;
+ }
+} \ No newline at end of file
diff --git a/challenge-333/deadmarshal/java/Ch2.java b/challenge-333/deadmarshal/java/Ch2.java
new file mode 100644
index 0000000000..baac1c6ac5
--- /dev/null
+++ b/challenge-333/deadmarshal/java/Ch2.java
@@ -0,0 +1,36 @@
+import java.util.Arrays;
+
+public class Ch2 {
+ public static void main(String[] args) {
+ int[] a1 = new int[]{1, 0, 2, 3, 0, 4, 5, 0};
+ int[] a2 = new int[]{1, 2, 3};
+ int[] a3 = new int[]{1, 2, 3, 0};
+ int[] a4 = new int[]{0, 0, 1, 2};
+ int[] a5 = new int[]{1, 2, 0, 3, 4};
+ for (var a : new int[][]{a1, a2, a3, a4, a5}) duplicate_zeros(a);
+ System.out.println(Arrays.toString(a1));
+ System.out.println(Arrays.toString(a2));
+ System.out.println(Arrays.toString(a3));
+ System.out.println(Arrays.toString(a4));
+ System.out.println(Arrays.toString(a5));
+ }
+
+ private static void duplicate_zeros(int[] arr) {
+ int n = arr.length, i = -1, k = 0;
+ while (k < n) {
+ ++i;
+ k += arr[i] > 0 ? 1 : 2;
+ }
+ int j = n - 1;
+ if (k == n + 1) {
+ arr[j--] = 0;
+ --i;
+ }
+ while (j >= 0) {
+ arr[j] = arr[i];
+ if (arr[i] == 0) arr[--j] = arr[i];
+ --i;
+ --j;
+ }
+ }
+}
diff --git a/challenge-333/deadmarshal/modula-3/Ch1/src/Ch1.m3 b/challenge-333/deadmarshal/modula-3/Ch1/src/Ch1.m3
new file mode 100644
index 0000000000..9070608da3
--- /dev/null
+++ b/challenge-333/deadmarshal/modula-3/Ch1/src/Ch1.m3
@@ -0,0 +1,53 @@
+MODULE Ch1 EXPORTS Main;
+
+IMPORT SIO;
+
+VAR
+ A1 := ARRAY[0..2],[0..1] OF INTEGER{
+ ARRAY[0..1] OF INTEGER{2,1},
+ ARRAY[0..1] OF INTEGER{2,3},
+ ARRAY[0..1] OF INTEGER{2,5}};
+ A2 := ARRAY[0..2],[0..1] OF INTEGER{
+ ARRAY[0..1] OF INTEGER{1,4},
+ ARRAY[0..1] OF INTEGER{3,4},
+ ARRAY[0..1] OF INTEGER{10,4}};
+ A3 := ARRAY[0..2],[0..1] OF INTEGER{
+ ARRAY[0..1] OF INTEGER{0,0},
+ ARRAY[0..1] OF INTEGER{1,1},
+ ARRAY[0..1] OF INTEGER{2,3}};
+ A4 := ARRAY[0..2],[0..1] OF INTEGER{
+ ARRAY[0..1] OF INTEGER{1,1},
+ ARRAY[0..1] OF INTEGER{1,1},
+ ARRAY[0..1] OF INTEGER{1,1}};
+ A5 := ARRAY[0..2],[0..1] OF INTEGER{
+ ARRAY[0..1] OF INTEGER{1000000,1000000},
+ ARRAY[0..1] OF INTEGER{2000000,2000000},
+ ARRAY[0..1] OF INTEGER{3000000,3000000}};
+
+ (* Assumes zero-based arrays only: *)
+PROCEDURE StraightLine(VAR A:ARRAY OF ARRAY OF INTEGER):BOOLEAN =
+ VAR
+ X,Y:INTEGER;
+ X1 := A[0,0];
+ Y1 := A[0,1];
+ X2 := A[1,0];
+ Y2 := A[1,1];
+ BEGIN
+ FOR I := 2 TO LAST(A) DO
+ X := A[I,0];
+ Y := A[I,1];
+ IF (X - X1) * (Y2 - Y1) # (Y - Y1) * (X2 - X1) THEN
+ RETURN FALSE
+ END
+ END;
+ RETURN TRUE
+ END StraightLine;
+
+BEGIN
+ SIO.PutBool(StraightLine(A1)); SIO.Nl();
+ SIO.PutBool(StraightLine(A2)); SIO.Nl();
+ SIO.PutBool(StraightLine(A3)); SIO.Nl();
+ SIO.PutBool(StraightLine(A4)); SIO.Nl();
+ SIO.PutBool(StraightLine(A5)); SIO.Nl()
+END Ch1.
+
diff --git a/challenge-333/deadmarshal/modula-3/Ch1/src/m3makefile b/challenge-333/deadmarshal/modula-3/Ch1/src/m3makefile
new file mode 100644
index 0000000000..643b33d043
--- /dev/null
+++ b/challenge-333/deadmarshal/modula-3/Ch1/src/m3makefile
@@ -0,0 +1,4 @@
+import("libm3")
+import("libsio")
+implementation("Ch1")
+program("Ch1")
diff --git a/challenge-333/deadmarshal/modula-3/Ch2/src/Ch2.m3 b/challenge-333/deadmarshal/modula-3/Ch2/src/Ch2.m3
new file mode 100644
index 0000000000..530a1d4cb3
--- /dev/null
+++ b/challenge-333/deadmarshal/modula-3/Ch2/src/Ch2.m3
@@ -0,0 +1,57 @@
+MODULE Ch2 EXPORTS Main;
+
+IMPORT SIO;
+
+VAR
+ A1 := ARRAY[0..7] OF INTEGER{1,0,2,3,0,4,5,0};
+ A2 := ARRAY[0..2] OF INTEGER{1,2,3};
+ A3 := ARRAY[0..3] OF INTEGER{1,2,3,0};
+ A4 := ARRAY[0..3] OF INTEGER{0,0,1,2};
+ A5 := ARRAY[0..4] OF INTEGER{1,2,0,3,4};
+
+PROCEDURE DuplicateZeros(VAR A:ARRAY OF INTEGER) =
+ VAR
+ N := NUMBER(A);
+ I := -1;
+ K := 0;
+ J := N-1;
+ BEGIN
+ WHILE K < N DO
+ INC(I);
+ IF A[I] > 0 THEN INC(K) ELSE INC(K,2) END
+ END;
+ IF K = N+1 THEN
+ A[J] := 0;
+ DEC(J);
+ DEC(I)
+ END;
+ WHILE J >= FIRST(A) DO
+ A[J] := A[I];
+ IF A[I] = 0 THEN DEC(J); A[J] := A[I] END;
+ DEC(I);
+ DEC(J)
+ END;
+ END DuplicateZeros;
+
+PROCEDURE PrintArray(VAR A:ARRAY OF INTEGER) =
+ BEGIN
+ FOR I := FIRST(A) TO LAST(A) DO
+ SIO.PutInt(A[I]);
+ SIO.PutChar(' ')
+ END;
+ SIO.Nl()
+ END PrintArray;
+
+BEGIN
+ DuplicateZeros(A1);
+ DuplicateZeros(A2);
+ DuplicateZeros(A3);
+ DuplicateZeros(A4);
+ DuplicateZeros(A5);
+ PrintArray(A1);
+ PrintArray(A2);
+ PrintArray(A3);
+ PrintArray(A4);
+ PrintArray(A5);
+END Ch2.
+
diff --git a/challenge-333/deadmarshal/modula-3/Ch2/src/m3makefile b/challenge-333/deadmarshal/modula-3/Ch2/src/m3makefile
new file mode 100644
index 0000000000..78802242fe
--- /dev/null
+++ b/challenge-333/deadmarshal/modula-3/Ch2/src/m3makefile
@@ -0,0 +1,4 @@
+import("libm3")
+import("libsio")
+implementation("Ch2")
+program("Ch2")
diff --git a/challenge-333/deadmarshal/perl/ch-1.pl b/challenge-333/deadmarshal/perl/ch-1.pl
new file mode 100644
index 0000000000..7f6a9b92ca
--- /dev/null
+++ b/challenge-333/deadmarshal/perl/ch-1.pl
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+sub straight_line{
+ my ($m) = @_;
+ my ($x1,$y1,$x2,$y2) = ($m->[0][0],$m->[0][1],$m->[1][0],$m->[1][1]);
+ for(my $i = 2; $i < @$m; ++$i) {
+ my ($x,$y) = ($m->[$i][0],$m->[$i][1]);
+ return 0 if(($x - $x1) * ($y2 - $y1) != ($y - $y1) * ($x2 - $x1))
+ }
+ 1
+}
+
+printf "%d\n",straight_line([[2,1],[2,3],[2,5]]);
+printf "%d\n",straight_line([[1,4],[3,4],[10,4]]);
+printf "%d\n",straight_line([[0,0],[1,1],[2,3]]);
+printf "%d\n",straight_line([[1,1],[1,1],[1,1]]);
+printf "%d\n",straight_line([[1000000,1000000],
+ [2000000,2000000],
+ [3000000,3000000]]);
+
diff --git a/challenge-333/deadmarshal/perl/ch-2.pl b/challenge-333/deadmarshal/perl/ch-2.pl
new file mode 100644
index 0000000000..5f9aecb8bd
--- /dev/null
+++ b/challenge-333/deadmarshal/perl/ch-2.pl
@@ -0,0 +1,25 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Data::Show;
+
+sub duplicate_zeros{
+ my ($arr) = @_;
+ my ($i,@stk) = (0);
+ while($i < @$arr && @stk != @$arr){
+ if($arr->[$i] == 0 && (@stk+1 < @$arr)) {
+ push @stk,0 for 0..1;
+ $i++
+ } else {
+ push @stk,$arr->[$i++]
+ }
+ }
+ @stk
+}
+
+print show duplicate_zeros([1,0,2,3,0,4,5,0]);
+print show duplicate_zeros([1,2,3]);
+print show duplicate_zeros([1,2,3,0]);
+print show duplicate_zeros([0,0,1,2]);
+print show duplicate_zeros([1,2,0,3,4]);
+