Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- val terms = ArrayList<Term>()
- val variables = HashMap<String, Boolean>()
- val accessTable = HashMap<String, Boolean>()
- class Term {
- fun addVar(name: String) {
- vars.add(name)
- }
- fun nextState(): Boolean {
- if (++state == 1.shl(vars.size)) {
- state = 1
- return true
- }
- return false
- }
- fun checkState(): Boolean {
- return state < 1.shl(vars.size)
- }
- fun setVariables(): Boolean {
- var currentState = state
- var currentPos = 0
- while (currentState > 0) {
- if (currentState % 2 == 1) {
- if (!setVariable(vars[currentPos], true))
- return false
- } else {
- if (!setVariable(vars[currentPos], false))
- return false
- }
- currentState /= 2
- currentPos++
- }
- return true
- }
- fun setVariable(name: String, state: Boolean): Boolean {
- val value = if (name.startsWith('-')) !state else state
- val key = if (name.startsWith('-')) name.substring(1) else name
- if (accessTable[key]!!) {
- if (value != variables[key])
- return false
- } else {
- accessTable[key] = true
- variables[key] = value
- }
- return true
- }
- private val vars = ArrayList<String>()
- private var state = 1
- }
- fun main(args: Array<String>) {
- val input = readLine() ?: return
- var currentTerm = Term()
- input.split(' ').forEach {
- if (it == "0") {
- terms.add(currentTerm)
- currentTerm = Term()
- } else {
- val name = if (it.startsWith('-')) it.substring(1) else it
- accessTable[name] = false
- variables[name] = false
- currentTerm.addVar(it)
- }
- }
- terms.add(currentTerm)
- while(terms.last().checkState()) {
- var flag = true
- terms.forEach {
- if (!it.setVariables()) {
- flag = false
- return@forEach
- }
- }
- if (flag) {
- variables.forEach { name, value -> println("$name = $value") }
- println()
- }
- accessTable.forEach { s, _ -> accessTable[s] = false }
- var currentPos = 0
- var currentItem = terms[0]
- while (currentItem.nextState()) {
- if (++currentPos == terms.size) return
- currentItem = terms[currentPos]
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement