Day 04
This commit is contained in:
parent
64ce0c862d
commit
0e0dc984dd
2 changed files with 202 additions and 0 deletions
62
src/day04.scala
Normal file
62
src/day04.scala
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
package aoc
|
||||
package day04
|
||||
|
||||
val dayNumber = "04"
|
||||
|
||||
@main def part1: Unit =
|
||||
println(part1(loadInput(dayNumber)))
|
||||
|
||||
@main def part2: Unit =
|
||||
println(part2(loadInput(dayNumber)))
|
||||
|
||||
def part1(input: String): String =
|
||||
val grid = input.split("\n")
|
||||
val coords =
|
||||
for
|
||||
y <- 0 until grid.length
|
||||
x <- 0 until grid.head.length
|
||||
yield (x, y) -> grid(y)(x)
|
||||
val lettersMap = coords.toMap
|
||||
val xs = coords.collect { case (x, y) -> 'X' => (x, y) }
|
||||
|
||||
val offsets = (
|
||||
for
|
||||
ox <- -1 to 1
|
||||
oy <- -1 to 1
|
||||
if !(ox == 0 && oy == 0)
|
||||
yield (ox, oy)
|
||||
).map((ox, oy) => List.iterate((0, 0), 4)((x, y) => (x + ox, y + oy)))
|
||||
|
||||
xs.map((x, y) =>
|
||||
offsets
|
||||
.map(_.flatMap((ox, oy) => lettersMap.get((x + ox, y + oy))))
|
||||
.count(_ == List('X', 'M', 'A', 'S'))
|
||||
).sum
|
||||
.toString
|
||||
|
||||
def part2(input: String): String =
|
||||
val grid = input.split("\n")
|
||||
val coords =
|
||||
for
|
||||
y <- 0 until grid.length
|
||||
x <- 0 until grid.head.length
|
||||
yield (x, y) -> grid(y)(x)
|
||||
val lettersMap = coords.toMap
|
||||
val as = coords.collect { case (x, y) -> 'A' => (x, y) }
|
||||
|
||||
val offsets = List(
|
||||
(-1 -> -1, 1 -> 1),
|
||||
(-1 -> 1, 1 -> -1)
|
||||
).flatMap((a, b) =>
|
||||
List(
|
||||
List(a, 0 -> 0, b),
|
||||
List(b, 0 -> 0, a)
|
||||
)
|
||||
)
|
||||
|
||||
as.map((x, y) =>
|
||||
offsets
|
||||
.map(_.flatMap((ox, oy) => lettersMap.get((x + ox, y + oy))))
|
||||
.count(_ == List('M', 'A', 'S'))
|
||||
).count(_ == 2)
|
||||
.toString
|
||||
Loading…
Add table
Add a link
Reference in a new issue