aboutsummaryrefslogtreecommitdiff
path: root/challenge-191/deadmarshal/pascal/ch1.pas
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-191/deadmarshal/pascal/ch1.pas')
-rw-r--r--challenge-191/deadmarshal/pascal/ch1.pas44
1 files changed, 44 insertions, 0 deletions
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.
+