import java.util.Scanner val scanner = Scanner(System.`in`) val rules = HashMap>() while (scanner.hasNextLine()) { val line = scanner.nextLine() if (line == "") { break; } val (before, after) = line.split("|").map(String::toInt) if (!rules.contains(before)) { rules[before] = HashSet() } rules[before]!!.add(after) } var sum = 0 while (scanner.hasNextLine()) { val line = scanner.nextLine() val pages = line.split(",").map(String::toInt) val result = pages.fold(Pair(HashSet(), true)) { (appeared, isSafe), page -> val shouldBeAfter = rules[page]?.toSet() ?: emptySet() val violateRule = appeared.intersect(shouldBeAfter) val stillSafe = isSafe && violateRule.isEmpty() appeared.add(page) Pair(appeared, stillSafe) } if (result.second) { val pagesArray = pages.toIntArray() sum += pagesArray[pagesArray.size / 2] } } println(sum)