Merge branch 'master' of gitlab.jeudego.org:tournois/pairgoth
This commit is contained in:
@@ -73,6 +73,7 @@ object PairingHandler: PairgothApiHandler {
|
||||
}.toSet()
|
||||
game.black = payload.getID("b") ?: badRequest("missing black player id")
|
||||
game.white = payload.getID("w") ?: badRequest("missing white player id")
|
||||
tournament.recomputeDUDD(round, game.id)
|
||||
// temporary
|
||||
payload.getInt("dudd")?.let { game.drawnUpDown = it }
|
||||
val black = tournament.pairables[game.black] ?: badRequest("invalid black player id")
|
||||
|
@@ -4,6 +4,8 @@ import com.republicate.kson.Json
|
||||
import com.republicate.kson.toJsonArray
|
||||
import kotlinx.datetime.LocalDate
|
||||
import org.jeudego.pairgoth.api.ApiHandler.Companion.badRequest
|
||||
import org.jeudego.pairgoth.pairing.solver.MacMahonSolver
|
||||
import org.jeudego.pairgoth.pairing.solver.SwissSolver
|
||||
import org.jeudego.pairgoth.store.Store
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
@@ -65,6 +67,22 @@ sealed class Tournament <P: Pairable>(
|
||||
if (round > games.size + 1) throw Error("invalid round")
|
||||
else mutableMapOf<ID, Game>().also { games.add(it) }
|
||||
fun lastRound() = games.size
|
||||
|
||||
fun recomputeDUDD(round: Int, gameID: ID) {
|
||||
// Instantiate solver with game history
|
||||
// TODO cleaner solver instantiation
|
||||
val history = games.map { games -> games.values.toList() }
|
||||
val solver = when (pairing.type) {
|
||||
PairingType.SWISS -> SwissSolver(round, history, pairables.values.toList(), pairing.pairingParams, pairing.placementParams)
|
||||
PairingType.MAC_MAHON -> MacMahonSolver(round, history, pairables.values.toList(), pairing.pairingParams, pairing.placementParams, mmBar = 3, mmFloor = -20)
|
||||
else -> throw Exception("Invalid tournament type")
|
||||
}
|
||||
// Recomputes DUDD
|
||||
val game = games(round)[gameID]!!
|
||||
val whiteplayer = solver.pairables.find { p-> p.id == game.white }!!
|
||||
val blackplayer = solver.pairables.find { p-> p.id == game.black }!!
|
||||
game.drawnUpDown = solver.dudd(blackplayer, whiteplayer)
|
||||
}
|
||||
}
|
||||
|
||||
// standard tournament of individuals
|
||||
|
@@ -527,11 +527,14 @@ sealed class BaseSolver(
|
||||
return scale * (1.0 - x) * (1.0 + k * x)
|
||||
}
|
||||
|
||||
fun dudd(black: Pairable, white: Pairable): Int {
|
||||
return white.group - black.group
|
||||
}
|
||||
open fun games(black: Pairable, white: Pairable): List<Game> {
|
||||
// CB TODO team of individuals pairing
|
||||
val usedTables = tables.getOrNull(round - 1) ?: BitSet().also { tables.add(it) }
|
||||
val table = if (black.id == 0 || white.id == 0) 0 else usedTables.nextClearBit(1)
|
||||
usedTables.set(table)
|
||||
return listOf(Game(id = Store.nextGameId, table = table, black = black.id, white = white.id, handicap = pairing.handicap.handicap(white, black), drawnUpDown = white.group-black.group))
|
||||
return listOf(Game(id = Store.nextGameId, table = table, black = black.id, white = white.id, handicap = pairing.handicap.handicap(white, black), drawnUpDown = dudd(black, white)))
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user