From 4ae0f0c1b3a8288242686eeeff8d0e567c0fa33d Mon Sep 17 00:00:00 2001 From: Soren Date: Tue, 4 Dec 2018 22:24:35 -0800 Subject: [PATCH] Day 5 finaLLY --- aoc/src/main/scala/aoc/y2018/Day05.scala | 40 ++++++++++++++++++++++ aoc/src/main/scala/aoc/y2018/package.scala | 1 + 2 files changed, 41 insertions(+) create mode 100644 aoc/src/main/scala/aoc/y2018/Day05.scala diff --git a/aoc/src/main/scala/aoc/y2018/Day05.scala b/aoc/src/main/scala/aoc/y2018/Day05.scala new file mode 100644 index 0000000..bf7f05d --- /dev/null +++ b/aoc/src/main/scala/aoc/y2018/Day05.scala @@ -0,0 +1,40 @@ +package aoc.y2018 +import aoc.Day + +object Day05 extends Day { + + def pair(c1: Char, c2: Char): Boolean = { + val c1l = c1.isLower + val c2l = c2.isLower + (c1l && !c2l && c1 == c2.toLower) || (!c1l && c2l && c1.toLower == c2) + } + + def simpleLength(s: String): Int = { + s.foldLeft("") { + case (stack, ne) => { + if (stack.isEmpty) { + ne +: stack + } else { + val peek = stack.head + if (pair(ne, peek)) { + stack.tail + } else { + ne +: stack + } + } + } + } + .length + } + + override def part1(input: String): String = { + simpleLength(input).toString + } + + override def part2(input: String): String = { + val allChars = input.map(_.toLower).distinct.sortBy(c => input.count(_ == c)) + val mapped = allChars.par.map(c => simpleLength(input.filter(_.toLower != c))) + mapped.min.toString + } + +} diff --git a/aoc/src/main/scala/aoc/y2018/package.scala b/aoc/src/main/scala/aoc/y2018/package.scala index b9db9b4..7afd2f3 100644 --- a/aoc/src/main/scala/aoc/y2018/package.scala +++ b/aoc/src/main/scala/aoc/y2018/package.scala @@ -7,6 +7,7 @@ package object y2018 extends Year { "2" -> Day02, "3" -> Day03, "4" -> Day04, + "5" -> Day05 ) }