complete day 4 in straightforward way
This commit is contained in:
parent
c9ca250a9a
commit
cbbd95f7ab
2 changed files with 106 additions and 0 deletions
59
04-a.kts
Normal file
59
04-a.kts
Normal file
|
@ -0,0 +1,59 @@
|
|||
import java.util.Scanner
|
||||
|
||||
val scanner = Scanner(System.`in`)
|
||||
|
||||
val matrix = ArrayList<CharArray>()
|
||||
|
||||
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<CharArray>, 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<CharArray>, row: Int, col: Int, target: Char): Boolean {
|
||||
return row in matrix.indices && col in matrix[row].indices && matrix[row][col] == target
|
||||
}
|
47
04-b.kts
Normal file
47
04-b.kts
Normal file
|
@ -0,0 +1,47 @@
|
|||
import java.util.*
|
||||
|
||||
val scanner = Scanner(System.`in`)
|
||||
|
||||
val matrix = ArrayList<CharArray>()
|
||||
|
||||
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<CharArray>, 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<CharArray>, row: Int, col: Int, target: Char): Boolean {
|
||||
return row in matrix.indices && col in matrix[row].indices && matrix[row][col] == target
|
||||
}
|
Loading…
Add table
Reference in a new issue