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: | procedure TPlatform.Tilt(constref AIntervals: TCubeRockIntervalsList; constref ASource, ATarget: | ||||||
|   TIntegersList; const AUp: Boolean); |   TIntegersList; const AUp: Boolean); | ||||||
| var | var | ||||||
|   i, rock, nextFree, step: Integer; |   i, j, rock, nextFree, direction: Integer; | ||||||
|   interval: TCubeRockInterval; |  | ||||||
| begin | begin | ||||||
|   if AUp then |   if AUp then | ||||||
|     step := 1 |     direction := 1 | ||||||
|   else |   else | ||||||
|     step := -1; |     direction := -1; | ||||||
|   for i := 0 to AIntervals.Count - 1 do |   for i := 0 to AIntervals.Count - 1 do | ||||||
|   begin |   begin | ||||||
|     for interval in AIntervals[i] do |     j := 0; | ||||||
|     begin |  | ||||||
|     if AUp then |     if AUp then | ||||||
|         nextFree := interval.Start |       nextFree := AIntervals[i][j].Start | ||||||
|     else |     else | ||||||
|         nextFree := interval.Stop; |       nextFree := AIntervals[i][j].Stop; | ||||||
|     for rock in ASource[i] do |     for rock in ASource[i] do | ||||||
|         if (interval.Start <= rock) and (rock <= interval.Stop) then |  | ||||||
|     begin |     begin | ||||||
|           ATarget[nextFree].Add(i); |       // Goes to next interval if rock is not in current interval. | ||||||
|           Inc(nextFree, step); |       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; |       end; | ||||||
|  | 
 | ||||||
|  |       // rock must now be in current interval. | ||||||
|  |       ATarget[nextFree].Add(i); | ||||||
|  |       Inc(nextFree, direction); | ||||||
|     end; |     end; | ||||||
|     ASource[i].Clear; |     ASource[i].Clear; | ||||||
|   end; |   end; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user