2024-06-11 11:04:02 +02:00
|
|
|
package domain
|
|
|
|
|
|
2024-06-12 17:01:49 +02:00
|
|
|
import kotlin.reflect.KClass
|
2024-06-11 23:41:39 +02:00
|
|
|
|
2024-06-11 11:04:02 +02:00
|
|
|
class Game(
|
|
|
|
|
val grid: Grid,
|
2024-06-12 17:01:49 +02:00
|
|
|
val rules: List<GameRule>
|
2024-06-11 11:04:02 +02:00
|
|
|
) {
|
2024-06-12 17:01:49 +02:00
|
|
|
val horizontalRules = rules.filterIsInstance<HorizontalRule>()
|
|
|
|
|
val verticalRules = rules.filterIsInstance<VerticalRule>()
|
|
|
|
|
|
|
|
|
|
fun areCategoriesValid(): Boolean {
|
|
|
|
|
val usedCategories = mutableSetOf<KClass<out ItemClass>>()
|
|
|
|
|
for (row in grid.rows) {
|
|
|
|
|
val category = row.first().options.first()::class
|
|
|
|
|
if (usedCategories.contains(category)) {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
usedCategories.add(category)
|
2024-06-11 11:04:02 +02:00
|
|
|
}
|
2024-06-12 17:01:49 +02:00
|
|
|
return true
|
|
|
|
|
}
|
2024-06-11 11:04:02 +02:00
|
|
|
|
2024-06-12 17:01:49 +02:00
|
|
|
fun areRulesViolated(): Boolean = rules
|
2024-06-11 11:04:02 +02:00
|
|
|
.map { it.isRuleViolated(grid) }
|
|
|
|
|
.reduce { a, b -> a || b }
|
|
|
|
|
}
|