2020-10-17 15:57:06 +03:00

52 lines
1.1 KiB
Kotlin

package ru.mipt.npm.sim.epidemics
enum class InfectionState {
SUSCEPTIBLE,
EXPOSED,
INFECTIOUS,
RECOVERED
}
class Subject(
val id: Int,
val closeContacts: List<Int>,
val otherContacts: List<Int>
)
class SubjectState(
val subject: Subject
) {
var state: InfectionState = InfectionState.SUSCEPTIBLE
private set
var exposedDate: Int? = null
private set
var infectedDate: Int? = null
private set
var recoveryDate: Int? = null
private set
fun expose(date: Int) {
if (state == InfectionState.SUSCEPTIBLE) {
state = InfectionState.EXPOSED
exposedDate = date
}
}
fun infect(date: Int) {
if (state != InfectionState.EXPOSED) error("Expected 'EXPOSED' state")
state = InfectionState.INFECTIOUS
infectedDate = date
}
fun recover(date: Int) {
if (state != InfectionState.INFECTIOUS) error("Expected 'EXPOSED' state")
state = InfectionState.RECOVERED
recoveryDate = date
}
}