-
Notifications
You must be signed in to change notification settings - Fork 3
/
Day05.scala
27 lines (20 loc) · 893 Bytes
/
Day05.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package AdventOfCode2018
import scala.annotation.tailrec
object Day05:
def react(l: Char, r: Char): Boolean = (l.toLower == r.toLower) && (l.isLower ^ r.isLower)
def shorten(input: String): Int =
@tailrec
def helper(left: List[Char], right: List[Char]): Int = (left, right) match
case (left, Nil) => left.size
case (left :: ls, right :: rs) if react(left, right) => helper(ls, rs)
case (left, right :: rs) => helper(right :: left, rs)
helper(Nil, input.toList)
end shorten
def part1(input: String): Int = shorten(input)
def part2(input: String): Int =
val variations = for unitType <- 'a' to 'z' yield input.filter(_.toLower != unitType)
variations.map(shorten).min
def main(args: Array[String]): Unit =
val data = io.Source.fromResource("AdventOfCode2018/Day05.txt").mkString.trim
println(part1(data))
println(part2(data))