summaryrefslogtreecommitdiff
path: root/sw-common-model/src/commonMain
diff options
context:
space:
mode:
Diffstat (limited to 'sw-common-model/src/commonMain')
-rw-r--r--sw-common-model/src/commonMain/kotlin/org/luxons/sevenwonders/model/score/Score.kt14
1 files changed, 6 insertions, 8 deletions
diff --git a/sw-common-model/src/commonMain/kotlin/org/luxons/sevenwonders/model/score/Score.kt b/sw-common-model/src/commonMain/kotlin/org/luxons/sevenwonders/model/score/Score.kt
index 36d0857f..9b0c5fb6 100644
--- a/sw-common-model/src/commonMain/kotlin/org/luxons/sevenwonders/model/score/Score.kt
+++ b/sw-common-model/src/commonMain/kotlin/org/luxons/sevenwonders/model/score/Score.kt
@@ -4,18 +4,16 @@ import kotlinx.serialization.Serializable
@Serializable
data class ScoreBoard(val scores: List<PlayerScore>) {
+ init {
+ require(scores.sortedDescending() == scores) { "Scores must be sorted highest-to-lowest" }
+ }
@OptIn(ExperimentalStdlibApi::class)
val ranks: List<Int>
- get() = buildList {
- var r = 1
+ get() = buildList<Int> {
add(1)
- for (i in 1..scores.lastIndex) {
- if (scores[i] < scores[i - 1]) {
- add(++r)
- } else {
- add(r)
- }
+ scores.zipWithNext { prev, current -> current.compareTo(prev) == 0 }.forEach { exAequoWithPrev ->
+ add(if (exAequoWithPrev) last() else size + 1)
}
}
}
bgstack15