From b9465481a1cd4d85dfb116875eaea06dcbea781d Mon Sep 17 00:00:00 2001 From: Paul-Henri Froidmont Date: Mon, 5 Dec 2022 07:00:43 +0100 Subject: [PATCH] Day 5 --- aoc/resources/day5Input.txt | 514 ++++++++++++++++++++++++++++++++++++ aoc/src/Day5.scala | 49 ++++ 2 files changed, 563 insertions(+) create mode 100644 aoc/resources/day5Input.txt create mode 100644 aoc/src/Day5.scala diff --git a/aoc/resources/day5Input.txt b/aoc/resources/day5Input.txt new file mode 100644 index 0000000..45d04a1 --- /dev/null +++ b/aoc/resources/day5Input.txt @@ -0,0 +1,514 @@ + [B] [B] [S] + [M] [P] [L] [B] [J] + [D] [R] [V] [D] [Q] [D] + [T] [R] [Z] [H] [H] [G] [C] + [P] [W] [J] [B] [J] [F] [J] [S] +[N] [S] [Z] [V] [M] [N] [Z] [F] [M] +[W] [Z] [H] [D] [H] [G] [Q] [S] [W] +[B] [L] [Q] [W] [S] [L] [J] [W] [Z] + 1 2 3 4 5 6 7 8 9 + +move 3 from 5 to 2 +move 5 from 3 to 1 +move 4 from 4 to 9 +move 6 from 1 to 4 +move 6 from 8 to 7 +move 5 from 2 to 7 +move 1 from 5 to 4 +move 11 from 9 to 7 +move 1 from 1 to 9 +move 6 from 4 to 6 +move 12 from 6 to 7 +move 1 from 9 to 2 +move 2 from 4 to 6 +move 1 from 8 to 9 +move 1 from 9 to 4 +move 1 from 6 to 1 +move 2 from 7 to 5 +move 2 from 6 to 7 +move 2 from 1 to 6 +move 2 from 4 to 7 +move 1 from 5 to 4 +move 1 from 5 to 6 +move 1 from 6 to 1 +move 1 from 1 to 3 +move 1 from 4 to 1 +move 1 from 1 to 4 +move 1 from 4 to 5 +move 1 from 3 to 9 +move 1 from 5 to 1 +move 4 from 2 to 1 +move 20 from 7 to 8 +move 24 from 7 to 3 +move 3 from 6 to 4 +move 1 from 1 to 9 +move 1 from 9 to 3 +move 2 from 1 to 2 +move 2 from 4 to 1 +move 2 from 2 to 1 +move 14 from 3 to 6 +move 6 from 1 to 6 +move 10 from 3 to 2 +move 1 from 2 to 3 +move 6 from 6 to 5 +move 2 from 3 to 4 +move 13 from 8 to 4 +move 1 from 9 to 7 +move 1 from 6 to 3 +move 10 from 4 to 2 +move 1 from 3 to 6 +move 2 from 8 to 7 +move 1 from 7 to 2 +move 11 from 6 to 8 +move 2 from 6 to 1 +move 2 from 1 to 3 +move 1 from 8 to 6 +move 1 from 3 to 9 +move 3 from 8 to 2 +move 1 from 3 to 6 +move 2 from 6 to 4 +move 1 from 6 to 5 +move 11 from 2 to 9 +move 2 from 4 to 6 +move 1 from 6 to 1 +move 1 from 1 to 5 +move 11 from 2 to 7 +move 12 from 7 to 5 +move 1 from 6 to 2 +move 10 from 8 to 7 +move 6 from 5 to 3 +move 4 from 5 to 4 +move 11 from 9 to 7 +move 7 from 4 to 9 +move 4 from 9 to 6 +move 12 from 7 to 3 +move 1 from 8 to 9 +move 1 from 5 to 1 +move 1 from 1 to 2 +move 1 from 6 to 9 +move 3 from 4 to 1 +move 1 from 9 to 7 +move 8 from 7 to 2 +move 3 from 6 to 1 +move 8 from 2 to 3 +move 1 from 7 to 4 +move 2 from 7 to 2 +move 1 from 5 to 2 +move 8 from 5 to 1 +move 3 from 9 to 6 +move 1 from 6 to 2 +move 1 from 4 to 5 +move 1 from 5 to 4 +move 2 from 9 to 3 +move 1 from 8 to 6 +move 1 from 4 to 5 +move 1 from 5 to 1 +move 1 from 6 to 8 +move 1 from 8 to 1 +move 7 from 1 to 5 +move 11 from 3 to 7 +move 1 from 1 to 9 +move 4 from 2 to 1 +move 5 from 1 to 3 +move 1 from 5 to 9 +move 1 from 6 to 3 +move 6 from 2 to 1 +move 5 from 7 to 3 +move 1 from 6 to 8 +move 1 from 8 to 4 +move 6 from 7 to 9 +move 4 from 9 to 8 +move 2 from 8 to 9 +move 2 from 5 to 8 +move 13 from 3 to 7 +move 1 from 3 to 8 +move 2 from 1 to 9 +move 3 from 1 to 5 +move 1 from 4 to 1 +move 6 from 5 to 9 +move 8 from 9 to 8 +move 2 from 7 to 3 +move 1 from 9 to 7 +move 1 from 5 to 2 +move 5 from 9 to 8 +move 1 from 8 to 7 +move 1 from 2 to 9 +move 7 from 1 to 2 +move 4 from 7 to 5 +move 6 from 2 to 3 +move 1 from 2 to 1 +move 10 from 8 to 9 +move 3 from 8 to 9 +move 4 from 5 to 1 +move 2 from 8 to 6 +move 9 from 9 to 8 +move 1 from 9 to 6 +move 8 from 8 to 4 +move 12 from 3 to 5 +move 1 from 4 to 2 +move 3 from 8 to 1 +move 3 from 9 to 7 +move 1 from 3 to 2 +move 1 from 6 to 9 +move 8 from 3 to 8 +move 6 from 4 to 5 +move 1 from 7 to 6 +move 1 from 8 to 1 +move 6 from 8 to 7 +move 1 from 3 to 6 +move 7 from 1 to 5 +move 1 from 4 to 9 +move 4 from 6 to 5 +move 13 from 7 to 5 +move 1 from 8 to 2 +move 2 from 9 to 3 +move 4 from 7 to 2 +move 1 from 3 to 8 +move 1 from 3 to 4 +move 4 from 1 to 2 +move 1 from 5 to 7 +move 23 from 5 to 6 +move 1 from 8 to 6 +move 1 from 9 to 4 +move 5 from 2 to 6 +move 1 from 4 to 9 +move 1 from 9 to 3 +move 1 from 7 to 8 +move 1 from 4 to 3 +move 1 from 3 to 7 +move 1 from 7 to 5 +move 1 from 8 to 7 +move 12 from 6 to 1 +move 1 from 2 to 5 +move 1 from 3 to 1 +move 20 from 5 to 2 +move 14 from 2 to 4 +move 11 from 2 to 6 +move 1 from 7 to 8 +move 13 from 1 to 8 +move 9 from 8 to 4 +move 3 from 8 to 6 +move 10 from 6 to 8 +move 6 from 6 to 4 +move 4 from 8 to 5 +move 26 from 4 to 2 +move 2 from 5 to 2 +move 5 from 8 to 1 +move 1 from 8 to 3 +move 2 from 1 to 3 +move 2 from 3 to 7 +move 27 from 2 to 7 +move 2 from 8 to 1 +move 1 from 3 to 7 +move 6 from 6 to 2 +move 4 from 6 to 1 +move 4 from 6 to 4 +move 2 from 5 to 4 +move 4 from 2 to 1 +move 3 from 1 to 8 +move 1 from 2 to 8 +move 8 from 4 to 3 +move 1 from 2 to 8 +move 5 from 8 to 6 +move 1 from 4 to 2 +move 1 from 2 to 1 +move 6 from 3 to 1 +move 13 from 7 to 1 +move 1 from 2 to 8 +move 1 from 8 to 2 +move 1 from 6 to 2 +move 1 from 2 to 8 +move 1 from 8 to 2 +move 14 from 7 to 1 +move 5 from 6 to 3 +move 2 from 3 to 1 +move 3 from 3 to 2 +move 3 from 7 to 4 +move 1 from 4 to 9 +move 1 from 9 to 7 +move 2 from 3 to 6 +move 5 from 2 to 7 +move 1 from 7 to 6 +move 5 from 7 to 6 +move 2 from 6 to 7 +move 1 from 6 to 8 +move 1 from 4 to 7 +move 4 from 6 to 9 +move 35 from 1 to 8 +move 3 from 7 to 2 +move 1 from 2 to 5 +move 24 from 8 to 3 +move 1 from 5 to 8 +move 13 from 3 to 6 +move 2 from 2 to 6 +move 6 from 6 to 4 +move 11 from 1 to 6 +move 12 from 6 to 1 +move 1 from 8 to 1 +move 2 from 1 to 3 +move 5 from 4 to 1 +move 1 from 6 to 4 +move 1 from 8 to 3 +move 13 from 3 to 9 +move 3 from 8 to 2 +move 3 from 2 to 7 +move 1 from 3 to 6 +move 3 from 7 to 8 +move 14 from 1 to 3 +move 1 from 1 to 9 +move 6 from 3 to 8 +move 17 from 8 to 6 +move 1 from 3 to 7 +move 1 from 7 to 8 +move 26 from 6 to 7 +move 1 from 1 to 9 +move 3 from 4 to 1 +move 2 from 3 to 8 +move 1 from 8 to 4 +move 14 from 9 to 7 +move 12 from 7 to 3 +move 2 from 1 to 4 +move 2 from 7 to 8 +move 2 from 8 to 3 +move 4 from 9 to 8 +move 1 from 4 to 7 +move 1 from 1 to 3 +move 2 from 4 to 2 +move 24 from 7 to 6 +move 1 from 8 to 1 +move 1 from 7 to 2 +move 1 from 7 to 9 +move 3 from 2 to 9 +move 1 from 1 to 6 +move 5 from 8 to 2 +move 5 from 3 to 4 +move 1 from 2 to 5 +move 3 from 9 to 8 +move 2 from 4 to 9 +move 16 from 6 to 3 +move 14 from 3 to 8 +move 1 from 7 to 9 +move 8 from 6 to 9 +move 4 from 8 to 5 +move 8 from 8 to 3 +move 1 from 5 to 8 +move 1 from 2 to 4 +move 4 from 8 to 7 +move 1 from 5 to 6 +move 12 from 9 to 5 +move 15 from 5 to 8 +move 1 from 6 to 1 +move 2 from 2 to 6 +move 3 from 4 to 2 +move 4 from 2 to 7 +move 8 from 7 to 3 +move 1 from 1 to 4 +move 3 from 6 to 9 +move 16 from 8 to 3 +move 3 from 9 to 4 +move 1 from 8 to 9 +move 2 from 9 to 4 +move 24 from 3 to 8 +move 19 from 8 to 7 +move 2 from 8 to 7 +move 7 from 4 to 5 +move 13 from 7 to 5 +move 4 from 7 to 8 +move 7 from 8 to 1 +move 3 from 5 to 3 +move 3 from 7 to 2 +move 1 from 1 to 4 +move 1 from 7 to 2 +move 3 from 2 to 4 +move 8 from 3 to 1 +move 11 from 1 to 3 +move 12 from 3 to 4 +move 1 from 2 to 5 +move 18 from 3 to 8 +move 3 from 1 to 9 +move 1 from 3 to 5 +move 15 from 5 to 4 +move 4 from 5 to 1 +move 23 from 4 to 6 +move 3 from 1 to 6 +move 13 from 8 to 3 +move 25 from 6 to 2 +move 1 from 9 to 5 +move 5 from 3 to 8 +move 17 from 2 to 8 +move 4 from 4 to 1 +move 1 from 9 to 7 +move 5 from 2 to 6 +move 2 from 2 to 4 +move 1 from 9 to 4 +move 6 from 3 to 9 +move 16 from 8 to 3 +move 2 from 1 to 8 +move 1 from 7 to 4 +move 5 from 4 to 7 +move 1 from 5 to 3 +move 2 from 7 to 1 +move 9 from 8 to 4 +move 3 from 7 to 2 +move 2 from 8 to 3 +move 10 from 4 to 1 +move 1 from 2 to 3 +move 5 from 3 to 7 +move 2 from 8 to 9 +move 2 from 9 to 8 +move 1 from 2 to 1 +move 3 from 9 to 6 +move 2 from 2 to 8 +move 4 from 7 to 3 +move 4 from 8 to 6 +move 1 from 7 to 1 +move 1 from 4 to 8 +move 4 from 3 to 4 +move 4 from 4 to 2 +move 6 from 1 to 2 +move 1 from 4 to 3 +move 5 from 3 to 8 +move 6 from 3 to 8 +move 2 from 2 to 8 +move 3 from 2 to 9 +move 8 from 1 to 6 +move 3 from 2 to 7 +move 2 from 7 to 2 +move 13 from 6 to 5 +move 7 from 5 to 9 +move 3 from 2 to 7 +move 1 from 2 to 9 +move 2 from 5 to 2 +move 3 from 8 to 5 +move 5 from 3 to 4 +move 2 from 2 to 1 +move 9 from 8 to 7 +move 1 from 1 to 8 +move 6 from 5 to 2 +move 4 from 2 to 8 +move 4 from 7 to 1 +move 1 from 2 to 6 +move 5 from 1 to 6 +move 1 from 8 to 2 +move 1 from 2 to 9 +move 13 from 6 to 5 +move 2 from 7 to 2 +move 1 from 8 to 7 +move 4 from 4 to 7 +move 1 from 4 to 1 +move 4 from 8 to 4 +move 6 from 5 to 9 +move 2 from 1 to 4 +move 1 from 8 to 6 +move 11 from 9 to 5 +move 1 from 7 to 8 +move 1 from 8 to 1 +move 1 from 1 to 3 +move 6 from 4 to 8 +move 1 from 8 to 4 +move 1 from 1 to 6 +move 6 from 9 to 7 +move 1 from 4 to 5 +move 3 from 2 to 1 +move 1 from 8 to 2 +move 1 from 3 to 2 +move 20 from 5 to 6 +move 3 from 1 to 6 +move 2 from 2 to 9 +move 3 from 8 to 3 +move 5 from 3 to 8 +move 1 from 1 to 6 +move 2 from 8 to 9 +move 7 from 9 to 5 +move 3 from 5 to 4 +move 3 from 8 to 3 +move 9 from 7 to 9 +move 1 from 8 to 5 +move 7 from 7 to 9 +move 2 from 5 to 2 +move 9 from 9 to 2 +move 1 from 7 to 3 +move 2 from 9 to 1 +move 2 from 5 to 9 +move 2 from 1 to 4 +move 2 from 3 to 7 +move 18 from 6 to 7 +move 7 from 9 to 1 +move 7 from 6 to 8 +move 4 from 4 to 9 +move 4 from 8 to 3 +move 2 from 8 to 2 +move 1 from 8 to 5 +move 1 from 4 to 7 +move 1 from 5 to 1 +move 2 from 9 to 3 +move 12 from 2 to 5 +move 6 from 5 to 6 +move 5 from 7 to 2 +move 3 from 6 to 4 +move 1 from 4 to 7 +move 1 from 4 to 1 +move 2 from 5 to 8 +move 1 from 8 to 2 +move 2 from 9 to 7 +move 8 from 1 to 8 +move 11 from 7 to 1 +move 5 from 8 to 2 +move 7 from 7 to 5 +move 1 from 9 to 4 +move 1 from 7 to 5 +move 7 from 5 to 7 +move 2 from 6 to 1 +move 1 from 8 to 2 +move 12 from 1 to 7 +move 2 from 1 to 2 +move 3 from 8 to 5 +move 3 from 5 to 2 +move 8 from 7 to 3 +move 1 from 3 to 1 +move 3 from 6 to 4 +move 4 from 5 to 6 +move 14 from 2 to 9 +move 3 from 6 to 9 +move 3 from 4 to 2 +move 1 from 1 to 7 +move 1 from 7 to 1 +move 3 from 3 to 5 +move 8 from 7 to 4 +move 1 from 5 to 9 +move 3 from 2 to 4 +move 1 from 3 to 4 +move 4 from 2 to 6 +move 2 from 6 to 7 +move 3 from 5 to 4 +move 16 from 4 to 1 +move 7 from 9 to 8 +move 1 from 5 to 1 +move 3 from 7 to 9 +move 3 from 9 to 4 +move 7 from 1 to 7 +move 6 from 7 to 1 +move 5 from 3 to 1 +move 11 from 9 to 2 +move 3 from 4 to 6 +move 9 from 2 to 8 +move 6 from 3 to 5 +move 2 from 8 to 6 +move 5 from 5 to 3 +move 2 from 7 to 1 +move 3 from 3 to 9 +move 1 from 2 to 4 +move 1 from 5 to 1 +move 13 from 1 to 2 +move 5 from 8 to 6 +move 2 from 3 to 9 +move 2 from 4 to 7 +move 5 from 6 to 9 +move 7 from 9 to 1 +move 3 from 7 to 2 +move 6 from 8 to 6 +move 5 from 6 to 2 +move 2 from 8 to 3 +move 2 from 9 to 4 +move 6 from 2 to 5 +move 1 from 3 to 7 \ No newline at end of file diff --git a/aoc/src/Day5.scala b/aoc/src/Day5.scala new file mode 100644 index 0000000..7d54a90 --- /dev/null +++ b/aoc/src/Day5.scala @@ -0,0 +1,49 @@ +import scala.io.Source +import scala.collection.mutable.Stack + +object Day5 extends App: + + val input = Source + .fromURL(getClass.getResource("day5Input.txt")) + .mkString + .split('\n') + .toList + + val crates = input + .takeWhile(_ != "") + .dropRight(1) + .map(_.grouped(4).toList) + .transpose + .map(_.flatMap(_.find(_.isLetter))) + .toArray + + val moves = input + .dropWhile(_ != "") + .tail + .map(_.split(" ").flatMap(_.toIntOption)) + .map { case Array(count, from, to) => (count, from - 1, to - 1) } + + val part1 = moves + .foldLeft(crates) { case (crates, (count, from, to)) => + val movedCrates = crates(from).take(count) + crates + .updated(from, crates(from).drop(count)) + .updated(to, crates(to).prependedAll(movedCrates.reverse)) + }.toList + .map(_.head) + .mkString + + println(s"Part 1: $part1") + + val part2 = moves + .foldLeft(crates) { case (crates, (count, from, to)) => + val movedCrates = crates(from).take(count) + crates + .updated(from, crates(from).drop(count)) + .updated(to, crates(to).prependedAll(movedCrates)) + }.toList + .map(_.head) + .mkString + + println(s"Part 2: $part2") +end Day5