aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordeadmarshal <adeadmarshal@gmail.com>2022-12-28 10:47:13 +0330
committerdeadmarshal <adeadmarshal@gmail.com>2022-12-28 10:47:13 +0330
commit977802cd25bb919bbc0bad828d014a68fc7bab17 (patch)
treef997db1a859bf124b7ab22248a0c4a4974d610a7
parent9720dd7a3a5d6c22d6cc034c363d1d09e309e745 (diff)
downloadperlweeklychallenge-club-977802cd25bb919bbc0bad828d014a68fc7bab17.tar.gz
perlweeklychallenge-club-977802cd25bb919bbc0bad828d014a68fc7bab17.tar.bz2
perlweeklychallenge-club-977802cd25bb919bbc0bad828d014a68fc7bab17.zip
TWC197
-rw-r--r--challenge-197/deadmarshal/d/ch1.d23
-rw-r--r--challenge-197/deadmarshal/d/ch2.d19
-rw-r--r--challenge-197/deadmarshal/lua/ch-1.lua16
-rw-r--r--challenge-197/deadmarshal/lua/ch-2.lua14
-rw-r--r--challenge-197/deadmarshal/modula-3/ch1/src/Ch1.m335
-rw-r--r--challenge-197/deadmarshal/modula-3/ch1/src/m3makefile3
-rw-r--r--challenge-197/deadmarshal/modula-3/ch2/src/Ch2.m337
-rw-r--r--challenge-197/deadmarshal/modula-3/ch2/src/m3makefile3
-rw-r--r--challenge-197/deadmarshal/nim/ch1.nim18
-rw-r--r--challenge-197/deadmarshal/nim/ch2.nim13
-rw-r--r--challenge-197/deadmarshal/oberon/Ch1.Mod48
-rw-r--r--challenge-197/deadmarshal/oberon/Ch2.Mod48
-rw-r--r--challenge-197/deadmarshal/pascal/ch1.pas33
-rw-r--r--challenge-197/deadmarshal/pascal/ch2.pas38
-rw-r--r--challenge-197/deadmarshal/perl/ch-1.pl15
-rw-r--r--challenge-197/deadmarshal/perl/ch-2.pl18
-rw-r--r--challenge-197/deadmarshal/raku/ch-1.raku12
-rw-r--r--challenge-197/deadmarshal/raku/ch-2.raku15
18 files changed, 408 insertions, 0 deletions
diff --git a/challenge-197/deadmarshal/d/ch1.d b/challenge-197/deadmarshal/d/ch1.d
new file mode 100644
index 0000000000..df659a5f1b
--- /dev/null
+++ b/challenge-197/deadmarshal/d/ch1.d
@@ -0,0 +1,23 @@
+import std.stdio:writeln;
+
+void move_zero(int[] arr)
+{
+ int count = 0;
+ for(int i = 0; i < arr.length; ++i)
+ if(arr[i] != 0) arr[count++] = arr[i];
+ while(count < arr.length) arr[count++] = 0;
+}
+
+void main()
+{
+ int[] a1 = [1,0,3,0,0,5];
+ int[] a2 = [1,6,4];
+ int[] a3 = [0,1,0,2,0];
+ move_zero(a1);
+ move_zero(a2);
+ move_zero(a3);
+ writeln(a1);
+ writeln(a2);
+ writeln(a3);
+}
+
diff --git a/challenge-197/deadmarshal/d/ch2.d b/challenge-197/deadmarshal/d/ch2.d
new file mode 100644
index 0000000000..455c2b06b0
--- /dev/null
+++ b/challenge-197/deadmarshal/d/ch2.d
@@ -0,0 +1,19 @@
+import std.stdio:writeln;
+import std.algorithm:swap;
+
+void wiggle_sort(int[] arr)
+{
+ for(int i = 0; i < arr.length-1; ++i)
+ if((i % 2 == 0) == (arr[i] > arr[i+1])) swap(arr[i],arr[i+1]);
+}
+
+void main()
+{
+ int[] a1 = [1,5,1,1,6,4];
+ int[] a2 = [1,3,2,2,3,1];
+ wiggle_sort(a1);
+ wiggle_sort(a2);
+ writeln(a1);
+ writeln(a2);
+}
+
diff --git a/challenge-197/deadmarshal/lua/ch-1.lua b/challenge-197/deadmarshal/lua/ch-1.lua
new file mode 100644
index 0000000000..2fbf3434ff
--- /dev/null
+++ b/challenge-197/deadmarshal/lua/ch-1.lua
@@ -0,0 +1,16 @@
+local function move_zero(t)
+ local ret,count = {},0
+ for i=1,#t do
+ if t[i] ~= 0 then ret[#ret+1] = t[i]
+ else count = count + 1 end
+ end
+ for i=1,count do
+ ret[#ret+1] = 0
+ end
+ return ret
+end
+
+print(table.concat(move_zero({1,0,3,0,0,5}),' '))
+print(table.concat(move_zero({1,6,4}),' '))
+print(table.concat(move_zero({0,1,0,2,0}),' '))
+
diff --git a/challenge-197/deadmarshal/lua/ch-2.lua b/challenge-197/deadmarshal/lua/ch-2.lua
new file mode 100644
index 0000000000..252eb43d07
--- /dev/null
+++ b/challenge-197/deadmarshal/lua/ch-2.lua
@@ -0,0 +1,14 @@
+local function wiggle_sort(t)
+ for i=1, #t-1 do
+ if (i % 2 ~= 0) == (t[i] > t[i+1]) then
+ t[i],t[i+1] = t[i+1],t[i]
+ end
+ end
+end
+
+local t1,t2 = {1,5,1,1,6,4},{1,3,2,2,3,1}
+wiggle_sort(t1)
+wiggle_sort(t2)
+print(table.concat(t1,' '))
+print(table.concat(t2,' '))
+
diff --git a/challenge-197/deadmarshal/modula-3/ch1/src/Ch1.m3 b/challenge-197/deadmarshal/modula-3/ch1/src/Ch1.m3
new file mode 100644
index 0000000000..742f0d18b9
--- /dev/null
+++ b/challenge-197/deadmarshal/modula-3/ch1/src/Ch1.m3
@@ -0,0 +1,35 @@
+MODULE Ch1 EXPORTS Main;
+
+IMPORT IO;
+
+VAR
+ A1:ARRAY[0..5] OF INTEGER := ARRAY OF INTEGER{1,0,3,0,0,5};
+ A2:ARRAY[0..2] OF INTEGER := ARRAY OF INTEGER{1,6,4};
+ A3:ARRAY[0..4] OF INTEGER := ARRAY OF INTEGER{0,1,0,2,0};
+
+PROCEDURE PrintArray(VAR Arr:ARRAY OF INTEGER) =
+ BEGIN
+ FOR I := FIRST(Arr) TO LAST(Arr) DO
+ IO.PutInt(Arr[I]); IO.PutChar(' ');
+ END;
+ IO.Put("\n");
+ END PrintArray;
+
+PROCEDURE MoveZeros(VAR Arr:ARRAY OF INTEGER) =
+ VAR Count:INTEGER := 0;
+ BEGIN
+ FOR I := FIRST(Arr) TO LAST(Arr) DO
+ IF Arr[I] # 0 THEN Arr[Count] := Arr[I]; INC(Count) END;
+ END;
+ WHILE Count < NUMBER(Arr) DO Arr[Count] := 0; INC(Count) END;
+ END MoveZeros;
+
+BEGIN
+ MoveZeros(A1);
+ MoveZeros(A2);
+ MoveZeros(A3);
+ PrintArray(A1);
+ PrintArray(A2);
+ PrintArray(A3);
+END Ch1.
+
diff --git a/challenge-197/deadmarshal/modula-3/ch1/src/m3makefile b/challenge-197/deadmarshal/modula-3/ch1/src/m3makefile
new file mode 100644
index 0000000000..8a6bc1e4f8
--- /dev/null
+++ b/challenge-197/deadmarshal/modula-3/ch1/src/m3makefile
@@ -0,0 +1,3 @@
+import("libm3")
+implementation("Ch1")
+program("ch1")
diff --git a/challenge-197/deadmarshal/modula-3/ch2/src/Ch2.m3 b/challenge-197/deadmarshal/modula-3/ch2/src/Ch2.m3
new file mode 100644
index 0000000000..3e6c775055
--- /dev/null
+++ b/challenge-197/deadmarshal/modula-3/ch2/src/Ch2.m3
@@ -0,0 +1,37 @@
+MODULE Ch2 EXPORTS Main;
+
+IMPORT IO;
+
+VAR
+ A1:ARRAY[0..5] OF INTEGER := ARRAY OF INTEGER{1,5,1,1,6,4};
+ A2:ARRAY[0..5] OF INTEGER := ARRAY OF INTEGER{1,3,2,2,3,1};
+
+PROCEDURE Swap(VAR A,B:INTEGER) =
+ VAR Temp:INTEGER := A;
+ BEGIN
+ A := B;
+ B := Temp;
+ END Swap;
+
+PROCEDURE PrintArray(VAR Arr:ARRAY OF INTEGER) =
+ BEGIN
+ FOR I := FIRST(Arr) TO LAST(Arr) DO
+ IO.PutInt(Arr[I]); IO.PutChar(' ');
+ END;
+ IO.Put("\n");
+ END PrintArray;
+
+PROCEDURE WiggleSort(VAR Arr:ARRAY OF INTEGER) =
+ BEGIN
+ FOR I := FIRST(Arr) TO LAST(Arr)-1 DO
+ IF((I MOD 2 = 0) = (Arr[I] > Arr[I+1])) THEN Swap(Arr[I],Arr[I+1]); END;
+ END;
+ END WiggleSort;
+
+BEGIN
+ WiggleSort(A1);
+ WiggleSort(A2);
+ PrintArray(A1);
+ PrintArray(A2);
+END Ch2.
+
diff --git a/challenge-197/deadmarshal/modula-3/ch2/src/m3makefile b/challenge-197/deadmarshal/modula-3/ch2/src/m3makefile
new file mode 100644
index 0000000000..4bfbb7373d
--- /dev/null
+++ b/challenge-197/deadmarshal/modula-3/ch2/src/m3makefile
@@ -0,0 +1,3 @@
+import("libm3")
+implementation("Ch2")
+program("ch2")
diff --git a/challenge-197/deadmarshal/nim/ch1.nim b/challenge-197/deadmarshal/nim/ch1.nim
new file mode 100644
index 0000000000..632b87f012
--- /dev/null
+++ b/challenge-197/deadmarshal/nim/ch1.nim
@@ -0,0 +1,18 @@
+import std/[sequtils]
+
+proc moveZero(s:var seq[int]):seq[int] =
+ var count:int
+ for e in s:
+ if e == 0: count += 1
+ else: result.add(e)
+ result.add(repeat(0,count))
+
+var
+ s1:seq[int] = @[1,0,3,0,0,5]
+ s2:seq[int] = @[1,6,4]
+ s3:seq[int] = @[0,1,0,2,0]
+
+echo moveZero(s1)
+echo moveZero(s2)
+echo moveZero(s3)
+
diff --git a/challenge-197/deadmarshal/nim/ch2.nim b/challenge-197/deadmarshal/nim/ch2.nim
new file mode 100644
index 0000000000..67871a1c38
--- /dev/null
+++ b/challenge-197/deadmarshal/nim/ch2.nim
@@ -0,0 +1,13 @@
+proc wiggleSort(s:var seq[int]) =
+ for i in 0..s.len-2:
+ if (i mod 2 == 0) == (s[i] > s[i+1]): swap(s[i], s[i+1])
+
+var
+ s1:seq[int] = @[1,5,1,1,6,4]
+ s2:seq[int] = @[1,3,2,2,3,1]
+
+wiggleSort(s1)
+wiggleSort(s2)
+echo s1
+echo s2
+
diff --git a/challenge-197/deadmarshal/oberon/Ch1.Mod b/challenge-197/deadmarshal/oberon/Ch1.Mod
new file mode 100644
index 0000000000..2011a74d07
--- /dev/null
+++ b/challenge-197/deadmarshal/oberon/Ch1.Mod
@@ -0,0 +1,48 @@
+MODULE Ch1;
+
+ IMPORT Out;
+
+ VAR
+ A1:ARRAY 6 OF INTEGER;
+ A2:ARRAY 3 OF INTEGER;
+ A3:ARRAY 5 OF INTEGER;
+
+ PROCEDURE Init;
+ BEGIN
+ A1[0] := 1; A1[1] := 0; A1[2] := 3;
+ A1[3] := 0; A1[4] := 0; A1[5] := 5;
+ A2[0] := 1; A2[1] := 6; A2[2] := 4;
+ A3[0] := 0; A3[1] := 1; A3[2] := 0;
+ A3[3] := 2; A3[4] := 0;
+ END Init;
+
+ PROCEDURE PrintArray(VAR Arr:ARRAY OF INTEGER);
+ VAR I:LONGINT;
+ BEGIN
+ FOR I := 0 TO LEN(Arr)-1 DO
+ Out.Int(Arr[I],0);
+ Out.Char(' ');
+ END;
+ Out.Ln;
+ END PrintArray;
+
+ PROCEDURE MoveZero(VAR Arr:ARRAY OF INTEGER);
+ VAR I,Count:LONGINT;
+ BEGIN
+ Count := 0;
+ FOR I := 0 TO LEN(Arr)-1 DO
+ IF Arr[I] # 0 THEN Arr[Count] := Arr[I]; INC(Count) END;
+ END;
+ WHILE Count < LEN(Arr) DO Arr[Count] := 0; INC(Count) END;
+ END MoveZero;
+
+BEGIN
+ Init;
+ MoveZero(A1);
+ MoveZero(A2);
+ MoveZero(A3);
+ PrintArray(A1);
+ PrintArray(A2);
+ PrintArray(A3);
+END Ch1.
+
diff --git a/challenge-197/deadmarshal/oberon/Ch2.Mod b/challenge-197/deadmarshal/oberon/Ch2.Mod
new file mode 100644
index 0000000000..bb214a0ab2
--- /dev/null
+++ b/challenge-197/deadmarshal/oberon/Ch2.Mod
@@ -0,0 +1,48 @@
+MODULE Ch2;
+
+ IMPORT Out;
+
+ VAR
+ I:LONGINT;
+ A1,A2,A3:ARRAY 6 OF INTEGER;
+
+ PROCEDURE Swap(VAR A,B:INTEGER);
+ VAR Temp:INTEGER;
+ BEGIN
+ Temp := A;
+ A := B;
+ B := Temp;
+ END Swap;
+
+ PROCEDURE Init;
+ BEGIN
+ A1[0] := 1; A1[1] := 5; A1[2] := 1; A1[3] := 1; A1[4] := 6; A1[5] := 4;
+ A2[0] := 1; A2[1] := 3; A2[2] := 2; A2[3] := 2; A2[4] := 3; A2[5] := 1;
+ END Init;
+
+ PROCEDURE WiggleSort(VAR Arr:ARRAY OF INTEGER);
+ VAR I:LONGINT;
+ BEGIN
+ FOR I := 0 TO LEN(Arr)-2 DO
+ IF(~(ODD(I)) = (Arr[I] > Arr[I+1])) THEN
+ Swap(Arr[I],Arr[I+1]);
+ END;
+ END;
+ END WiggleSort;
+
+BEGIN
+ Init;
+ WiggleSort(A1);
+ WiggleSort(A2);
+ FOR I := 0 TO LEN(A1)-1 DO
+ Out.Int(A1[I],0);
+ Out.Char(' ');
+ END;
+ Out.Ln;
+ FOR I := 0 TO LEN(A2)-1 DO
+ Out.Int(A2[I],0);
+ Out.Char(' ');
+ END;
+ Out.Ln;
+END Ch2.
+
diff --git a/challenge-197/deadmarshal/pascal/ch1.pas b/challenge-197/deadmarshal/pascal/ch1.pas
new file mode 100644
index 0000000000..f9187929d9
--- /dev/null
+++ b/challenge-197/deadmarshal/pascal/ch1.pas
@@ -0,0 +1,33 @@
+program Ch1;
+
+{$mode objfpc}
+
+uses
+ SysUtils,Types;
+
+var
+ I:Integer;
+ A1,A2,A3:TIntegerDynArray;
+
+procedure MoveZero(var Arr:TIntegerDynArray);
+var
+ I,Count:Integer;
+begin
+ Count := 0;
+ for I := Low(Arr) to High(Arr) do
+ if Arr[I] <> 0 then begin Arr[Count] := Arr[I]; Inc(Count) end;
+ while Count <= High(Arr) do begin Arr[Count] := 0; Inc(Count) end;
+end;
+
+begin
+ A1 := [1,0,3,0,0,5];
+ A2 := [1,6,4];
+ A3 := [0,1,0,2,0];
+ MoveZero(A1);
+ MoveZero(A2);
+ MoveZero(A3);
+ for I := Low(A1) to High(A1) do Write(A1[I], ' '); WriteLn;
+ for I := Low(A2) to High(A2) do Write(A2[I], ' '); WriteLn;
+ for I := Low(A3) to High(A3) do Write(A3[I], ' '); WriteLn;
+end.
+
diff --git a/challenge-197/deadmarshal/pascal/ch2.pas b/challenge-197/deadmarshal/pascal/ch2.pas
new file mode 100644
index 0000000000..b56c4dfae4
--- /dev/null
+++ b/challenge-197/deadmarshal/pascal/ch2.pas
@@ -0,0 +1,38 @@
+program Ch2;
+
+{$mode objfpc}
+
+uses
+ SysUtils,Types;
+
+var
+ I:Integer;
+ A1,A2:TIntegerDynArray;
+
+procedure SwapInts(var A,B:Integer);
+var
+ Temp:Integer;
+begin
+ Temp := A;
+ A := B;
+ B := Temp;
+end;
+
+procedure WiggleSort(var Arr:TIntegerDynArray);
+var
+ I:Integer;
+begin
+ for I := Low(Arr) to High(Arr)-1 do
+ if((not Odd(I)) = (Arr[I] > Arr[I+1])) then
+ SwapInts(Arr[I],Arr[I+1]);
+end;
+
+begin
+ A1 := [1,5,1,1,6,4];
+ A2 := [1,3,2,2,3,1];
+ WiggleSort(A1);
+ WiggleSort(A2);
+ for I := Low(A1) to High(A1) do Write(A1[I], ' '); WriteLn;
+ for I := Low(A2) to High(A2) do Write(A2[I], ' '); WriteLn;
+end.
+
diff --git a/challenge-197/deadmarshal/perl/ch-1.pl b/challenge-197/deadmarshal/perl/ch-1.pl
new file mode 100644
index 0000000000..1ff8f201c2
--- /dev/null
+++ b/challenge-197/deadmarshal/perl/ch-1.pl
@@ -0,0 +1,15 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+sub move_zero{
+ my $count = 0;
+ my @ret = grep {$_ == 0 ? $count++ && () : $_} @{$_[0]};
+ push @ret, (0) x $count;
+ sprintf "(%s)\n" => join ',' => @ret;
+}
+
+print move_zero([1,0,3,0,0,5]);
+print move_zero([1,6,4]);
+print move_zero([0,1,0,2,0]);
+
diff --git a/challenge-197/deadmarshal/perl/ch-2.pl b/challenge-197/deadmarshal/perl/ch-2.pl
new file mode 100644
index 0000000000..dfd14539d3
--- /dev/null
+++ b/challenge-197/deadmarshal/perl/ch-2.pl
@@ -0,0 +1,18 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Data::Show;
+
+sub wiggle_sort{
+ my ($A) = @_;
+ for(my $i = 0; $i < @$A-2; ++$i){
+ if(($i % 2 == 0) == ($A->[$i] > $A->[$i+1])){
+ ($A->[$i],$A->[$i+1]) = ($A->[$i+1],$A->[$i]);
+ }
+ }
+ sprintf "(%s)\n" => join ',' => @$A;
+}
+
+print wiggle_sort([1,5,1,1,6,4]);
+print wiggle_sort([1,3,2,2,3,1]);
+
diff --git a/challenge-197/deadmarshal/raku/ch-1.raku b/challenge-197/deadmarshal/raku/ch-1.raku
new file mode 100644
index 0000000000..9b41319119
--- /dev/null
+++ b/challenge-197/deadmarshal/raku/ch-1.raku
@@ -0,0 +1,12 @@
+sub move-zero(@arr)
+{
+ return @arr unless @arr.none != 0;
+ my $count = 0;
+ my @ret = @arr.grep({$_ == 0 ?? $count++ && () !! $_});
+ @ret.push: 0 xx $count;
+}
+
+say move-zero([1,0,3,0,0,5]).join(' ');
+say move-zero([1,6,4]).join(' ');
+say move-zero([0,1,0,2,0]).join(' ');
+
diff --git a/challenge-197/deadmarshal/raku/ch-2.raku b/challenge-197/deadmarshal/raku/ch-2.raku
new file mode 100644
index 0000000000..df8c2d6ab8
--- /dev/null
+++ b/challenge-197/deadmarshal/raku/ch-2.raku
@@ -0,0 +1,15 @@
+sub wiggle-sort(@A)
+{
+ for 0..@A.elems-2 -> $i
+ {
+ if ($i %% 2) == (@A[$i] > @A[$i+1])
+ {
+ (@A[$i],@A[$i+1]) = (@A[$i+1],@A[$i]);
+ }
+ }
+ @A;
+}
+
+say wiggle-sort([1,5,1,1,6,4]);
+say wiggle-sort([1,3,2,2,3,1]);
+