From cbbd95f7ab5756279cd547e0a5d31f141f786b42 Mon Sep 17 00:00:00 2001 From: WanCW Date: Wed, 4 Dec 2024 13:48:31 +0800 Subject: [PATCH] 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