aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordeadmarshal <adeadmarshal@gmail.com>2022-11-20 10:46:28 +0330
committerdeadmarshal <adeadmarshal@gmail.com>2022-11-20 10:46:28 +0330
commit4a6109910c67852630b4d5b50d2a1bf465cfbeaa (patch)
tree6e42048916f594d7761bf110717780a31e556b05
parentbde0adaf7b8dfe99c4e494c932d8702eb8cf9a56 (diff)
downloadperlweeklychallenge-club-4a6109910c67852630b4d5b50d2a1bf465cfbeaa.tar.gz
perlweeklychallenge-club-4a6109910c67852630b4d5b50d2a1bf465cfbeaa.tar.bz2
perlweeklychallenge-club-4a6109910c67852630b4d5b50d2a1bf465cfbeaa.zip
Challenge191
-rw-r--r--challenge-191/deadmarshal/ada/ch1.adb30
-rw-r--r--challenge-191/deadmarshal/ada/ch2.adb43
-rw-r--r--challenge-191/deadmarshal/c/ch-1.c29
-rw-r--r--challenge-191/deadmarshal/c/ch-2.c40
-rw-r--r--challenge-191/deadmarshal/cpp/ch-1.cpp23
-rw-r--r--challenge-191/deadmarshal/cpp/ch-2.cpp34
-rw-r--r--challenge-191/deadmarshal/d/ch1.d21
-rw-r--r--challenge-191/deadmarshal/d/ch2.d33
-rw-r--r--challenge-191/deadmarshal/lua/ch-1.lua11
-rw-r--r--challenge-191/deadmarshal/lua/ch-2.lua28
-rw-r--r--challenge-191/deadmarshal/modula-3/ch1/src/Ch1.m347
-rw-r--r--challenge-191/deadmarshal/modula-3/ch1/src/m3makefile3
-rw-r--r--challenge-191/deadmarshal/modula-3/ch2/src/Ch2.m342
-rw-r--r--challenge-191/deadmarshal/modula-3/ch2/src/m3makefile3
-rw-r--r--challenge-191/deadmarshal/nelua/ch-1.nelua32
-rw-r--r--challenge-191/deadmarshal/nelua/ch-2.nelua27
-rw-r--r--challenge-191/deadmarshal/nim/ch1.nim18
-rw-r--r--challenge-191/deadmarshal/nim/ch2.nim16
-rw-r--r--challenge-191/deadmarshal/oberon/Ch1.Mod53
-rw-r--r--challenge-191/deadmarshal/oberon/Ch2.Mod52
-rw-r--r--challenge-191/deadmarshal/pascal/ch1.pas44
-rw-r--r--challenge-191/deadmarshal/pascal/ch2.pas54
-rw-r--r--challenge-191/deadmarshal/perl/ch-1.pl15
-rw-r--r--challenge-191/deadmarshal/perl/ch-2.pl22
-rw-r--r--challenge-191/deadmarshal/python/ch1.py10
-rw-r--r--challenge-191/deadmarshal/python/ch2.py15
-rw-r--r--challenge-191/deadmarshal/raku/ch-1.raku11
-rw-r--r--challenge-191/deadmarshal/raku/ch-2.raku22
28 files changed, 778 insertions, 0 deletions
diff --git a/challenge-191/deadmarshal/ada/ch1.adb b/challenge-191/deadmarshal/ada/ch1.adb
new file mode 100644
index 0000000000..81f59f35f2
--- /dev/null
+++ b/challenge-191/deadmarshal/ada/ch1.adb
@@ -0,0 +1,30 @@
+with Ada.Text_IO; use Ada.Text_IO;
+with Ada.Containers.Vectors;
+
+procedure Ch1 is
+ package TInt_Vec is new Ada.Containers.Vectors
+ (Index_Type => Natural,
+ Element_Type => Natural);
+ package TInt_Vec_Sorting is new TInt_Vec.Generic_Sorting;
+ use TInt_Vec;
+ use TInt_Vec_Sorting;
+
+ function Twice_Largest(V:in out Vector) return Integer is
+ begin
+ Sort(V);
+ if V.Last_Element >= (2 * V(V.Last_Index-1)) then return 1; end if;
+ return -1;
+ end Twice_Largest;
+
+ V1,V2,V3,V4:Vector;
+begin
+ V1 := 1 & 2 & 3 & 4;
+ V2 := 1 & 2 & 0 & 5;
+ V3 := 2 & 6 & 3 & 1;
+ V4 := 4 & 5 & 2 & 3;
+ Put_Line(Integer'Image(Twice_Largest(V1)));
+ Put_Line(Integer'Image(Twice_Largest(V2)));
+ Put_Line(Integer'Image(Twice_Largest(V3)));
+ Put_Line(Integer'Image(Twice_Largest(V4)));
+end Ch1;
+
diff --git a/challenge-191/deadmarshal/ada/ch2.adb b/challenge-191/deadmarshal/ada/ch2.adb
new file mode 100644
index 0000000000..fd4a72b6e8
--- /dev/null
+++ b/challenge-191/deadmarshal/ada/ch2.adb
@@ -0,0 +1,43 @@
+with Ada.Text_IO; use Ada.Text_IO;
+with Ada.Containers.Vectors;
+
+procedure Ch2 is
+ package TInt_Vec is new Ada.Containers.Vectors
+ (Index_Type => Natural,
+ Element_Type => Positive);
+ use TInt_Vec;
+
+ procedure Swap(A,B:in out Integer) is
+ Temp:Integer := A;
+ begin
+ A := B;
+ B := Temp;
+ end Swap;
+
+ function Is_Cute(V:in Vector) return Boolean is
+ begin
+ for I in 1..V.Last_Index+1 loop
+ if(I mod V(I-1) /= 0) and (V(I-1) mod I /= 0) then return False; end if;
+ end loop;
+ return True;
+ end Is_Cute;
+
+ procedure Permute(V:in out Vector;I,SZ:in Integer;Count:in out Natural) is
+ begin
+ if(SZ = I) then if(Is_Cute(V)) then Count := Count + 1; end if; end if;
+ for J in I..SZ-1 loop
+ Swap(V(I),V(J));
+ Permute(V,I+1,SZ,Count);
+ Swap(V(I),V(J));
+ end loop;
+ return;
+ end Permute;
+
+ V:Vector;
+ Count:Natural := 0;
+begin
+ V := 1 & 2;
+ Permute(V,0,2,Count);
+ Put_Line(Natural'Image(Count));
+end Ch2;
+
diff --git a/challenge-191/deadmarshal/c/ch-1.c b/challenge-191/deadmarshal/c/ch-1.c
new file mode 100644
index 0000000000..0ec927b134
--- /dev/null
+++ b/challenge-191/deadmarshal/c/ch-1.c
@@ -0,0 +1,29 @@
+#include<stdio.h>
+#include<stdlib.h>
+
+int compare(const void *a, const void *b)
+{
+ int i1 = *(int*)a;
+ int i2 = *(int*)b;
+ return i2 - i1;
+}
+
+int twice_largest(int *arr, size_t sz)
+{
+ qsort(arr, sz, sizeof(int), compare);
+ return arr[0] >= (2 * arr[1]) ? 1 : -1;
+}
+
+int main(void)
+{
+ int a1[4] = {1,2,3,4};
+ int a2[4] = {1,2,0,5};
+ int a3[4] = {2,6,3,1};
+ int a4[4] = {4,5,2,3};
+ size_t sz = 4;
+ printf("%2d\n", twice_largest(a1, sz));
+ printf("%2d\n", twice_largest(a2, sz));
+ printf("%2d\n", twice_largest(a3, sz));
+ printf("%2d\n", twice_largest(a4, sz));
+ return 0;
+}
diff --git a/challenge-191/deadmarshal/c/ch-2.c b/challenge-191/deadmarshal/c/ch-2.c
new file mode 100644
index 0000000000..01134e77c5
--- /dev/null
+++ b/challenge-191/deadmarshal/c/ch-2.c
@@ -0,0 +1,40 @@
+#include<stdio.h>
+
+int is_cute(int *arr, size_t sz)
+{
+ for(size_t i = 1; i <= sz; ++i)
+ if((i % arr[i-1]) && (arr[i-1] % i)) return 0;
+ return 1;
+}
+
+void swap(int *a, int *b)
+{
+ int temp = *a;
+ *a = *b;
+ *b = temp;
+}
+
+void permute(int *arr, int i, size_t sz, int *count)
+{
+ if(sz == i)
+ {
+ if(is_cute(arr, sz)) (*count)++;
+ return;
+ }
+ for(size_t j = i; j < sz; ++j)
+ {
+ swap(arr+i,arr+j);
+ permute(arr,i+1,sz,count);
+ swap(arr+i,arr+j);
+ }
+ return;
+}
+
+int main(void)
+{
+ int arr[] = {1,2};
+ int count = 0;
+ permute(arr, 0, 2, &count);
+ printf("%d\n", count);
+ return 0;
+}
diff --git a/challenge-191/deadmarshal/cpp/ch-1.cpp b/challenge-191/deadmarshal/cpp/ch-1.cpp
new file mode 100644
index 0000000000..324018050b
--- /dev/null
+++ b/challenge-191/deadmarshal/cpp/ch-1.cpp
@@ -0,0 +1,23 @@
+#include<cstdio>
+#include<vector>
+#include<algorithm>
+
+int twice_largest(std::vector<int>& vec)
+{
+ std::sort(vec.begin(), vec.end(), std::greater<int>());
+ return vec[0] >= (2 * vec[1]) ? 1 : -1;
+}
+
+int main()
+{
+ std::vector<int> vec1{1,2,3,4};
+ std::vector<int> vec2{1,2,0,5};
+ std::vector<int> vec3{2,6,3,1};
+ std::vector<int> vec4{4,5,2,3};
+ printf("%2d\n", twice_largest(vec1));
+ printf("%2d\n", twice_largest(vec2));
+ printf("%2d\n", twice_largest(vec3));
+ printf("%2d\n", twice_largest(vec4));
+ return 0;
+}
+
diff --git a/challenge-191/deadmarshal/cpp/ch-2.cpp b/challenge-191/deadmarshal/cpp/ch-2.cpp
new file mode 100644
index 0000000000..9af54816b1
--- /dev/null
+++ b/challenge-191/deadmarshal/cpp/ch-2.cpp
@@ -0,0 +1,34 @@
+#include<iostream>
+#include<vector>
+
+bool is_cute(const std::vector<int>& vec)
+{
+ for(std::size_t i = 1; i <= vec.size(); ++i)
+ if((i % vec[i-1]) && (vec[i-1] % i)) return false;
+ return true;
+}
+
+void permute(std::vector<int>& vec, int i, std::size_t sz, int *count)
+{
+ if(sz == i)
+ {
+ if(is_cute(vec)) (*count)++;
+ return;
+ }
+ for(std::size_t j = i; j < sz; ++j)
+ {
+ std::swap(vec[i], vec[j]);
+ permute(vec,i+1,sz,count);
+ std::swap(vec[i], vec[j]);
+ }
+ return;
+}
+
+int main()
+{
+ std::vector<int> vec{1,2};
+ int count{};
+ permute(vec,0,2,&count);
+ std::cout << count << '\n';
+ return 0;
+}
diff --git a/challenge-191/deadmarshal/d/ch1.d b/challenge-191/deadmarshal/d/ch1.d
new file mode 100644
index 0000000000..f342b9983d
--- /dev/null
+++ b/challenge-191/deadmarshal/d/ch1.d
@@ -0,0 +1,21 @@
+import std.stdio:writefln;
+import std.algorithm:sort;
+
+int twice_largest(ref int[] arr)
+{
+ arr.sort!("a > b");
+ return arr[0] >= (2 * arr[1]) ? 1 : -1;
+}
+
+void main()
+{
+ int[] a1 = [1,2,3,4];
+ int[] a2 = [1,2,0,5];
+ int[] a3 = [2,6,3,1];
+ int[] a4 = [4,5,2,3];
+ writefln("%2d", twice_largest(a1));
+ writefln("%2d", twice_largest(a2));
+ writefln("%2d", twice_largest(a3));
+ writefln("%2d", twice_largest(a4));
+}
+
diff --git a/challenge-191/deadmarshal/d/ch2.d b/challenge-191/deadmarshal/d/ch2.d
new file mode 100644
index 0000000000..aa7ee0c93d
--- /dev/null
+++ b/challenge-191/deadmarshal/d/ch2.d
@@ -0,0 +1,33 @@
+import std.stdio:writeln;
+import std.algorithm:swap;
+
+bool is_cute(const ref int[] arr)
+{
+ for(size_t i = 1; i <= arr.length; ++i)
+ if((i % arr[i-1]) && (arr[i-1] % i)) return false;
+ return true;
+}
+
+void permute(ref int[] arr, int i, size_t sz, int *count)
+{
+ if(sz == i)
+ {
+ if(is_cute(arr)) (*count)++;
+ return;
+ }
+ for(size_t j = i; j < sz; ++j)
+ {
+ swap(arr[i], arr[j]);
+ permute(arr,i+1,sz,count);
+ swap(arr[i], arr[j]);
+ }
+}
+
+void main()
+{
+ int[] arr = [1,2];
+ int count = 0;
+ permute(arr,0,2,&count);
+ writeln(count);
+}
+
diff --git a/challenge-191/deadmarshal/lua/ch-1.lua b/challenge-191/deadmarshal/lua/ch-1.lua
new file mode 100644
index 0000000000..ced87fe681
--- /dev/null
+++ b/challenge-191/deadmarshal/lua/ch-1.lua
@@ -0,0 +1,11 @@
+local function twice_largest(t)
+ table.sort(t, function(a,b) return a > b end)
+ if t[1] >= 2 * t[2] then return 1 end
+ return -1
+end
+
+print(string.format("%2d", twice_largest({1,2,3,4})))
+print(string.format("%2d", twice_largest({1,2,0,5})))
+print(string.format("%2d", twice_largest({2,6,3,1})))
+print(string.format("%2d", twice_largest({4,5,2,3})))
+
diff --git a/challenge-191/deadmarshal/lua/ch-2.lua b/challenge-191/deadmarshal/lua/ch-2.lua
new file mode 100644
index 0000000000..0c6131362a
--- /dev/null
+++ b/challenge-191/deadmarshal/lua/ch-2.lua
@@ -0,0 +1,28 @@
+local function is_cute(t)
+ assert(type(t) == 'table', 't must be a table!')
+ for i=1, #t do
+ if i % t[i] ~= 0 and t[i] % i ~= 0 then return false end
+ end
+ return true
+end
+
+local function permute(t, i, sz, t2)
+ assert(type(t) == 'table' and
+ type(i) == 'number' and
+ type(sz) == 'number' and
+ type(t2) == 'table', 'params assertions failed!')
+ if sz == i then
+ if is_cute(t) then t2.count = t2.count + 1 return end
+ end
+ for j=i, sz do
+ t[i], t[j] = t[j], t[i]
+ permute(t,i+1,sz,t2)
+ t[i], t[j] = t[j], t[i]
+ end
+ return
+end
+
+local t,t2 = {1,2},{count = 0}
+permute(t, 1, 2, t2)
+print(string.format("%d",t2.count))
+
diff --git a/challenge-191/deadmarshal/modula-3/ch1/src/Ch1.m3 b/challenge-191/deadmarshal/modula-3/ch1/src/Ch1.m3
new file mode 100644
index 0000000000..ed56ccf21e
--- /dev/null
+++ b/challenge-191/deadmarshal/modula-3/ch1/src/Ch1.m3
@@ -0,0 +1,47 @@
+MODULE Ch1 EXPORTS Main;
+
+IMPORT IO,Fmt;
+
+VAR
+ A1:ARRAY[0..3] OF INTEGER := ARRAY OF INTEGER{1,2,3,4};
+ A2:ARRAY[0..3] OF INTEGER := ARRAY OF INTEGER{1,2,0,5};
+ A3:ARRAY[0..3] OF INTEGER := ARRAY OF INTEGER{2,6,3,1};
+ A4:ARRAY[0..3] OF INTEGER := ARRAY OF INTEGER{4,5,2,3};
+
+PROCEDURE QuickSort(VAR A:ARRAY OF INTEGER;Left,Right:INTEGER) =
+ VAR
+ I,J:INTEGER;
+ Pivot,Temp:INTEGER;
+ BEGIN
+ I := Left;
+ J := Right;
+ Pivot := A[(Left + Right) DIV 2];
+ REPEAT
+ WHILE Pivot > A[I] DO INC(I) END;
+ WHILE Pivot < A[J] DO DEC(J) END;
+ IF I <= J THEN
+ Temp := A[I];
+ A[I] := A[J];
+ A[J] := Temp;
+ INC(I);
+ DEC(J);
+ END;
+ UNTIL I > J;
+ IF Left < J THEN QuickSort(A, Left, J) END;
+ IF I < Right THEN QuickSort(A, I, Right) END;
+ END QuickSort;
+
+PROCEDURE TwiceLargest(VAR A:ARRAY OF INTEGER):INTEGER =
+ BEGIN
+ QuickSort(A,FIRST(A),LAST(A));
+ IF A[LAST(A)] >= (2 * A[LAST(A)-1]) THEN RETURN 1 END;
+ RETURN -1;
+ END TwiceLargest;
+
+BEGIN
+ IO.Put(Fmt.F("%2s\n",Fmt.Int(TwiceLargest(A1))));
+ IO.Put(Fmt.F("%2s\n",Fmt.Int(TwiceLargest(A2))));
+ IO.Put(Fmt.F("%2s\n",Fmt.Int(TwiceLargest(A3))));
+ IO.Put(Fmt.F("%2s\n",Fmt.Int(TwiceLargest(A4))));
+END Ch1.
+
diff --git a/challenge-191/deadmarshal/modula-3/ch1/src/m3makefile b/challenge-191/deadmarshal/modula-3/ch1/src/m3makefile
new file mode 100644
index 0000000000..8a6bc1e4f8
--- /dev/null
+++ b/challenge-191/deadmarshal/modula-3/ch1/src/m3makefile
@@ -0,0 +1,3 @@
+import("libm3")
+implementation("Ch1")
+program("ch1")
diff --git a/challenge-191/deadmarshal/modula-3/ch2/src/Ch2.m3 b/challenge-191/deadmarshal/modula-3/ch2/src/Ch2.m3
new file mode 100644
index 0000000000..a513124b89
--- /dev/null
+++ b/challenge-191/deadmarshal/modula-3/ch2/src/Ch2.m3
@@ -0,0 +1,42 @@
+MODULE Ch2 EXPORTS Main;
+
+IMPORT IO;
+
+VAR
+ A:ARRAY [0..1] OF INTEGER := ARRAY OF INTEGER{1,2};
+ Count:INTEGER;
+
+PROCEDURE IsCute(VAR Arr:ARRAY OF INTEGER):BOOLEAN =
+ BEGIN
+ FOR I := 1 TO NUMBER(Arr) DO
+ IF((I MOD Arr[I-1]) # 0) AND ((A[I-1] MOD I) # 0) THEN RETURN FALSE END
+ END;
+ RETURN TRUE;
+ END IsCute;
+
+PROCEDURE Swap(VAR A,B:INTEGER) =
+ VAR
+ Temp:INTEGER;
+ BEGIN
+ Temp := A;
+ A := B;
+ B := Temp;
+ END Swap;
+
+PROCEDURE Permute(VAR Arr:ARRAY OF INTEGER;I,SZ:INTEGER;VAR Count:INTEGER) =
+ BEGIN
+ IF SZ = I THEN IF IsCute(A) THEN INC(Count); RETURN END END;
+ FOR J := I TO (SZ-1) DO
+ Swap(Arr[I],Arr[J]);
+ Permute(Arr,I+1,SZ,Count);
+ Swap(Arr[I],Arr[J]);
+ END;
+ RETURN;
+ END Permute;
+
+BEGIN
+ Count := 0;
+ Permute(A,0,NUMBER(A),Count);
+ IO.PutInt(Count); IO.Put("\n");
+END Ch2.
+
diff --git a/challenge-191/deadmarshal/modula-3/ch2/src/m3makefile b/challenge-191/deadmarshal/modula-3/ch2/src/m3makefile
new file mode 100644
index 0000000000..4bfbb7373d
--- /dev/null
+++ b/challenge-191/deadmarshal/modula-3/ch2/src/m3makefile
@@ -0,0 +1,3 @@
+import("libm3")
+implementation("Ch2")
+program("ch2")
diff --git a/challenge-191/deadmarshal/nelua/ch-1.nelua b/challenge-191/deadmarshal/nelua/ch-1.nelua
new file mode 100644
index 0000000000..a3ff59cf00
--- /dev/null
+++ b/challenge-191/deadmarshal/nelua/ch-1.nelua
@@ -0,0 +1,32 @@
+require'sequence'
+require'string'
+
+local function quick_sort(s:sequence(integer),
+ left:integer,
+ right:integer):void
+ local i,j:integer = left,right
+ local pivot = s[(left + right) // 2]
+ repeat
+ while pivot > s[i] do i = i + 1 end
+ while pivot < s[j] do j = j - 1 end
+ if i <= j then
+ s[i],s[j] = s[j],s[i]
+ i = i + 1
+ j = j - 1
+ end
+ until i > j
+ if left < j then quick_sort(s,left,j) end
+ if i < right then quick_sort(s,i,right) end
+end
+
+local function twice_largest(s:sequence(integer)):integer
+ quick_sort(s,1,#s)
+ if s[#s] >= 2 * s[#s-1] then return 1 end
+ return -1
+end
+
+print(string.format("%2d", twice_largest({1,2,3,4})))
+print(string.format("%2d", twice_largest({1,2,0,5})))
+print(string.format("%2d", twice_largest({2,6,3,1})))
+print(string.format("%2d", twice_largest({4,5,2,3})))
+
diff --git a/challenge-191/deadmarshal/nelua/ch-2.nelua b/challenge-191/deadmarshal/nelua/ch-2.nelua
new file mode 100644
index 0000000000..619217f1a0
--- /dev/null
+++ b/challenge-191/deadmarshal/nelua/ch-2.nelua
@@ -0,0 +1,27 @@
+require'sequence'
+require'string'
+
+local function is_cute(s:sequence(integer)):boolean
+ for i=1, #s do
+ if i % s[i] ~= 0 and s[i] % i ~= 0 then return false end
+ end
+ return true
+end
+
+local function permute(s:sequence(integer),
+ i:integer,
+ sz:integer,
+ s2:sequence(integer)):void
+ if sz == i then if is_cute(s) then s2[1] = s2[1] + 1 return end end
+ for j=i, sz do
+ s[i],s[j] = s[j],s[i]
+ permute(s,i+1,sz,s2)
+ s[i],s[j] = s[j],s[i]
+ end
+ return
+end
+
+local s:sequence(integer),s2:sequence(integer) = {1,2},{0}
+permute(s, 1, 2, s2)
+print(string.format("%d",s2[1]))
+
diff --git a/challenge-191/deadmarshal/nim/ch1.nim b/challenge-191/deadmarshal/nim/ch1.nim
new file mode 100644
index 0000000000..58a816a55e
--- /dev/null
+++ b/challenge-191/deadmarshal/nim/ch1.nim
@@ -0,0 +1,18 @@
+import std/[algorithm,strformat]
+
+proc twiceLargest(s:var seq[int]):int =
+ s.sort(order = SortOrder.Descending)
+ if s[0] >= (2 * s[1]): return 1
+ return -1
+
+var
+ s1:seq[int] = @[1,2,3,4]
+ s2:seq[int] = @[1,2,0,5]
+ s3:seq[int] = @[2,6,3,1]
+ s4:seq[int] = @[4,5,2,3]
+
+echo fmt"{twiceLargest(s1):>2}"
+echo fmt"{twiceLargest(s2):>2}"
+echo fmt"{twiceLargest(s3):>2}"
+echo fmt"{twiceLargest(s4):>2}"
+
diff --git a/challenge-191/deadmarshal/nim/ch2.nim b/challenge-191/deadmarshal/nim/ch2.nim
new file mode 100644
index 0000000000..62dde34dfb
--- /dev/null
+++ b/challenge-191/deadmarshal/nim/ch2.nim
@@ -0,0 +1,16 @@
+import std/[algorithm,sequtils]
+
+proc isCute(s:seq[int]):bool =
+ not (1..s.len).anyIt(it mod s[it-1] != 0 and s[it-1] mod it != 0)
+
+proc cuteList(n:int):int =
+ var
+ s:seq[int] = (1..n).toSeq
+ if isCute(s):
+ inc result
+ while s.nextPermutation():
+ if isCute(s):
+ inc result
+
+echo cuteList(2)
+
diff --git a/challenge-191/deadmarshal/oberon/Ch1.Mod b/challenge-191/deadmarshal/oberon/Ch1.Mod
new file mode 100644
index 0000000000..58a4109d61
--- /dev/null
+++ b/challenge-191/deadmarshal/oberon/Ch1.Mod
@@ -0,0 +1,53 @@
+MODULE Ch1;
+
+ IMPORT Out;
+
+ VAR
+ A1,A2,A3,A4:ARRAY 4 OF INTEGER;
+
+ PROCEDURE Init();
+ BEGIN
+ A1[0] := 1; A1[1] := 2; A1[2] := 3; A1[3] := 4;
+ A2[0] := 1; A2[1] := 2; A2[2] := 0; A2[3] := 5;
+ A3[0] := 2; A3[1] := 6; A3[2] := 3; A3[3] := 1;
+ A4[0] := 4; A4[1] := 5; A4[2] := 2; A4[3] := 3;
+ END Init;
+
+ PROCEDURE QuickSort(VAR A:ARRAY OF INTEGER;Left,Right:LONGINT);
+ VAR
+ I,J:LONGINT;
+ Pivot,Temp:INTEGER;
+ BEGIN
+ I := Left;
+ J := Right;
+ Pivot := A[(Left + Right) DIV 2];
+ REPEAT
+ WHILE Pivot > A[I] DO INC(I) END;
+ WHILE Pivot < A[J] DO DEC(J) END;
+ IF I <= J THEN
+ Temp := A[I];
+ A[I] := A[J];
+ A[J] := Temp;
+ INC(I);
+ DEC(J);
+ END;
+ UNTIL I > J;
+ IF Left < J THEN QuickSort(A, Left, J) END;
+ IF I < Right THEN QuickSort(A, I, Right) END;
+ END QuickSort;
+
+ PROCEDURE TwiceLargest(VAR A:ARRAY OF INTEGER):INTEGER;
+ BEGIN
+ QuickSort(A,0,LEN(A)-1);
+ IF A[LEN(A)-1] >= (2 * A[LEN(A)-2]) THEN RETURN 1 END;
+ RETURN -1;
+ END TwiceLargest;
+
+BEGIN
+ Init;
+ Out.Int(TwiceLargest(A1),2); Out.Ln;
+ Out.Int(TwiceLargest(A2),2); Out.Ln;
+ Out.Int(TwiceLargest(A3),2); Out.Ln;
+ Out.Int(TwiceLargest(A4),2); Out.Ln;
+END Ch1.
+
diff --git a/challenge-191/deadmarshal/oberon/Ch2.Mod b/challenge-191/deadmarshal/oberon/Ch2.Mod
new file mode 100644
index 0000000000..053ad395c3
--- /dev/null
+++ b/challenge-191/deadmarshal/oberon/Ch2.Mod
@@ -0,0 +1,52 @@
+MODULE Ch2;
+
+ IMPORT Out;
+
+ VAR
+ A:ARRAY 2 OF INTEGER;
+ Count:LONGINT;
+
+ PROCEDURE Init();
+ BEGIN
+ A[0] := 1; A[1] := 2;
+ END Init;
+
+ PROCEDURE IsCute(VAR Arr:ARRAY OF INTEGER):BOOLEAN;
+ VAR
+ I:LONGINT;
+ BEGIN
+ FOR I := 1 TO LEN(Arr) DO
+ IF((I MOD Arr[I-1]) # 0) & ((A[I-1] MOD I) # 0) THEN RETURN FALSE END
+ END;
+ RETURN TRUE;
+ END IsCute;
+
+ PROCEDURE Swap(VAR A,B:INTEGER);
+ VAR
+ Temp:INTEGER;
+ BEGIN
+ Temp := A;
+ A := B;
+ B := Temp;
+ END Swap;
+
+ PROCEDURE Permute(VAR Arr:ARRAY OF INTEGER;I,SZ:LONGINT;VAR Count:LONGINT);
+ VAR
+ J:LONGINT;
+ BEGIN
+ IF SZ = I THEN IF IsCute(A) THEN INC(Count); RETURN END END;
+ FOR J := I TO SZ-1 DO
+ Swap(Arr[I],Arr[J]);
+ Permute(Arr,I+1,SZ,Count);
+ Swap(Arr[I],Arr[J]);
+ END;
+ RETURN;
+ END Permute;
+
+BEGIN
+ Init;
+ Count := 0;
+ Permute(A,0,LEN(A),Count);
+ Out.Int(Count,0); Out.Ln;
+END Ch2.
+
diff --git a/challenge-191/deadmarshal/pascal/ch1.pas b/challenge-191/deadmarshal/pascal/ch1.pas
new file mode 100644
index 0000000000..8bdc3193cf
--- /dev/null
+++ b/challenge-191/deadmarshal/pascal/ch1.pas
@@ -0,0 +1,44 @@
+program Ch1;
+
+{$mode objfpc}
+
+uses
+ SysUtils,Types,Math;
+
+procedure QuickSort(var A:TIntegerDynArray;Left,Right:Integer);
+var
+ I,J:Integer;
+ Pivot,Temp:Integer;
+begin
+ I := Left;
+ J := Right;
+ Pivot := A[(Left + Right) div 2];
+ repeat
+ while Pivot > A[I] do Inc(I);
+ while Pivot < A[J] do Dec(J);
+ if I <= J then
+ begin
+ Temp := A[I];
+ A[I] := A[J];
+ A[J] := Temp;
+ Inc(I);
+ Dec(J);
+ end;
+ until I > J;
+ if Left < J then QuickSort(A, Left, J);
+ if I < Right then QuickSort(A, I, Right);
+end;
+
+function TwiceLargest(Arr:TIntegerDynArray):Integer;
+begin
+ QuickSort(Arr,Low(Arr),High(Arr));
+ Result := IfThen(Arr[High(Arr)] >= (2 * Arr[High(Arr)-1]), 1, -1);
+end;
+
+begin
+ WriteLn(Format('%2d',[TwiceLargest([1,2,3,4])]));
+ WriteLn(Format('%2d',[TwiceLargest([1,2,0,5])]));
+ WriteLn(Format('%2d',[TwiceLargest([2,6,3,1])]));
+ WriteLn(Format('%2d',[TwiceLargest([4,5,2,3])]));
+end.
+
diff --git a/challenge-191/deadmarshal/pascal/ch2.pas b/challenge-191/deadmarshal/pascal/ch2.pas
new file mode 100644
index 0000000000..ea5cadf2c8
--- /dev/null
+++ b/challenge-191/deadmarshal/pascal/ch2.pas
@@ -0,0 +1,54 @@
+program Ch2;
+
+{$mode objfpc}
+uses
+ SysUtils,Types;
+
+var
+ Arr:TIntegerDynArray;
+ Count:Integer;
+
+procedure Swap(var A,B:Integer);
+var
+ Temp:Integer;
+begin
+ Temp := A;
+ A := B;
+ B := Temp;
+end;
+
+function IsCute(constref Arr:TIntegerDynArray):Boolean;
+var
+ I:Integer;
+begin
+ for I := 1 to Length(Arr) do
+ if(((I mod Arr[I-1]) <> 0) and ((Arr[I-1] mod I) <> 0)) then
+ Exit(False);
+ Exit(True);
+end;
+
+procedure Permute(var Arr:TIntegerDynArray;
+ I,SZ:Integer;
+ var Count:Integer);
+var
+ J:Integer;
+begin
+ if SZ = I then
+ begin
+ if IsCute(Arr) then Inc(Count);
+ Exit;
+ end;
+ for J := I to SZ-1 do
+ begin
+ Swap(Arr[I],Arr[J]);
+ Permute(Arr, I+1, SZ, Count);
+ Swap(Arr[I],Arr[J]);
+ end;
+end;
+
+begin
+ Arr := [1,2];
+ Count := 0;
+ Permute(Arr,0,2,Count);
+ WriteLn(Count);
+end.
diff --git a/challenge-191/deadmarshal/perl/ch-1.pl b/challenge-191/deadmarshal/perl/ch-1.pl
new file mode 100644
index 0000000000..1b848e1c34
--- /dev/null
+++ b/challenge-191/deadmarshal/perl/ch-1.pl
@@ -0,0 +1,15 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+sub twice_largest{
+ my ($arr) = @_;
+ @$arr = sort {$b <=> $a} @$arr;
+ $arr->[0] >= (2 * $arr->[1]) ? 1 : -1;
+}
+
+printf "%2d\n", twice_largest([1,2,3,4]);
+printf "%2d\n", twice_largest([1,2,0,5]);
+printf "%2d\n", twice_largest([2,6,3,1]);
+printf "%2d\n", twice_largest([4,5,2,3]);
+
diff --git a/challenge-191/deadmarshal/perl/ch-2.pl b/challenge-191/deadmarshal/perl/ch-2.pl
new file mode 100644
index 0000000000..a3df374c7d
--- /dev/null
+++ b/challenge-191/deadmarshal/perl/ch-2.pl
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Algorithm::Combinatorics qw(permutations);
+
+sub is_cute{
+ map{return 0 if $_ % $_[0]->[$_-1] && $_[0]->[$_-1] % $_}
+ (1..@{$_[0]});
+ 1;
+}
+
+sub cute_list{
+ my @arr = 1..$_[0];
+ my (@permutations,$count) = (permutations \@arr,0);
+ foreach my $perm(@permutations){
+ $count++ if is_cute($perm);
+ }
+ $count;
+}
+
+print cute_list(2), "\n";
+
diff --git a/challenge-191/deadmarshal/python/ch1.py b/challenge-191/deadmarshal/python/ch1.py
new file mode 100644
index 0000000000..c889abe734
--- /dev/null
+++ b/challenge-191/deadmarshal/python/ch1.py
@@ -0,0 +1,10 @@
+def twice_largest(arr):
+ arr.sort(reverse=True)
+ if arr[0] >= (2 * arr[1]): return 1
+ return -1
+
+print(f"{twice_largest([1,2,3,4]):>2}")
+print(f"{twice_largest([1,2,0,5]):>2}")
+print(f"{twice_largest([2,6,3,1]):>2}")
+print(f"{twice_largest([4,5,2,3]):>2}")
+
diff --git a/challenge-191/deadmarshal/python/ch2.py b/challenge-191/deadmarshal/python/ch2.py
new file mode 100644
index 0000000000..30ac0b9f78
--- /dev/null
+++ b/challenge-191/deadmarshal/python/ch2.py
@@ -0,0 +1,15 @@
+from itertools import permutations
+
+def is_cute(arr):
+ for i in range(1,len(arr)+1):
+ if i % arr[i-1] != 0 and arr[i-1] % i != 0: return False
+ return True
+
+def cute_list(n):
+ arr = list(range(1,n+1))
+ count = 0
+ for perm in permutations(arr):
+ if is_cute(perm): count += 1
+ return count
+
+print(cute_list(2))
diff --git a/challenge-191/deadmarshal/raku/ch-1.raku b/challenge-191/deadmarshal/raku/ch-1.raku
new file mode 100644
index 0000000000..5675561785
--- /dev/null
+++ b/challenge-191/deadmarshal/raku/ch-1.raku
@@ -0,0 +1,11 @@
+sub twice-largest(@arr)
+{
+ @arr = @arr.sort.reverse;
+ @arr[0] >= 2 * @arr[1] ?? 1 !! -1;
+}
+
+say twice-largest([1,2,3,4]);
+say twice-largest([1,2,0,5]);
+say twice-largest([2,6,3,1]);
+say twice-largest([4,5,2,3]);
+
diff --git a/challenge-191/deadmarshal/raku/ch-2.raku b/challenge-191/deadmarshal/raku/ch-2.raku
new file mode 100644
index 0000000000..ceb5dacf13
--- /dev/null
+++ b/challenge-191/deadmarshal/raku/ch-2.raku
@@ -0,0 +1,22 @@
+sub is-cute(@arr)
+{
+ for 1..@arr.elems -> $i
+ {
+ return False if $i !%% @arr[$i-1] && @arr[$i-1] !%% $i;
+ }
+ True;
+}
+
+sub cute-list($n)
+{
+ my @permutations = (1.