From c9ca250a9ab66885abfa517b8592fe0417f52375 Mon Sep 17 00:00:00 2001 From: WanCW Date: Tue, 3 Dec 2024 14:09:56 +0800 Subject: [PATCH 1/3] complete day 3 --- 03-a.kts | 13 +++++++++++++ 03-b.kts | 21 +++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 03-a.kts create mode 100644 03-b.kts diff --git a/03-a.kts b/03-a.kts new file mode 100644 index 0000000..8451fe7 --- /dev/null +++ b/03-a.kts @@ -0,0 +1,13 @@ +import java.util.Scanner +import java.util.regex.Pattern + +val pattern: Pattern = Pattern.compile("mul\\([0-9]+,[0-9]+\\)") +val scanner = Scanner(System.`in`) + +var sum = 0 +while (true) { + val next: String = scanner.findWithinHorizon(pattern, 0) ?: break + + sum += next.replace("mul(", "").replace(")", "").split(",").map { it.toInt() }.let { (a, b) -> a*b } +} +println(sum) \ No newline at end of file diff --git a/03-b.kts b/03-b.kts new file mode 100644 index 0000000..ff03734 --- /dev/null +++ b/03-b.kts @@ -0,0 +1,21 @@ +import java.util.Scanner +import java.util.regex.Pattern + +val pattern: Pattern = Pattern.compile("mul\\([0-9]+,[0-9]+\\)|do\\(\\)|don't\\(\\)") + +val scanner = Scanner(System.`in`) + +var sum = 0 +var enabled = true +while (true) { + val next: String = scanner.findWithinHorizon(pattern, 0) ?: break + + when (next) { + "do()" -> enabled = true + "don't()" -> enabled = false + else -> if (enabled) { + sum += next.replace("mul(", "").replace(")", "").split(",").map { it.toInt() }.let { (a, b) -> a*b } + } + } +} +println(sum) \ No newline at end of file From cbbd95f7ab5756279cd547e0a5d31f141f786b42 Mon Sep 17 00:00:00 2001 From: WanCW Date: Wed, 4 Dec 2024 13:48:31 +0800 Subject: [PATCH 2/3] complete day 4 in straightforward way --- 04-a.kts | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 04-b.kts | 47 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 04-a.kts create mode 100644 04-b.kts diff --git a/04-a.kts b/04-a.kts new file mode 100644 index 0000000..672ec67 --- /dev/null +++ b/04-a.kts @@ -0,0 +1,59 @@ +import java.util.Scanner + +val scanner = Scanner(System.`in`) + +val matrix = ArrayList() + +while (scanner.hasNextLine()) { + val line = scanner.nextLine() + matrix.add(line.toCharArray()) +} + +var count = 0 + +matrix.forEachIndexed { row, line -> + line.forEachIndexed { col, char -> + count += searchFrom(matrix, row, col) + } +} +println(count) + +fun searchFrom(matrix: ArrayList, row: Int, col: Int): Int { + return (if (safeCheckMatrix(matrix, row, col, 'X') + && safeCheckMatrix(matrix, row, col + 1, 'M') + && safeCheckMatrix(matrix, row, col + 2, 'A') + && safeCheckMatrix(matrix, row, col + 3, 'S') + ) 1 else 0) + (if (safeCheckMatrix(matrix, row, col, 'X') + && safeCheckMatrix(matrix, row, col - 1, 'M') + && safeCheckMatrix(matrix, row, col - 2, 'A') + && safeCheckMatrix(matrix, row, col - 3, 'S') + ) 1 else 0) + (if (safeCheckMatrix(matrix, row, col, 'X') + && safeCheckMatrix(matrix, row + 1, col + 1, 'M') + && safeCheckMatrix(matrix, row + 2, col + 2, 'A') + && safeCheckMatrix(matrix, row + 3, col + 3, 'S') + ) 1 else 0) + (if (safeCheckMatrix(matrix, row, col, 'X') + && safeCheckMatrix(matrix, row + 1, col, 'M') + && safeCheckMatrix(matrix, row + 2, col, 'A') + && safeCheckMatrix(matrix, row + 3, col, 'S') + ) 1 else 0) + (if (safeCheckMatrix(matrix, row, col, 'X') + && safeCheckMatrix(matrix, row + 1, col - 1, 'M') + && safeCheckMatrix(matrix, row + 2, col - 2, 'A') + && safeCheckMatrix(matrix, row + 3, col - 3, 'S') + ) 1 else 0) + (if (safeCheckMatrix(matrix, row, col, 'X') + && safeCheckMatrix(matrix, row - 1, col + 1, 'M') + && safeCheckMatrix(matrix, row - 2, col + 2, 'A') + && safeCheckMatrix(matrix, row - 3, col + 3, 'S') + ) 1 else 0) + (if (safeCheckMatrix(matrix, row, col, 'X') + && safeCheckMatrix(matrix, row - 1, col, 'M') + && safeCheckMatrix(matrix, row - 2, col, 'A') + && safeCheckMatrix(matrix, row - 3, col, 'S') + ) 1 else 0) + (if (safeCheckMatrix(matrix, row, col, 'X') + && safeCheckMatrix(matrix, row - 1, col - 1, 'M') + && safeCheckMatrix(matrix, row - 2, col - 2, 'A') + && safeCheckMatrix(matrix, row - 3, col - 3, 'S') + ) 1 else 0) +} + +fun safeCheckMatrix(matrix: ArrayList, row: Int, col: Int, target: Char): Boolean { + return row in matrix.indices && col in matrix[row].indices && matrix[row][col] == target +} \ No newline at end of file diff --git a/04-b.kts b/04-b.kts new file mode 100644 index 0000000..a8cfe20 --- /dev/null +++ b/04-b.kts @@ -0,0 +1,47 @@ +import java.util.* + +val scanner = Scanner(System.`in`) + +val matrix = ArrayList() + +while (scanner.hasNextLine()) { + val line = scanner.nextLine() + matrix.add(line.toCharArray()) +} + +var count = 0 + +matrix.forEachIndexed { row, line -> + line.forEachIndexed { col, char -> + count += searchFrom(matrix, row, col) + } +} +println(count) + +fun searchFrom(matrix: ArrayList, row: Int, col: Int): Int { + return (if (safeCheckMatrix(matrix, row, col, 'A') && + safeCheckMatrix(matrix, row - 1, col - 1, 'M') && + safeCheckMatrix(matrix, row - 1, col + 1, 'M') && + safeCheckMatrix(matrix, row + 1, col - 1, 'S') && + safeCheckMatrix(matrix, row + 1, col + 1, 'S') + ) 1 else 0) + (if (safeCheckMatrix(matrix, row, col, 'A') && + safeCheckMatrix(matrix, row + 1, col - 1, 'M') && + safeCheckMatrix(matrix, row + 1, col + 1, 'M') && + safeCheckMatrix(matrix, row - 1, col - 1, 'S') && + safeCheckMatrix(matrix, row - 1, col + 1, 'S') + ) 1 else 0) + (if (safeCheckMatrix(matrix, row, col, 'A') && + safeCheckMatrix(matrix, row - 1, col - 1, 'M') && + safeCheckMatrix(matrix, row + 1, col - 1, 'M') && + safeCheckMatrix(matrix, row - 1, col + 1, 'S') && + safeCheckMatrix(matrix, row + 1, col + 1, 'S') + ) 1 else 0) + (if (safeCheckMatrix(matrix, row, col, 'A') && + safeCheckMatrix(matrix, row - 1, col + 1, 'M') && + safeCheckMatrix(matrix, row + 1, col + 1, 'M') && + safeCheckMatrix(matrix, row - 1, col - 1, 'S') && + safeCheckMatrix(matrix, row + 1, col - 1, 'S') + ) 1 else 0) +} + +fun safeCheckMatrix(matrix: ArrayList, row: Int, col: Int, target: Char): Boolean { + return row in matrix.indices && col in matrix[row].indices && matrix[row][col] == target +} \ No newline at end of file From 8c2851967478109cf3bfe3dedb64aef1eac4c618 Mon Sep 17 00:00:00 2001 From: WanCW Date: Thu, 5 Dec 2024 15:27:31 +0800 Subject: [PATCH 3/3] complete day 5 --- 05-a.kts | 39 +++++++++++++++++++++++++++++++++++++++ 05-b.kts | 31 +++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 05-a.kts create mode 100644 05-b.kts diff --git a/05-a.kts b/05-a.kts new file mode 100644 index 0000000..8c88f89 --- /dev/null +++ b/05-a.kts @@ -0,0 +1,39 @@ +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) \ No newline at end of file diff --git a/05-b.kts b/05-b.kts new file mode 100644 index 0000000..34e2db2 --- /dev/null +++ b/05-b.kts @@ -0,0 +1,31 @@ +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 fixed = pages.sortedWith { l, r -> if (l == r) 0 else if (rules[l]?.contains(r) == true) -1 else 1 } + + if ("$pages" != "$fixed") { + val fixedArray = fixed.toIntArray() + sum += fixedArray[fixedArray.size / 2] + } +} +println(sum) \ No newline at end of file