package domain import kotlin.reflect.KClass class Game( val grid: Grid, val rules: List ) { val horizontalRules = rules.filterIsInstance() val verticalRules = rules.filterIsInstance() fun areCategoriesValid(): Boolean { val usedCategories = mutableSetOf>() for (row in grid.rows) { val category = row.first().options.first()::class if (usedCategories.contains(category)) { return false } usedCategories.add(category) } return true } fun areRulesViolated(): Boolean = rules .map { it.isRuleViolated(grid) } .reduce { a, b -> a || b } }