This commit is contained in:
Paul-Henri Froidmont 2023-12-13 10:27:35 +01:00
parent 9dfaa313a8
commit ff834ac43a
Signed by: phfroidmont
GPG key ID: BE948AFD7E7873BE
2 changed files with 1441 additions and 0 deletions

1387
input/day13 Normal file

File diff suppressed because it is too large Load diff

54
src/day13.scala Normal file
View file

@ -0,0 +1,54 @@
package aoc
package day13
val dayNumber = "13"
@main def part1: Unit =
println(part1(loadInput(dayNumber)))
@main def part2: Unit =
println(part2(loadInput(dayNumber)))
def transpose(grid: List[String]): List[String] =
List.tabulate(grid.head.length)(x =>
Array.tabulate(grid.length)(y => grid(y)(x)).mkString
)
def part1(input: String): String =
def findReflection(rows: List[String]): Option[Int] =
(1 until rows.length).find(i =>
val (up, down) = rows.splitAt(i)
up.reverse.zip(down).forall(_ == _)
)
input
.split("\n\n")
.map(_.split('\n').toList)
.flatMap(pattern =>
findReflection(pattern)
.map(_ * 100)
.orElse(findReflection(transpose(pattern)))
)
.sum
.toString
def part2(input: String): String =
def findReflection(rows: List[String]): Option[Int] =
(1 until rows.length).find(i =>
val (up, down) = rows.splitAt(i)
val linesToCompare = up.reverse.zip(down)
val area = linesToCompare.length * linesToCompare.head._1.length
val differencesCount = linesToCompare.map(_.zip(_).count(_ == _)).sum
area - differencesCount == 1
)
input
.split("\n\n")
.map(_.split('\n').toList)
.flatMap(pattern =>
findReflection(pattern)
.map(_ * 100)
.orElse(findReflection(transpose(pattern)))
)
.sum
.toString