Advertisement
Guest User

Untitled

a guest
Dec 18th, 2020
349
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.06 KB | None | 0 0
  1. fun main() {
  2. var input = getInput(2020, 19)
  3. val (rulesTxt, messages) = input.split("\n\n")
  4. val rules = rulesTxt.split("\n").map { val parts = it.split(":");parts[0].toInt() to parts[1].trim() }.toMap().toSortedMap()
  5.  
  6. fun matchesRules(msg: String, msgr: List<Int>): Boolean {
  7. if (msg.length == 0) {
  8. return msgr.isEmpty()
  9. }
  10. if (msgr.isEmpty()) {
  11. return false
  12. }
  13. val first = rules[msgr.first()]!!
  14. if (first[0] == '"') {
  15. return if (msg.startsWith(first[1])) {
  16. matchesRules(msg.drop(1), msgr.drop(1))
  17. } else {
  18. false
  19. }
  20. }
  21. return first.split("|").map { it.trim() }.firstOrNull {
  22. matchesRules(msg, it.split(" ").map { it.toInt() } + msgr.drop(1))
  23. } != null
  24. }
  25.  
  26. println(messages.split("\n").count { matchesRules(it, listOf(0)) })
  27.  
  28. rules[8] = "42 | 42 8"
  29. rules[11] = "42 31 | 42 11 31"
  30. println(messages.split("\n").count { matchesRules(it, listOf(0)) })
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement