aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordeadmarshal <adeadmarshal@gmail.com>2023-09-20 16:15:49 +0330
committerdeadmarshal <adeadmarshal@gmail.com>2023-09-20 16:15:49 +0330
commit8701808a4ca1e652ba6a38eb5914d1ca6341cbf1 (patch)
tree1e65a5733be4fad5f9793ba12a6c1624281bcf88
parentaee701524950403dce06a2a835452b79eacabce1 (diff)
downloadperlweeklychallenge-club-8701808a4ca1e652ba6a38eb5914d1ca6341cbf1.tar.gz
perlweeklychallenge-club-8701808a4ca1e652ba6a38eb5914d1ca6341cbf1.tar.bz2
perlweeklychallenge-club-8701808a4ca1e652ba6a38eb5914d1ca6341cbf1.zip
TWC235
-rw-r--r--challenge-235/deadmarshal/blog.txt1
-rw-r--r--challenge-235/deadmarshal/c/ch-1.c38
-rw-r--r--challenge-235/deadmarshal/c/ch-2.c45
-rw-r--r--challenge-235/deadmarshal/cpp/ch-1.cpp37
-rw-r--r--challenge-235/deadmarshal/cpp/ch-2.cpp38
-rw-r--r--challenge-235/deadmarshal/go/ch1.go37
-rw-r--r--challenge-235/deadmarshal/go/ch2.go29
-rw-r--r--challenge-235/deadmarshal/lua/ch-1.lua29
-rw-r--r--challenge-235/deadmarshal/lua/ch-2.lua21
-rw-r--r--challenge-235/deadmarshal/modula-3/ch1/src/Ch1.m331
-rw-r--r--challenge-235/deadmarshal/modula-3/ch1/src/m3makefile4
-rw-r--r--challenge-235/deadmarshal/modula-3/ch2/src/Ch2.m345
-rw-r--r--challenge-235/deadmarshal/modula-3/ch2/src/m3makefile4
-rw-r--r--challenge-235/deadmarshal/oberon/Ch1.Mod40
-rw-r--r--challenge-235/deadmarshal/oberon/Ch2.Mod57
-rw-r--r--challenge-235/deadmarshal/pascal/ch1.pas47
-rw-r--r--challenge-235/deadmarshal/pascal/ch2.pas53
-rw-r--r--challenge-235/deadmarshal/perl/ch-1.pl27
-rw-r--r--challenge-235/deadmarshal/perl/ch-2.pl18
-rw-r--r--challenge-235/deadmarshal/raku/ch-1.raku25
-rw-r--r--challenge-235/deadmarshal/raku/ch-2.raku16
-rw-r--r--challenge-235/deadmarshal/ruby/ch1.rb25
-rw-r--r--challenge-235/deadmarshal/ruby/ch2.rb15
23 files changed, 682 insertions, 0 deletions
diff --git a/challenge-235/deadmarshal/blog.txt b/challenge-235/deadmarshal/blog.txt
new file mode 100644
index 0000000000..e6de0a92ca
--- /dev/null
+++ b/challenge-235/deadmarshal/blog.txt
@@ -0,0 +1 @@
+https://deadmarshal.blogspot.com/2023/09/twc235.html
diff --git a/challenge-235/deadmarshal/c/ch-1.c b/challenge-235/deadmarshal/c/ch-1.c
new file mode 100644
index 0000000000..69d4ff4072
--- /dev/null
+++ b/challenge-235/deadmarshal/c/ch-1.c
@@ -0,0 +1,38 @@
+#include<stdio.h>
+
+int remove_one(int *arr, size_t sz)
+{
+ int c1 = 0, c2 = 0, idx1 = -1, idx2 = -1;
+ for(size_t i = 1; i < sz; ++i)
+ {
+ if(arr[i] <= arr[i-1])
+ {
+ c1++;
+ idx1 = i-1;
+ }
+ }
+ for(size_t i = sz-2; i > 0; --i)
+ {
+ if(arr[i] >= arr[i+1])
+ {
+ c2++;
+ idx2 = i+1;
+ }
+ }
+ if((c1 == 1) && (c2 == 1) && (idx2 - idx1 + 1 == 2)) return 1;
+ if((c1 > 1) || (c2 > 1)) return 0;
+ return 1;
+}
+
+int main()
+{
+ int arr1[] = {0,2,9,4,5};
+ int arr2[] = {5,1,3,2};
+ int arr3[] = {2,2,3};
+ size_t sz1 = 5, sz2 = 4, sz3 = 3;
+ printf("%d\n",remove_one(arr1,sz1));
+ printf("%d\n",remove_one(arr2,sz2));
+ printf("%d\n",remove_one(arr3,sz3));
+ return 0;
+}
+
diff --git a/challenge-235/deadmarshal/c/ch-2.c b/challenge-235/deadmarshal/c/ch-2.c
new file mode 100644
index 0000000000..e1364171da
--- /dev/null
+++ b/challenge-235/deadmarshal/c/ch-2.c
@@ -0,0 +1,45 @@
+#include<stdio.h>
+#include<stdlib.h>
+
+int *duplicate_zeros(int *arr, size_t sz)
+{
+ int *ret = malloc(sz * sizeof(*arr));
+ size_t i = 0,j = 0;
+ while(j < sz)
+ {
+ if(arr[i] == 0)
+ {
+ ret[j] = 0;
+ ret[++j] = 0;
+ ++i;
+ ++j;
+ }
+ else ret[j++] = arr[i++];
+ }
+ return ret;
+}
+
+void print_array(int *arr, size_t sz)
+{
+ for(size_t i = 0; i < sz; ++i) printf("%d ",arr[i]);
+ puts("");
+}
+
+int main()
+{
+ int arr1[] = {1,0,2,3,0,4,5,0};
+ int arr2[] = {1,2,3};
+ int arr3[] = {0,3,0,4,5};
+ size_t sz1 = 8, sz2 = 3, sz3 = 5;
+ int *ret1 = duplicate_zeros(arr1,sz1);
+ int *ret2 = duplicate_zeros(arr2,sz2);
+ int *ret3 = duplicate_zeros(arr3,sz3);
+ print_array(ret1,sz1);
+ print_array(ret2,sz2);
+ print_array(ret3,sz3);
+ free(ret1);
+ free(ret2);
+ free(ret3);
+ return 0;
+}
+
diff --git a/challenge-235/deadmarshal/cpp/ch-1.cpp b/challenge-235/deadmarshal/cpp/ch-1.cpp
new file mode 100644
index 0000000000..aeb48f9e10
--- /dev/null
+++ b/challenge-235/deadmarshal/cpp/ch-1.cpp
@@ -0,0 +1,37 @@
+#include<iostream>
+#include<vector>
+
+template<typename T>
+bool remove_one(std::vector<T> &vec)
+{
+ int c1 = 0, c2 = 0, idx1 = -1, idx2 = -1;
+ for(size_t i = 1; i < vec.size(); ++i)
+ {
+ if(vec[i] <= vec[i-1])
+ {
+ c1++;
+ idx1 = i-1;
+ }
+ }
+ for(size_t i = vec.size()-2; i > 0; --i)
+ {
+ if(vec[i] >= vec[i+1])
+ {
+ c2++;
+ idx2 = i+1;
+ }
+ }
+ if((c1 == 1) && (c2 == 1) && (idx2 - idx1 + 1 == 2)) return true;
+ if((c1 > 1) || (c2 > 1)) return false;
+ return true;
+}
+
+int main()
+{
+ std::vector<int> vec1{0,2,9,4,5},vec2{5,1,3,2},vec3{2,2,3};
+ std::cout << std::boolalpha << remove_one<int>(vec1) << '\n';
+ std::cout << std::boolalpha << remove_one<int>(vec2) << '\n';
+ std::cout << std::boolalpha << remove_one<int>(vec3) << '\n';
+ return 0;
+}
+
diff --git a/challenge-235/deadmarshal/cpp/ch-2.cpp b/challenge-235/deadmarshal/cpp/ch-2.cpp
new file mode 100644
index 0000000000..d7cc334eae
--- /dev/null
+++ b/challenge-235/deadmarshal/cpp/ch-2.cpp
@@ -0,0 +1,38 @@
+#include<iostream>
+#include<vector>
+
+template<typename T>
+std::vector<T> duplicate_zeros(std::vector<T> &vec)
+{
+ std::vector<T> ret{};
+ for(const auto& e : vec)
+ {
+ if(ret.size() == vec.size()) break;
+ if(e == 0)
+ {
+ ret.emplace_back(0);
+ ret.emplace_back(0);
+ }
+ else ret.emplace_back(e);
+ }
+ return ret;
+}
+
+template<typename T>
+std::ostream &operator<<(std::ostream &os,
+ const std::vector<T>& vec)
+{
+ for(const auto &e : vec) os << e << ' ';
+ os << "\n";
+ return os;
+}
+
+int main()
+{
+ std::vector<int> vec1{1,0,2,3,0,4,5,0},vec2{1,2,3},vec3{0,3,0,4,5};
+ std::cout << duplicate_zeros<int>(vec1);
+ std::cout << duplicate_zeros<int>(vec2);
+ std::cout << duplicate_zeros<int>(vec3);
+ return 0;
+}
+
diff --git a/challenge-235/deadmarshal/go/ch1.go b/challenge-235/deadmarshal/go/ch1.go
new file mode 100644
index 0000000000..4270a14102
--- /dev/null
+++ b/challenge-235/deadmarshal/go/ch1.go
@@ -0,0 +1,37 @@
+package main
+
+import (
+ "fmt"
+)
+
+func removeOne(arr []int) bool {
+ c1, c2, idx1, idx2 := 0, 0, -1, -1
+ for i := 1; i < len(arr); i++ {
+ if arr[i] <= arr[i-1] {
+ c1++
+ idx1 = i - 1
+ }
+ }
+ for i := len(arr) - 2; i > 0; i-- {
+ if arr[i] >= arr[i+1] {
+ c2++
+ idx2 = i + 1
+ }
+ }
+ if c1 == 1 && c2 == 1 && idx2-idx1+2 == 2 {
+ return true
+ }
+ if c1 > 1 || c2 > 1 {
+ return false
+ }
+ return true
+}
+
+func main() {
+ arr1 := []int{0, 2, 9, 4, 5}
+ arr2 := []int{5, 1, 3, 2}
+ arr3 := []int{2, 2, 3}
+ fmt.Println(removeOne(arr1))
+ fmt.Println(removeOne(arr2))
+ fmt.Println(removeOne(arr3))
+}
diff --git a/challenge-235/deadmarshal/go/ch2.go b/challenge-235/deadmarshal/go/ch2.go
new file mode 100644
index 0000000000..996f95405a
--- /dev/null
+++ b/challenge-235/deadmarshal/go/ch2.go
@@ -0,0 +1,29 @@
+package main
+
+import (
+ "fmt"
+)
+
+func duplicateZeros(arr []int) []int {
+ ret := []int{}
+ for _, v := range arr {
+ if len(arr) == len(ret) {
+ break
+ }
+ if v == 0 {
+ ret = append(ret, []int{0, 0}...)
+ } else {
+ ret = append(ret, v)
+ }
+ }
+ return ret
+}
+
+func main() {
+ arr1 := []int{1, 0, 2, 3, 0, 4, 5, 0}
+ arr2 := []int{1, 2, 3}
+ arr3 := []int{0, 3, 0, 4, 5}
+ fmt.Println(duplicateZeros(arr1))
+ fmt.Println(duplicateZeros(arr2))
+ fmt.Println(duplicateZeros(arr3))
+}
diff --git a/challenge-235/deadmarshal/lua/ch-1.lua b/challenge-235/deadmarshal/lua/ch-1.lua
new file mode 100644
index 0000000000..202fa877b4
--- /dev/null
+++ b/challenge-235/deadmarshal/lua/ch-1.lua
@@ -0,0 +1,29 @@
+#!/usr/bin/env lua
+
+local function is_ascending(t)
+ assert(type(t) == 'table','t must be a table!')
+ local c = 1
+ for i=1,#t-1 do
+ if t[i] < t[i+1] then c = c + 1 end
+ end
+ return c == #t
+end
+
+local function remove_one(t)
+ assert(type(t) == 'table','t must be a table!')
+ local res = false
+ for i=1,#t do
+ local ret = {table.unpack(table.move(t,1,i-1,1,{})),
+ table.unpack(table.move(t,i+1,#t,1,{}))}
+ if i == 1 then ret = table.move(t,2,#t,1,{})
+ elseif i == #t then ret = table.move(t,1,#t-1,1,{})
+ end
+ if is_ascending(ret) then res = true end
+ end
+ return res
+end
+
+print(remove_one{0,2,9,4,5})
+print(remove_one{5,1,3,2})
+print(remove_one{2,2,3})
+
diff --git a/challenge-235/deadmarshal/lua/ch-2.lua b/challenge-235/deadmarshal/lua/ch-2.lua
new file mode 100644
index 0000000000..bca5fbfa84
--- /dev/null
+++ b/challenge-235/deadmarshal/lua/ch-2.lua
@@ -0,0 +1,21 @@
+#!/usr/bin/env lua
+
+local function duplicate_zeros(t)
+ assert(type(t) == 'table','t must be a table!')
+ local ret = {}
+ for i=1,#t do
+ if #ret == #t then break end
+ if t[i] == 0 then
+ table.insert(ret,0)
+ table.insert(ret,0)
+ else
+ table.insert(ret,t[i])
+ end
+ end
+ return table.concat(ret,',')
+end
+
+print(duplicate_zeros({1,0,2,3,0,4,5,0}))
+print(duplicate_zeros({1,2,3}))
+print(duplicate_zeros({0,3,0,4,5}))
+
diff --git a/challenge-235/deadmarshal/modula-3/ch1/src/Ch1.m3 b/challenge-235/deadmarshal/modula-3/ch1/src/Ch1.m3
new file mode 100644
index 0000000000..b5402642b1
--- /dev/null
+++ b/challenge-235/deadmarshal/modula-3/ch1/src/Ch1.m3
@@ -0,0 +1,31 @@
+MODULE Ch1 EXPORTS Main;
+
+FROM SIO IMPORT PutBool,PutLine;
+
+VAR
+ A1:ARRAY[0..4] OF INTEGER := ARRAY OF INTEGER{0,2,9,4,5};
+ A2:ARRAY[0..3] OF INTEGER := ARRAY OF INTEGER{5,1,3,2};
+ A3:ARRAY[0..2] OF INTEGER := ARRAY OF INTEGER{2,2,3};
+
+PROCEDURE RemoveOne(VAR A:ARRAY OF INTEGER):BOOLEAN =
+ VAR
+ C1,C2:INTEGER := 0;
+ Idx1,Idx2:INTEGER := -1;
+ BEGIN
+ FOR I := 1 TO LAST(A) DO
+ IF A[I] <= A[I-1] THEN INC(C1); Idx1 := I-1 END
+ END;
+ FOR I := LAST(A)-1 TO 1 BY -1 DO
+ IF A[I] >= A[I+1] THEN INC(C2); Idx2 := I+1 END
+ END;
+ IF (C1 = 1) AND (C2 = 1) AND ((Idx2 - Idx1 + 1) = 2) THEN RETURN TRUE END;
+ IF (C1 > 1) OR (C2 > 1) THEN RETURN FALSE END;
+ RETURN TRUE
+ END RemoveOne;
+
+BEGIN
+ PutBool(RemoveOne(A1)); PutLine("");
+ PutBool(RemoveOne(A2)); PutLine("");
+ PutBool(RemoveOne(A3)); PutLine("");
+END Ch1.
+
diff --git a/challenge-235/deadmarshal/modula-3/ch1/src/m3makefile b/challenge-235/deadmarshal/modula-3/ch1/src/m3makefile
new file mode 100644
index 0000000000..19cb05acd9
--- /dev/null
+++ b/challenge-235/deadmarshal/modula-3/ch1/src/m3makefile
@@ -0,0 +1,4 @@
+import("libsio")
+implementation("Ch1")
+program("ch1")
+
diff --git a/challenge-235/deadmarshal/modula-3/ch2/src/Ch2.m3 b/challenge-235/deadmarshal/modula-3/ch2/src/Ch2.m3
new file mode 100644
index 0000000000..a9983080c4
--- /dev/null
+++ b/challenge-235/deadmarshal/modula-3/ch2/src/Ch2.m3
@@ -0,0 +1,45 @@
+MODULE Ch2 EXPORTS Main;
+
+IMPORT IO;
+
+TYPE
+ PArr = REF ARRAY OF INTEGER;
+
+VAR
+ A1:ARRAY[0..7] OF INTEGER := ARRAY OF INTEGER{1,0,2,3,0,4,5,0};
+ A2:ARRAY[0..2] OF INTEGER := ARRAY OF INTEGER{1,2,3};
+ A3:ARRAY[0..4] OF INTEGER := ARRAY OF INTEGER{0,3,0,4,5};
+ Ret1,Ret2,Ret3:PArr;
+
+PROCEDURE DuplicateZeros(VAR A:ARRAY OF INTEGER):PArr =
+ VAR
+ I,J:INTEGER := 0;
+ Ret:PArr;
+ BEGIN
+ Ret := NEW(PArr,NUMBER(A));
+ WHILE J <= LAST(A) DO
+ IF A[I] = 0 THEN
+ Ret[J] := 0; INC(J); Ret[J] := 0;
+ INC(I); INC(J);
+ ELSE
+ Ret[J] := A[I]; INC(I); INC(J);
+ END
+ END;
+ RETURN Ret
+ END DuplicateZeros;
+
+ PROCEDURE PrintArray(VAR A:ARRAY OF INTEGER) =
+ BEGIN
+ FOR I := FIRST(A) TO LAST(A) DO IO.PutInt(A[I]); IO.PutChar(' ') END;
+ IO.Put("\n");
+ END PrintArray;
+
+BEGIN
+ Ret1 := DuplicateZeros(A1);
+ Ret2 := DuplicateZeros(A2);
+ Ret3 := DuplicateZeros(A3);
+ PrintArray(Ret1^);
+ PrintArray(Ret2^);
+ PrintArray(Ret3^);
+END Ch2.
+
diff --git a/challenge-235/deadmarshal/modula-3/ch2/src/m3makefile b/challenge-235/deadmarshal/modula-3/ch2/src/m3makefile
new file mode 100644
index 0000000000..5c32bbc4bb
--- /dev/null
+++ b/challenge-235/deadmarshal/modula-3/ch2/src/m3makefile
@@ -0,0 +1,4 @@
+import("libm3")
+implementation("Ch2")
+program("ch2")
+
diff --git a/challenge-235/deadmarshal/oberon/Ch1.Mod b/challenge-235/deadmarshal/oberon/Ch1.Mod
new file mode 100644
index 0000000000..a9b8dba3da
--- /dev/null
+++ b/challenge-235/deadmarshal/oberon/Ch1.Mod
@@ -0,0 +1,40 @@
+MODULE Ch1;
+
+ IMPORT Out;
+
+ VAR
+ A1:ARRAY 5 OF LONGINT;
+ A2:ARRAY 4 OF LONGINT;
+ A3:ARRAY 3 OF LONGINT;
+
+ PROCEDURE Init;
+ BEGIN
+ A1[0] := 0; A1[1] := 2; A1[2] := 9; A1[3] := 4; A1[4] := 5;
+ A2[0] := 5; A2[1] := 1; A2[2] := 3; A2[3] := 2;
+ A3[0] := 2; A3[1] := 2; A3[2] := 3;
+ END Init;
+
+ PROCEDURE RemoveOne(VAR arr:ARRAY OF LONGINT):LONGINT;
+ VAR
+ i,c1,c2,idx1,idx2:LONGINT;
+ BEGIN
+ c1 := 0; c2 := 0;
+ idx1 := -1; idx2 := -1;
+ FOR i := 1 TO LEN(arr)-1 DO
+ IF arr[i] <= arr[i-1] THEN INC(c1); idx1 := i-1 END
+ END;
+ FOR i := LEN(arr)-2 TO 1 BY -1 DO
+ IF arr[i] >= arr[i+1] THEN INC(c2); idx2 := i+1 END
+ END;
+ IF (c1 = 1) & (c2 = 1) & ((idx2 - idx1 + 1) = 2) THEN RETURN 1 END;
+ IF (c1 > 1) OR (c2 > 1) THEN RETURN 0 END;
+ RETURN 1
+ END RemoveOne;
+
+BEGIN
+ Init;
+ Out.Int(RemoveOne(A1),0); Out.Ln;
+ Out.Int(RemoveOne(A2),0); Out.Ln;
+ Out.Int(RemoveOne(A3),0); Out.Ln;
+END Ch1.
+
diff --git a/challenge-235/deadmarshal/oberon/Ch2.Mod b/challenge-235/deadmarshal/oberon/Ch2.Mod
new file mode 100644
index 0000000000..13df19051b
--- /dev/null
+++ b/challenge-235/deadmarshal/oberon/Ch2.Mod
@@ -0,0 +1,57 @@
+MODULE Ch2;
+
+ IMPORT Out;
+
+ TYPE
+ PArr = POINTER TO ARRAY OF LONGINT;
+
+ VAR
+ A1:ARRAY 8 OF LONGINT;
+ A2:ARRAY 3 OF LONGINT;
+ A3:ARRAY 5 OF LONGINT;
+ ret1,ret2,ret3:PArr;
+
+ PROCEDURE Init;
+ BEGIN
+ A1[0] := 1; A1[1] := 0; A1[2] := 2; A1[3] := 3;
+ A1[4] := 0; A1[5] := 4; A1[6] := 5; A1[7] := 0;
+ A2[0] := 1; A2[1] := 2; A2[2] := 3;
+ A3[0] := 0; A3[1] := 3; A3[2] := 0;
+ A3[3] := 4; A3[4] := 5;
+ END Init;
+
+ PROCEDURE DuplicateZeros(VAR arr:ARRAY OF LONGINT):PArr;
+ VAR
+ ret:PArr;
+ i,j:LONGINT;
+ BEGIN
+ NEW(ret,LEN(arr));
+ i := 0; j := 0;
+ WHILE j <= LEN(arr)-1 DO
+ IF arr[i] = 0 THEN
+ ret[j] := 0; INC(j); ret[j] := 0;
+ INC(i); INC(j);
+ ELSE
+ ret[j] := arr[i]; INC(i); INC(j);
+ END
+ END;
+ RETURN ret
+ END DuplicateZeros;
+
+ PROCEDURE PrintArray(VAR arr:ARRAY OF LONGINT);
+ VAR i:LONGINT;
+ BEGIN
+ FOR i := 0 TO LEN(arr)-1 DO Out.Int(arr[i],0); Out.Char(' ') END;
+ Out.Ln
+ END PrintArray;
+
+BEGIN
+ Init;
+ ret1 := DuplicateZeros(A1);
+ ret2 := DuplicateZeros(A2);
+ ret3 := DuplicateZeros(A3);
+ PrintArray(ret1^);
+ PrintArray(ret2^);
+ PrintArray(ret3^);
+END Ch2.
+
diff --git a/challenge-235/deadmarshal/pascal/ch1.pas b/challenge-235/deadmarshal/pascal/ch1.pas
new file mode 100644
index 0000000000..f558bf6d5a
--- /dev/null
+++ b/challenge-235/deadmarshal/pascal/ch1.pas
@@ -0,0 +1,47 @@
+program Ch1;
+
+{$mode objfpc}
+uses
+ SysUtils,Types;
+
+var
+ A1,A2,A3:TIntegerDynArray;
+
+function RemoveOne(var Arr:TIntegerDynArray):Boolean;
+var
+ I,C1,C2,Idx1,Idx2:Integer;
+begin
+ C1 := 0; C2 := 0;
+ Idx1 := -1; Idx2 := -1;
+ for I := 1 to High(Arr) do
+ begin
+ if Arr[I] <= Arr[I-1] then
+ begin
+ Inc(C1);
+ Idx1 := I-1;
+ end;
+ end;
+ I := High(Arr)-1;
+ while I > 0 do
+ begin
+ if Arr[I] >= Arr[I+1] then
+ begin
+ Inc(C2);
+ Idx2 := I+1;
+ end;
+ Dec(I);
+ end;
+ if (C1 = 1) and (C2 = 1) and ((Idx2 - Idx1 + 1) = 2) then Exit(True);
+ if (C1 > 1) or (c2 > 1) then Exit(False);
+ Exit(True);
+end;
+
+begin
+ A1 := [0,2,9,4,5];
+ A2 := [5,1,3,2];
+ A3 := [2,2,3];
+ WriteLn(RemoveOne(A1));
+ WriteLn(RemoveOne(A2));
+ WriteLn(RemoveOne(A3));
+end.
+
diff --git a/challenge-235/deadmarshal/pascal/ch2.pas b/challenge-235/deadmarshal/pascal/ch2.pas
new file mode 100644
index 0000000000..7196dfd07e
--- /dev/null
+++ b/challenge-235/deadmarshal/pascal/ch2.pas
@@ -0,0 +1,53 @@
+program Ch2;
+
+{$mode objfpc}
+uses
+ SysUtils,Types;
+
+var
+ A1,A2,A3,Ret1,Ret2,Ret3:TIntegerDynArray;
+
+function DuplicateZeros(var Arr:TIntegerDynArray):TIntegerDynArray;
+var
+ I,J:Integer;
+begin
+ SetLength(Result,Length(Arr));
+ I := 0; J := 0;
+ while J <= High(Arr) do
+ begin
+ if Arr[I] = 0 then
+ begin
+ Result[J] := 0;
+ Inc(J);
+ Result[J] := 0;
+ Inc(I);
+ Inc(J);
+ end
+ else
+ begin
+ Result[J] := Arr[I];
+ Inc(I);
+ Inc(J);
+ end;
+ end;
+end;
+
+procedure PrintArray(var Arr:TIntegerDynArray);
+var I:Integer;
+begin
+ for I := Low(Arr) to High(Arr) do Write(Arr[I], ' ');
+ WriteLn;
+end;
+
+begin
+ A1 := [1,0,2,3,0,4,5,0];
+ A2 := [1,2,3];
+ A3 := [0,3,0,4,5];
+ Ret1 := DuplicateZeros(A1);
+ Ret2 := DuplicateZeros(A2);
+ Ret3 := DuplicateZeros(A3);
+ PrintArray(Ret1);
+ PrintArray(Ret2);
+ PrintArray(Ret3);
+end.
+
diff --git a/challenge-235/deadmarshal/perl/ch-1.pl b/challenge-235/deadmarshal/perl/ch-1.pl
new file mode 100644
index 0000000000..bec0cffb9f
--- /dev/null
+++ b/challenge-235/deadmarshal/perl/ch-1.pl
@@ -0,0 +1,27 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+sub is_ascending{
+ my ($arr) = @_;
+ my $cursor = 0;
+ map{$cursor++ if $arr->[$_] < $arr->[$_+1]} 0..$#$arr-1;
+ $cursor == $#$arr
+}
+
+sub remove_one{
+ my @arr = @{$_[0]};
+ my $res = 0;
+ foreach my $i(0..$#arr){
+ my @ret = @arr[0..$i-1,$i+1..$#arr];
+ if($i == 0){@ret = @arr[1..$#arr]}
+ elsif($i == $#arr){@ret = @arr[0..$#arr-1]}
+ do{$res = 1; last} if is_ascending(\@ret);
+ }
+ $res
+}
+
+printf "%d\n",remove_one([0,2,9,4,5]);
+printf "%d\n",remove_one([5,1,3,2]);
+printf "%d\n",remove_one([2,2,3]);
+
diff --git a/challenge-235/deadmarshal/perl/ch-2.pl b/challenge-235/deadmarshal/perl/ch-2.pl
new file mode 100644
index 0000000000..868fb64f2b
--- /dev/null
+++ b/challenge-235/deadmarshal/perl/ch-2.pl
@@ -0,0 +1,18 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+sub duplicate_zeros{
+ my ($arr) = @_;
+ my @ret;
+ foreach(@$arr){
+ last if @ret == @$arr;
+ $_ == 0 ? splice @ret,@ret,0,(0,0) : push @ret,$_;
+ }
+ @ret
+}
+
+printf "(%s)\n", join ',',duplicate_zeros([1,0,2,3,0,4,5,0]);
+printf "(%s)\n", join ',',duplicate_zeros([1,2,3]);
+printf "(%s)\n", join ',',duplicate_zeros([0,3,0,4,5]);
+
diff --git a/challenge-235/deadmarshal/raku/ch-1.raku b/challenge-235/deadmarshal/raku/ch-1.raku
new file mode 100644
index 0000000000..d0d1622e53
--- /dev/null
+++ b/challenge-235/deadmarshal/raku/ch-1.raku
@@ -0,0 +1,25 @@
+#!/usr/bin/env raku
+
+sub is-ascending(@arr)
+{
+ my $cursor = 0;
+ (0..^@arr.end).map({$cursor++ if @arr[$_] < @arr[$_+1]});
+ $cursor == @arr.end;
+}
+
+sub remove-one(@arr)
+{
+ my $res = False;
+ for 0..@arr.end -> $i {
+ my @ret = @arr[0..^$i,$i+1..@arr.end].flat;
+ if ($i == 0) {@ret = @arr[1..@arr.end]}
+ elsif ($i == @arr.end) {@ret = @arr[0..^@arr.end]}
+ $res = True if is-ascending(@ret);
+ }
+ $res
+}
+
+say remove-one([0,2,9,4,5]);
+say remove-one([5,1,3,2]);
+say remove-one([2,2,3]);
+
diff --git a/challenge-235/deadmarshal/raku/ch-2.raku b/challenge-235/deadmarshal/raku/ch-2.raku
new file mode 100644
index 0000000000..4eea4b4dfd
--- /dev/null
+++ b/challenge-235/deadmarshal/raku/ch-2.raku
@@ -0,0 +1,16 @@
+#!/usr/bin/env raku
+
+sub duplicate-zeros(@arr)
+{
+ my @ret;
+ for @arr {
+ last if @ret.elems == @arr.elems;
+ $_ == 0 ?? @ret.splice: @ret.elems,0,0,0 !! @ret.push: $_;
+ }
+ @ret
+}
+
+say duplicate-zeros([1,0,2,3,0,4,5,0]);
+say duplicate-zeros([1,2,3]);
+say duplicate-zeros([0,3,0,4,5]);
+
diff --git a/challenge-235/deadmarshal/ruby/ch1.rb b/challenge-235/deadmarshal/ruby/ch1.rb
new file mode 100644
index 0000000000..0fa090b488
--- /dev/null
+++ b/challenge-235/deadmarshal/ruby/ch1.rb
@@ -0,0 +1,25 @@
+#!/usr/bin/env ruby
+
+def remove_one(arr)
+ c1,c2,idx1,idx2 = 0,0,-1,-1
+ (1..arr.length()-1).each do |i|
+ if arr[i] <= arr[i-1]
+ c1 += 1
+ idx1 = i-1
+ end
+ end
+ (1..arr.length()-2).to_a.reverse.each do |i|
+ if arr[i] <= arr[i-1]
+ c2 += 1
+ idx1 = i+1
+ end
+ end
+ return true if c1 == 1 && c2 == 1 && idx2 - idx1 + 1 == 2
+ return false if c1 > 1 || c2 > 1
+ return true
+end
+
+p remove_one([0,2,9,4,5])
+p remove_one([5,1,3,2])
+p remove_one([2,2,3])
+
diff --git a/challenge-235/deadmarshal/ruby/ch2.rb b/challenge-235/deadmarshal/ruby/ch2.rb
new file mode 100644
index 0000000000..6d067b5a89
--- /dev/null
+++ b/challenge-235/deadmarshal/ruby/ch2.rb
@@ -0,0 +1,15 @@
+#!/usr/bin/env ruby
+
+def duplicate_zeros(arr)
+ ret = []
+ for e in arr
+ break if ret.length() == arr.length()
+ e == 0 ? ret.push(0,0) : ret.push(e)
+ end
+ ret
+end
+
+p duplicate_zeros([1,0,2,3,0,4,5,0])
+p duplicate_zeros([1,2,3])
+p duplicate_zeros([0,3,0,4,5])
+