aboutsummaryrefslogtreecommitdiff
path: root/challenge-198/deadmarshal/pascal/ch1.pas
blob: 48477e2e1e89cd5ec37b9a2bcdcb4639045b7f49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
program Ch1;

{$mode objfpc}

uses
  SysUtils,Types;

var
  A1:TIntegerDynArray;
  A2:TIntegerDynArray;

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 MaxGap(var Arr:TIntegerDynArray):Integer;
var
  I,Temp,Max:Integer;
begin
  if Length(Arr) < 2 then Exit(0);
  I := 0;
  Max := 0;
  Result := 0;
  QuickSort(Arr,0,High(Arr));
  while I < Length(Arr) do
  begin
    Temp := Abs(Arr[I] - Arr[I+1]);
    if(Temp > Max) then Max := Temp;
    Inc(I,2);
  end;
  for I := Low(Arr) to Pred(High(Arr)) do
    if Abs(Arr[I] - Arr[I+1]) = Max then Inc(Result);
end;

begin
  A1 := [2,5,8,1];
  A2 := [3];
  WriteLn(MaxGap(A1));
  WriteLn(MaxGap(A2));
end.