Files
aoc/day3/part1.scala
Xavier Morel f4f5d99ee8 Adding day 3
2018-12-05 10:54:57 +01:00

34 lines
776 B
Scala

import scala.io.StdIn.readLine
case class Claim(id: Int, x: Int, y: Int, w: Int, h: Int) {
val xe: Int = x + (w - 1)
val ye: Int = y + (h - 1)
def getSquares: Seq[(Int, Int)] =
for {
xi <- x to xe
yi <- y to ye
} yield (xi, yi)
}
object Claim {
def apply(input: String): Claim =
"#(\\d+) @ (\\d+),(\\d+): (\\d+)x(\\d+)".r.findFirstMatchIn(input).map {
m => Claim(m.group(1).toInt, m.group(2).toInt, m.group(3).toInt, m.group(4).toInt, m.group(5).toInt)
}.get
}
val input = Iterator
.continually(readLine)
.takeWhile(_ != null)
.map(Claim.apply)
val res = input
.flatMap(_.getSquares)
.foldLeft(Map.empty[(Int, Int), Int]) {
(acc, sq) => acc + (sq -> (acc.getOrElse(sq, 0) + 1))
}
.count(_._2 > 1)
println(res)