Skip to content

Commit

Permalink
feat: 최종 시간표 후보가 태그 기준을 미충족하면 기본 태그에서 최소 개수 선정
Browse files Browse the repository at this point in the history
  • Loading branch information
DWL21 committed Feb 9, 2025
1 parent 302c8ab commit a253b40
Showing 1 changed file with 23 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ import com.yourssu.soongpt.domain.course.implement.Courses
class TimetableCandidates(
val values: List<TimetableCandidate>
) {
companion object {
const val TAG_CANDIDATES_SIZE = 5
}

fun filterRules(): TimetableCandidates {
return TimetableCandidates(values.filter { timetableRules(it) })
}
Expand All @@ -25,11 +29,25 @@ class TimetableCandidates(
}

fun pickTopNOfFinalScores(n: Int, maximumTagLimit: Int): TimetableCandidates {
return TimetableCandidates(values.groupBy { it.tag }
.map { timetables -> timetables.value
val result = TimetableCandidates(
values.groupBy { it.tag }
.asSequence()
.filter { it.key != Tag.DEFAULT }
.map { timetables ->
timetables.value
.sortedByDescending { it.calculateFinalScore() }
.take(maximumTagLimit)
}.flatten()
.sortedByDescending { it.calculateFinalScore() }
.take(maximumTagLimit)
}.flatten()
.take(n))
.take(n)
.toList())
if (validateMinimumTimetablePolicy(result)) {
return TimetableCandidates(result.values + values.filter { it.tag == Tag.DEFAULT }
.take(TAG_CANDIDATES_SIZE - result.values.size))
}
return result
}

private fun validateMinimumTimetablePolicy(result: TimetableCandidates) =
result.values.size < TAG_CANDIDATES_SIZE
}

0 comments on commit a253b40

Please sign in to comment.