val white, black, purple, red, green, orange, none
= Value
}
@annotation.tailrec
def fix
(fixed
: List
[List
[String
]] = List.
empty, lines
: List
[String
]): List
[List
[String
]] = { if (!lines.
contains("")) { println("""lines does not contain "".""")
println(lines)
lines :: fixed
println("""lines contains "".""")
println(lines)
val (current, unfixed
) = lines.
splitAt(lines.
indexOf("")) println(s"current = $current")
println(s"unfixed = $unfixed")
fix(current :: fixed, unfixed.tail)
}
}
def cut
(wires
: Seq
[Wire.
Value], prev
: Wire.
Value = Wire.
none): Boolean
= { case Wire.
white => current
== Wire.
white || current
== Wire.
black case Wire.
red => current
!= Wire.
green case Wire.
black => current
== Wire.
white || current
== Wire.
green || current
== Wire.
orange case Wire.
orange => current
!= Wire.
red && current
!= Wire.
black case Wire.
green => current
!= Wire.
orange && current
!= Wire.
white case Wire.
purple => current
== Wire.
purple || current
== Wire.
orange || current
== Wire.
green || current
== Wire.
white }
}
fix
(lines
= io.
Source.
stdin.
getLines.
toList).
map(_.
map(Wire.
withName)).
map(cut
(_)).
reverse.
foreach(s
=> println
(if (s
) "Bomb defused" else "Boom"))}
b2JqZWN0IE1haW4gZXh0ZW5kcyBBcHAgewogIG9iamVjdCBXaXJlIGV4dGVuZHMgRW51bWVyYXRpb24gewogICAgdmFsIHdoaXRlLCBibGFjaywgcHVycGxlLCByZWQsIGdyZWVuLCBvcmFuZ2UsIG5vbmUgPSBWYWx1ZQogIH0KICBAYW5ub3RhdGlvbi50YWlscmVjCiAgZGVmIGZpeChmaXhlZDogTGlzdFtMaXN0W1N0cmluZ11dID0gTGlzdC5lbXB0eSwgbGluZXM6IExpc3RbU3RyaW5nXSk6IExpc3RbTGlzdFtTdHJpbmddXSA9IHsKICAgIGlmICghbGluZXMuY29udGFpbnMoIiIpKSB7CiAgICAgIHByaW50bG4oIiIibGluZXMgZG9lcyBub3QgY29udGFpbiAiIi4iIiIpCiAgICAgIHByaW50bG4obGluZXMpCiAgICAgIGxpbmVzIDo6IGZpeGVkCiAgICB9IGVsc2UgewogICAgICBwcmludGxuKCIiImxpbmVzIGNvbnRhaW5zICIiLiIiIikKICAgICAgcHJpbnRsbihsaW5lcykKICAgICAgdmFsIChjdXJyZW50LCB1bmZpeGVkKSA9IGxpbmVzLnNwbGl0QXQobGluZXMuaW5kZXhPZigiIikpCiAgICAgIHByaW50bG4ocyJjdXJyZW50ID0gJGN1cnJlbnQiKQogICAgICBwcmludGxuKHMidW5maXhlZCA9ICR1bmZpeGVkIikKICAgICAgZml4KGN1cnJlbnQgOjogZml4ZWQsIHVuZml4ZWQudGFpbCkKICAgIH0KICB9CiAgZGVmIGN1dCh3aXJlczogU2VxW1dpcmUuVmFsdWVdLCBwcmV2OiBXaXJlLlZhbHVlID0gV2lyZS5ub25lKTogQm9vbGVhbiA9IHsKICAgIGlmICh3aXJlcy5pc0VtcHR5KSByZXR1cm4gdHJ1ZQogICAgdmFsIGN1cnJlbnQgPSB3aXJlcy5oZWFkCiAgICB2YWwgYm9vbSA9IHByZXYgbWF0Y2ggewogICAgICBjYXNlIFdpcmUud2hpdGUgPT4gY3VycmVudCA9PSBXaXJlLndoaXRlIHx8IGN1cnJlbnQgPT0gV2lyZS5ibGFjawogICAgICBjYXNlIFdpcmUucmVkID0+IGN1cnJlbnQgIT0gV2lyZS5ncmVlbgogICAgICBjYXNlIFdpcmUuYmxhY2sgPT4gY3VycmVudCA9PSBXaXJlLndoaXRlIHx8IGN1cnJlbnQgPT0gV2lyZS5ncmVlbiB8fCBjdXJyZW50ID09IFdpcmUub3JhbmdlCiAgICAgIGNhc2UgV2lyZS5vcmFuZ2UgPT4gY3VycmVudCAhPSBXaXJlLnJlZCAmJiBjdXJyZW50ICE9IFdpcmUuYmxhY2sKICAgICAgY2FzZSBXaXJlLmdyZWVuID0+IGN1cnJlbnQgIT0gV2lyZS5vcmFuZ2UgJiYgY3VycmVudCAhPSBXaXJlLndoaXRlCiAgICAgIGNhc2UgV2lyZS5wdXJwbGUgPT4gY3VycmVudCA9PSBXaXJlLnB1cnBsZSB8fCBjdXJyZW50ID09IFdpcmUub3JhbmdlIHx8IGN1cnJlbnQgPT0gV2lyZS5ncmVlbiB8fCBjdXJyZW50ID09IFdpcmUud2hpdGUKICAgICAgY2FzZSBXaXJlLm5vbmUgPT4gZmFsc2UKICAgIH0KICAgIGlmIChib29tKSBmYWxzZSBlbHNlIGN1dCh3aXJlcy50YWlsLCBjdXJyZW50KQogIH0KICBmaXgobGluZXMgPSBpby5Tb3VyY2Uuc3RkaW4uZ2V0TGluZXMudG9MaXN0KS5tYXAoXy5tYXAoV2lyZS53aXRoTmFtZSkpLm1hcChjdXQoXykpLnJldmVyc2UuZm9yZWFjaChzID0+IHByaW50bG4oaWYgKHMpICJCb21iIGRlZnVzZWQiIGVsc2UgIkJvb20iKSkKfQ==
lines contains "".
List(white, red, green, white, , white, orange, green, white)
current = List(white, red, green, white)
unfixed = List(, white, orange, green, white)
lines does not contain "".
List(white, orange, green, white)
Bomb defused
Boom