-
Notifications
You must be signed in to change notification settings - Fork 357
/
Copy pathWinningNumberExtractor.kt
32 lines (26 loc) · 1.1 KB
/
WinningNumberExtractor.kt
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
package lotto
import lotto.domain.LottoTicket
import lotto.domain.LottoWinning
import lotto.domain.WinningNumbers
import java.util.Comparator
object WinningNumberExtractor {
fun process(tickets: List<LottoTicket>, winningNumbers: WinningNumbers): LottoWinning {
val resultMap = mutableMapOf<TicketResult, Int>()
tickets.forEach { ticket ->
val intersectNumbers = ticket.intersect(winningNumbers)
val isBonusBallMatched = winningNumbers.bonusBall in ticket
val ticketResult = TicketResult(intersectNumbers.size, isBonusBallMatched)
resultMap[ticketResult]
?.let { resultMap[ticketResult] = it.inc() }
?: run { resultMap.put(ticketResult, 1) }
}
return LottoWinning(resultMap.toSortedMap(getTicketResultComparator()))
}
private fun getTicketResultComparator(): Comparator<TicketResult> =
Comparator.comparing(TicketResult::matchCount)
.thenComparing(TicketResult::isBonusBallMatched)
}
data class TicketResult(
val matchCount: Int,
val isBonusBallMatched: Boolean,
)