diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2025-08-04 23:38:41 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-04 23:38:41 +0100 |
| commit | e7b7e4d53ed43950effa2822f420dbf4eeb726f8 (patch) | |
| tree | 2831e9f0f0072a3f245532b18466df5ce712c98e | |
| parent | 741cefe18001f6fed70297862bfe9535db2bd7c1 (diff) | |
| parent | b830fb716a3819d5494d850f4fbec45ac3c49ddf (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-333/deadmarshal/go/ch1.go | 27 | ||||
| -rw-r--r-- | challenge-333/deadmarshal/go/ch2.go | 47 | ||||
| -rw-r--r-- | challenge-333/deadmarshal/java/Ch1.java | 19 | ||||
| -rw-r--r-- | challenge-333/deadmarshal/java/Ch2.java | 36 | ||||
| -rw-r--r-- | challenge-333/deadmarshal/modula-3/Ch1/src/Ch1.m3 | 53 | ||||
| -rw-r--r-- | challenge-333/deadmarshal/modula-3/Ch1/src/m3makefile | 4 | ||||
| -rw-r--r-- | challenge-333/deadmarshal/modula-3/Ch2/src/Ch2.m3 | 57 | ||||
| -rw-r--r-- | challenge-333/deadmarshal/modula-3/Ch2/src/m3makefile | 4 | ||||
| -rw-r--r-- | challenge-333/deadmarshal/perl/ch-1.pl | 22 | ||||
| -rw-r--r-- | challenge-333/deadmarshal/perl/ch-2.pl | 25 |
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]); + |
