This commit is contained in:
Andrew Glaze
2024-12-04 11:35:42 -05:00
parent 0478b6d7b3
commit 72acbeb8a0
4 changed files with 117 additions and 7 deletions

View File

@@ -1,13 +1,8 @@
package day03
import kotlin.io.println
class Day03 {
fun parse(input: String): String {
throw NotImplementedError()
}
fun part1(input: String): Int {
val regex = Regex("mul\\((\\d{1,3}),(\\d{1,3})\\)")
val muls = regex.findAll(input)
@@ -47,6 +42,5 @@ class Day03 {
.sum()
return product
}
}

View File

@@ -0,0 +1,68 @@
package day04
import kotlin.io.println
class Day04 {
fun part1(input: String): Int {
val lines = input.lines().map { it.toList() }
var count = 0
for (x in 0..<lines.count()) {
for (y in 0..<lines[x].count()) {
if (lines[x][y] == 'X') {
count += checkMASPart1(x, y, lines)
}
}
}
return count
}
fun checkMASPart1(x: Int, y: Int, lines: List<List<Char>>): Int {
val maxX = lines.count() - 1
val maxY = lines[0].count() - 1
var count = 0
for (dX in -1..1) {
if (x+(dX*3) < 0 || x+(dX*3) > maxX) { continue }
for (dY in -1..1) {
if (y+(dY*3) < 0 || y+(dY*3) > maxY) { continue }
if (lines[x+dX][y+dY] == 'M' && lines[x+(dX*2)][y+(dY*2)] == 'A' && lines[x+(dX*3)][y+(dY*3)] == 'S') {
count += 1
}
}
}
return count
}
fun part2(input: String): Int {
val lines = input.lines().map { it.toList() }
var count = 0
for (x in 0..<lines.count()) {
for (y in 0..<lines[x].count()) {
if (lines[x][y] == 'A') {
count += checkMASPart2(x, y, lines)
}
}
}
return count
}
fun checkMASPart2(x: Int, y: Int, lines: List<List<Char>>): Int {
val maxX = lines.count() - 1
val maxY = lines[0].count() - 1
if (x-1 < 0 || x+1 > maxX) { return 0 }
if (y-1 < 0 || y+1 > maxY) { return 0 }
val topLeft = lines[x-1][y-1]
val bottomRight = lines[x+1][y+1]
if (topLeft != bottomRight && (bottomRight == 'M' || bottomRight == 'S') && (topLeft == 'M' || topLeft == 'S')) {
val topRight = lines[x-1][y+1]
val bottomLeft = lines[x+1][y-1]
if (topRight != bottomLeft && (bottomLeft == 'M' || bottomLeft == 'S') && (topRight == 'M' || topRight == 'S')) {
return 1
}
}
return 0
}
}

View File

@@ -1,4 +1,3 @@
package day03
import kotlin.test.Test

View File

@@ -0,0 +1,49 @@
package day04
import kotlin.test.Test
import util.InputDownloader
class Day04Test {
val dayNum = 4
val day = Day04()
val input = InputDownloader().getInput(dayNum)
val example = """MMMSXXMASM
MSAMXMSMSA
AMXSXMAAMM
MSAMASMSMX
XMASAMXAMM
XXAMMXXAMA
SMSMSASXSS
SAXAMASAAA
MAMMMXMMMM
MXMXAXMASX"""
@Test fun part1Example() {
part1(example, 18)
}
@Test fun part1Solution() {
part1(input, 2545)
}
@Test fun part2Example() {
part2(example, 9)
}
@Test fun part2Solution() {
part2(input, 1886)
}
fun part1(input: String, expected: Int) {
val output = day.part1(input)
println("output: $output")
assert(output == expected)
}
fun part2(input: String, expected: Int) {
val output = day.part2(input)
println("output: $output")
assert(output == expected)
}
}