Skip to content

Commit 562e412

Browse files
Optimise bin selection in difficulty calculation
1 parent 86f6f90 commit 562e412

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

Quaver.API/Maps/Processors/Difficulty/Rulesets/Keys/DifficultyProcessorKeys.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -556,12 +556,22 @@ private float CalculateOverallDifficulty()
556556
var mapStart = StrainSolverData.Min(s => s.StartTime);
557557
var mapEnd = StrainSolverData.Max(s => Math.Max(s.StartTime, s.EndTime));
558558

559+
var l = 0;
560+
var r = 0;
561+
while (l < StrainSolverData.Count && StrainSolverData[l].StartTime < mapStart)
562+
l++;
559563
for (var i = mapStart; i < mapEnd; i += binSize)
560564
{
561-
var valuesInBin = StrainSolverData.Where(s => s.StartTime >= i && s.StartTime < i + binSize).ToList();
565+
while (r < StrainSolverData.Count - 1 && StrainSolverData[r + 1].StartTime < i + binSize)
566+
r++;
567+
if (l >= StrainSolverData.Count)
568+
break;
569+
570+
var valuesInBin = StrainSolverData.GetRange(l, r - l + 1);
562571
var averageRating = valuesInBin.Count > 0 ? valuesInBin.Average(s => s.TotalStrainValue) : 0;
563572

564573
bins.Add(averageRating);
574+
l = r + 1;
565575
}
566576

567577
if (!bins.Any(strain => strain > 0)) return 0;

0 commit comments

Comments
 (0)