Added another small performance improvement for day 14
This commit is contained in:
parent
29663ad82e
commit
95de6f1f7b
|
@ -204,27 +204,34 @@ end;
|
|||
procedure TPlatform.Tilt(constref AIntervals: TCubeRockIntervalsList; constref ASource, ATarget:
|
||||
TIntegersList; const AUp: Boolean);
|
||||
var
|
||||
i, rock, nextFree, step: Integer;
|
||||
interval: TCubeRockInterval;
|
||||
i, j, rock, nextFree, direction: Integer;
|
||||
begin
|
||||
if AUp then
|
||||
step := 1
|
||||
direction := 1
|
||||
else
|
||||
step := -1;
|
||||
direction := -1;
|
||||
for i := 0 to AIntervals.Count - 1 do
|
||||
begin
|
||||
for interval in AIntervals[i] do
|
||||
begin
|
||||
j := 0;
|
||||
if AUp then
|
||||
nextFree := interval.Start
|
||||
nextFree := AIntervals[i][j].Start
|
||||
else
|
||||
nextFree := interval.Stop;
|
||||
nextFree := AIntervals[i][j].Stop;
|
||||
for rock in ASource[i] do
|
||||
if (interval.Start <= rock) and (rock <= interval.Stop) then
|
||||
begin
|
||||
ATarget[nextFree].Add(i);
|
||||
Inc(nextFree, step);
|
||||
// Goes to next interval if rock is not in current interval.
|
||||
while AIntervals[i][j].Stop < rock do
|
||||
begin
|
||||
Inc(j);
|
||||
if AUp then
|
||||
nextFree := AIntervals[i][j].Start
|
||||
else
|
||||
nextFree := AIntervals[i][j].Stop;
|
||||
end;
|
||||
|
||||
// rock must now be in current interval.
|
||||
ATarget[nextFree].Add(i);
|
||||
Inc(nextFree, direction);
|
||||
end;
|
||||
ASource[i].Clear;
|
||||
end;
|
||||
|
|
Loading…
Reference in New Issue