Day 13
This commit is contained in:
parent
9dfaa313a8
commit
ff834ac43a
2 changed files with 1441 additions and 0 deletions
1387
input/day13
Normal file
1387
input/day13
Normal file
File diff suppressed because it is too large
Load diff
54
src/day13.scala
Normal file
54
src/day13.scala
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue