diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-11-21 04:57:01 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-21 04:57:01 +0000 |
| commit | 054a1d856f6600be605d149f7830a7426f828fce (patch) | |
| tree | ee38a9bf6eef686793ab957d964d2c70cb4d3ee7 | |
| parent | 7ac92a4a7fd76a307feefe75fcb666f9525e1b7b (diff) | |
| parent | 4a6109910c67852630b4d5b50d2a1bf465cfbeaa (diff) | |
| download | perlweeklychallenge-club-054a1d856f6600be605d149f7830a7426f828fce.tar.gz perlweeklychallenge-club-054a1d856f6600be605d149f7830a7426f828fce.tar.bz2 perlweeklychallenge-club-054a1d856f6600be605d149f7830a7426f828fce.zip | |
Merge pull request #7110 from deadmarshal/challenge191
Challenge191
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) |
