diff options
| author | deadmarshal <adeadmarshal@gmail.com> | 2023-09-20 16:15:49 +0330 |
|---|---|---|
| committer | deadmarshal <adeadmarshal@gmail.com> | 2023-09-20 16:15:49 +0330 |
| commit | 8701808a4ca1e652ba6a38eb5914d1ca6341cbf1 (patch) | |
| tree | 1e65a5733be4fad5f9793ba12a6c1624281bcf88 | |
| parent | aee701524950403dce06a2a835452b79eacabce1 (diff) | |
| download | perlweeklychallenge-club-8701808a4ca1e652ba6a38eb5914d1ca6341cbf1.tar.gz perlweeklychallenge-club-8701808a4ca1e652ba6a38eb5914d1ca6341cbf1.tar.bz2 perlweeklychallenge-club-8701808a4ca1e652ba6a38eb5914d1ca6341cbf1.zip | |
TWC235
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]) + |
