From 7484b3bdc0cafe69593e29ad464ae0ff1886daa8 Mon Sep 17 00:00:00 2001 From: Julien Lengrand-Lambert Date: Mon, 5 Dec 2022 21:44:37 +0100 Subject: [PATCH] Finishes Day 5 --- README.md | 2 +- settings.gradle.kts | 2 +- src/Day05.kt | 100 +++++++++ src/Day05.txt | 512 ++++++++++++++++++++++++++++++++++++++++++++ src/Day05_test.txt | 9 + src/Day06.kt | 18 ++ src/Day06.txt | 0 src/Day06_test.txt | 0 8 files changed, 641 insertions(+), 2 deletions(-) create mode 100644 src/Day05.kt create mode 100644 src/Day05.txt create mode 100644 src/Day05_test.txt create mode 100644 src/Day06.kt create mode 100644 src/Day06.txt create mode 100644 src/Day06_test.txt diff --git a/README.md b/README.md index 81d9864..9aa2440 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# advent-of-code-kotlin-2021 +# advent-of-code-kotlin-2022 Welcome to the Advent of Code[^aoc] Kotlin project created by [jlengrand][github] using the [Advent of Code Kotlin Template][template] delivered by JetBrains. diff --git a/settings.gradle.kts b/settings.gradle.kts index 7026d1c..0f841fb 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1 +1 @@ -rootProject.name = "advent-of-code-kotlin-2021" +rootProject.name = "advent-of-code-kotlin-2022" diff --git a/src/Day05.kt b/src/Day05.kt new file mode 100644 index 0000000..fa7edda --- /dev/null +++ b/src/Day05.kt @@ -0,0 +1,100 @@ + +val realStacks = + hashMapOf( + 1 to mutableListOf("R", "W", "F", "H", "T", "S"), + 2 to mutableListOf("W", "Q", "D", "G", "S"), + 3 to mutableListOf("W", "T", "B"), + 4 to mutableListOf("J", "Z", "Q", "N", "T", "W", "R", "D"), + 5 to mutableListOf("Z", "T", "V", "L", "G", "H", "B", "F"), + 6 to mutableListOf("G", "S", "B", "V", "C", "T", "P", "L"), + 7 to mutableListOf("P", "G", "W", "T", "R", "B", "Z"), + 8 to mutableListOf("R", "J", "C", "T", "M", "G", "N"), + 9 to mutableListOf("W", "B", "G", "L") + ) + +val exampleStacks = + hashMapOf( + 1 to mutableListOf("N", "Z"), + 2 to mutableListOf("D", "C", "M"), + 3 to mutableListOf("P"), + ) +fun main() { + + data class Move(val number: Int, val from: Int, val to: Int) + + fun getMove(input: String): Move { + + val numberAndGibber = input.split("move")[1] + .split("from") + + val fromAndGibber = numberAndGibber[1].split("to") + + return Move( + numberAndGibber[0].filter { !it.isWhitespace() }.toInt(), + fromAndGibber[0].filter { !it.isWhitespace() }.toInt(), + fromAndGibber[1].filter { !it.isWhitespace() }.toInt()) + } + + fun applyMove(stacks: HashMap>, move: Move): HashMap> { + + for(i in 1..move.number){ + val item = stacks[move.from]!!.take(1).first() + val newStackList = stacks[move.from]!!.drop(1) + stacks[move.from] = newStackList.toMutableList() + stacks[move.to]!!.add(0, item) + } + + return stacks + } + + fun applyMove9001(stacks: HashMap>, move: Move): HashMap> { + + val items = stacks[move.from]!!.take(move.number) + val newStackList = stacks[move.from]!!.drop(move.number) + stacks[move.from] = newStackList.toMutableList() + stacks[move.to]!!.addAll(0,items) + + return stacks + } + + fun getTopstacks(stacks: HashMap>): String { + + return stacks.map { it.value.first() }.joinToString("") + } + + fun part1(input: List, drop: Int = 5, stacks: HashMap> = exampleStacks): String { + + var inStacks = stacks + + val cut = input.drop(drop) + + for(line in cut){ + val move = getMove(line) + inStacks = applyMove(inStacks, move) + } + + return getTopstacks(inStacks) + } + + fun part2(input: List, drop: Int = 5, stacks: HashMap> = exampleStacks): String { + var inStacks = stacks + + val cut = input.drop(drop) + + for(line in cut){ + val move = getMove(line) + inStacks = applyMove9001(inStacks, move) + } + + return getTopstacks(inStacks) + } + + // test if implementation meets criteria from the description, like: + val testInput = readInput("Day05_test") + check(part1(testInput) == "CMZ") + check(part2(testInput) == "MCD") + + val input = readInput("Day05") + println(part1(input, 10, realStacks)) + println(part2(input, 10, realStacks)) +} \ No newline at end of file diff --git a/src/Day05.txt b/src/Day05.txt new file mode 100644 index 0000000..33b7b02 --- /dev/null +++ b/src/Day05.txt @@ -0,0 +1,512 @@ + [J] [Z] [G] + [Z] [T] [S] [P] [R] +[R] [Q] [V] [B] [G] [J] +[W] [W] [N] [L] [V] [W] [C] +[F] [Q] [T] [G] [C] [T] [T] [W] +[H] [D] [W] [W] [H] [T] [R] [M] [B] +[T] [G] [T] [R] [B] [P] [B] [G] [G] +[S] [S] [B] [D] [F] [L] [Z] [N] [L] + 1 2 3 4 5 6 7 8 9 + +move 4 from 2 to 1 +move 1 from 6 to 9 +move 6 from 4 to 7 +move 1 from 2 to 5 +move 3 from 6 to 3 +move 4 from 3 to 9 +move 2 from 1 to 3 +move 6 from 7 to 5 +move 5 from 7 to 6 +move 6 from 8 to 7 +move 6 from 7 to 6 +move 1 from 8 to 3 +move 15 from 6 to 4 +move 7 from 5 to 6 +move 1 from 7 to 2 +move 2 from 5 to 3 +move 5 from 9 to 8 +move 5 from 5 to 6 +move 1 from 7 to 4 +move 5 from 6 to 5 +move 3 from 3 to 8 +move 4 from 5 to 8 +move 1 from 2 to 8 +move 7 from 1 to 2 +move 2 from 6 to 2 +move 2 from 5 to 8 +move 1 from 1 to 8 +move 8 from 2 to 6 +move 3 from 3 to 4 +move 4 from 9 to 3 +move 5 from 3 to 6 +move 5 from 6 to 8 +move 3 from 4 to 8 +move 13 from 6 to 5 +move 14 from 4 to 8 +move 1 from 2 to 6 +move 1 from 4 to 2 +move 12 from 5 to 4 +move 30 from 8 to 6 +move 1 from 8 to 9 +move 1 from 9 to 4 +move 15 from 4 to 5 +move 1 from 2 to 9 +move 1 from 4 to 2 +move 1 from 2 to 1 +move 1 from 9 to 3 +move 8 from 5 to 7 +move 2 from 5 to 6 +move 7 from 8 to 1 +move 1 from 3 to 4 +move 1 from 7 to 3 +move 1 from 4 to 6 +move 26 from 6 to 7 +move 1 from 3 to 7 +move 3 from 7 to 2 +move 1 from 1 to 9 +move 16 from 7 to 5 +move 2 from 7 to 4 +move 12 from 7 to 6 +move 1 from 1 to 9 +move 4 from 6 to 1 +move 7 from 1 to 5 +move 2 from 1 to 8 +move 1 from 7 to 2 +move 1 from 1 to 4 +move 2 from 4 to 5 +move 1 from 9 to 4 +move 3 from 6 to 9 +move 8 from 6 to 5 +move 5 from 5 to 9 +move 19 from 5 to 8 +move 1 from 9 to 8 +move 3 from 8 to 7 +move 1 from 7 to 3 +move 8 from 5 to 2 +move 2 from 4 to 2 +move 4 from 9 to 8 +move 1 from 2 to 3 +move 2 from 3 to 2 +move 4 from 9 to 5 +move 8 from 8 to 4 +move 9 from 8 to 5 +move 5 from 8 to 4 +move 5 from 5 to 7 +move 12 from 2 to 3 +move 2 from 2 to 8 +move 1 from 8 to 6 +move 1 from 8 to 7 +move 10 from 4 to 3 +move 1 from 2 to 9 +move 13 from 5 to 3 +move 1 from 7 to 5 +move 27 from 3 to 4 +move 1 from 8 to 7 +move 3 from 5 to 2 +move 6 from 6 to 3 +move 2 from 4 to 1 +move 27 from 4 to 2 +move 2 from 7 to 8 +move 23 from 2 to 4 +move 2 from 1 to 4 +move 2 from 7 to 2 +move 4 from 2 to 9 +move 10 from 3 to 4 +move 1 from 3 to 5 +move 1 from 5 to 1 +move 5 from 2 to 5 +move 30 from 4 to 2 +move 1 from 8 to 9 +move 1 from 8 to 1 +move 27 from 2 to 3 +move 2 from 4 to 2 +move 1 from 9 to 4 +move 2 from 1 to 3 +move 8 from 3 to 7 +move 19 from 3 to 1 +move 1 from 4 to 7 +move 5 from 9 to 1 +move 4 from 2 to 9 +move 4 from 3 to 4 +move 1 from 3 to 5 +move 1 from 2 to 7 +move 1 from 9 to 3 +move 1 from 9 to 1 +move 5 from 5 to 4 +move 5 from 7 to 3 +move 1 from 5 to 6 +move 23 from 1 to 6 +move 1 from 9 to 2 +move 1 from 2 to 5 +move 24 from 6 to 9 +move 6 from 4 to 7 +move 4 from 4 to 8 +move 1 from 4 to 9 +move 4 from 7 to 4 +move 4 from 3 to 4 +move 4 from 9 to 8 +move 6 from 7 to 9 +move 4 from 7 to 6 +move 1 from 1 to 4 +move 2 from 6 to 4 +move 1 from 6 to 2 +move 1 from 1 to 8 +move 1 from 7 to 3 +move 1 from 6 to 9 +move 13 from 4 to 2 +move 3 from 3 to 2 +move 15 from 9 to 8 +move 1 from 5 to 9 +move 5 from 9 to 1 +move 4 from 1 to 7 +move 4 from 7 to 3 +move 8 from 2 to 7 +move 9 from 8 to 2 +move 1 from 1 to 2 +move 7 from 9 to 2 +move 4 from 3 to 1 +move 4 from 1 to 4 +move 2 from 9 to 1 +move 20 from 2 to 8 +move 3 from 4 to 8 +move 1 from 2 to 3 +move 4 from 2 to 7 +move 1 from 3 to 4 +move 1 from 9 to 3 +move 1 from 4 to 7 +move 1 from 2 to 5 +move 1 from 4 to 3 +move 2 from 1 to 6 +move 1 from 5 to 6 +move 1 from 7 to 1 +move 12 from 7 to 2 +move 12 from 2 to 6 +move 9 from 6 to 2 +move 1 from 6 to 8 +move 1 from 3 to 9 +move 8 from 2 to 4 +move 1 from 9 to 6 +move 1 from 4 to 6 +move 4 from 4 to 9 +move 1 from 4 to 9 +move 1 from 1 to 5 +move 2 from 6 to 3 +move 1 from 5 to 4 +move 1 from 2 to 8 +move 10 from 8 to 6 +move 10 from 8 to 3 +move 1 from 3 to 4 +move 8 from 8 to 1 +move 3 from 9 to 8 +move 2 from 9 to 1 +move 11 from 6 to 7 +move 1 from 1 to 7 +move 8 from 1 to 4 +move 3 from 6 to 7 +move 1 from 1 to 4 +move 14 from 8 to 6 +move 1 from 8 to 7 +move 1 from 6 to 8 +move 6 from 4 to 1 +move 1 from 8 to 5 +move 4 from 1 to 8 +move 2 from 7 to 1 +move 1 from 6 to 7 +move 5 from 4 to 2 +move 2 from 4 to 3 +move 4 from 2 to 8 +move 15 from 7 to 3 +move 3 from 3 to 6 +move 1 from 5 to 2 +move 21 from 3 to 6 +move 2 from 8 to 7 +move 1 from 7 to 8 +move 32 from 6 to 9 +move 1 from 7 to 8 +move 5 from 8 to 4 +move 2 from 8 to 7 +move 14 from 9 to 8 +move 14 from 8 to 1 +move 2 from 6 to 1 +move 2 from 7 to 4 +move 1 from 9 to 3 +move 17 from 9 to 5 +move 6 from 1 to 8 +move 4 from 4 to 6 +move 2 from 2 to 5 +move 2 from 8 to 2 +move 1 from 6 to 7 +move 2 from 2 to 6 +move 4 from 3 to 2 +move 7 from 6 to 3 +move 6 from 5 to 7 +move 1 from 8 to 9 +move 1 from 6 to 7 +move 4 from 8 to 6 +move 1 from 9 to 3 +move 4 from 1 to 4 +move 12 from 5 to 9 +move 7 from 7 to 8 +move 3 from 4 to 2 +move 8 from 9 to 4 +move 2 from 6 to 2 +move 1 from 7 to 4 +move 2 from 6 to 9 +move 1 from 5 to 3 +move 1 from 8 to 1 +move 2 from 8 to 7 +move 2 from 2 to 9 +move 7 from 2 to 3 +move 8 from 4 to 1 +move 2 from 8 to 4 +move 4 from 9 to 7 +move 2 from 9 to 5 +move 16 from 1 to 3 +move 3 from 7 to 4 +move 1 from 7 to 6 +move 1 from 6 to 2 +move 2 from 5 to 3 +move 10 from 4 to 2 +move 2 from 8 to 7 +move 19 from 3 to 8 +move 17 from 3 to 9 +move 3 from 1 to 7 +move 17 from 9 to 2 +move 1 from 7 to 5 +move 1 from 7 to 5 +move 2 from 5 to 7 +move 2 from 9 to 2 +move 6 from 7 to 6 +move 3 from 6 to 7 +move 1 from 8 to 9 +move 1 from 9 to 3 +move 4 from 2 to 5 +move 17 from 2 to 3 +move 3 from 7 to 5 +move 1 from 5 to 3 +move 7 from 2 to 3 +move 2 from 2 to 4 +move 1 from 7 to 1 +move 1 from 1 to 5 +move 2 from 5 to 3 +move 1 from 4 to 5 +move 1 from 4 to 3 +move 14 from 3 to 5 +move 17 from 8 to 7 +move 2 from 6 to 2 +move 12 from 3 to 5 +move 15 from 5 to 9 +move 7 from 7 to 3 +move 7 from 7 to 6 +move 1 from 2 to 3 +move 11 from 9 to 6 +move 13 from 5 to 7 +move 10 from 6 to 8 +move 6 from 8 to 3 +move 2 from 5 to 8 +move 1 from 2 to 9 +move 10 from 7 to 6 +move 9 from 6 to 8 +move 1 from 5 to 1 +move 10 from 6 to 4 +move 8 from 4 to 5 +move 1 from 1 to 2 +move 3 from 9 to 1 +move 10 from 3 to 7 +move 1 from 4 to 7 +move 12 from 7 to 9 +move 7 from 3 to 5 +move 13 from 8 to 7 +move 3 from 9 to 5 +move 5 from 5 to 6 +move 3 from 1 to 9 +move 5 from 9 to 6 +move 10 from 6 to 4 +move 15 from 7 to 5 +move 3 from 9 to 4 +move 1 from 4 to 3 +move 3 from 8 to 9 +move 6 from 9 to 6 +move 2 from 5 to 1 +move 1 from 2 to 7 +move 12 from 5 to 8 +move 3 from 9 to 5 +move 11 from 5 to 6 +move 1 from 1 to 2 +move 1 from 2 to 8 +move 3 from 7 to 8 +move 10 from 8 to 3 +move 1 from 1 to 7 +move 10 from 4 to 9 +move 1 from 7 to 8 +move 5 from 5 to 3 +move 15 from 6 to 5 +move 8 from 3 to 9 +move 3 from 4 to 5 +move 1 from 7 to 8 +move 8 from 8 to 9 +move 1 from 6 to 5 +move 5 from 3 to 2 +move 5 from 2 to 3 +move 5 from 9 to 8 +move 1 from 6 to 8 +move 2 from 5 to 1 +move 4 from 3 to 2 +move 16 from 5 to 6 +move 3 from 5 to 9 +move 4 from 8 to 5 +move 8 from 6 to 4 +move 4 from 2 to 3 +move 1 from 1 to 4 +move 6 from 3 to 6 +move 24 from 9 to 2 +move 1 from 1 to 9 +move 1 from 9 to 4 +move 2 from 4 to 5 +move 1 from 3 to 2 +move 10 from 6 to 8 +move 22 from 2 to 6 +move 1 from 2 to 7 +move 1 from 7 to 5 +move 10 from 8 to 9 +move 7 from 9 to 3 +move 6 from 4 to 8 +move 3 from 9 to 2 +move 5 from 8 to 3 +move 1 from 4 to 1 +move 1 from 8 to 3 +move 3 from 6 to 2 +move 5 from 5 to 1 +move 1 from 5 to 3 +move 5 from 6 to 3 +move 1 from 2 to 7 +move 16 from 3 to 2 +move 1 from 8 to 1 +move 1 from 4 to 7 +move 1 from 5 to 3 +move 6 from 6 to 4 +move 14 from 2 to 8 +move 3 from 3 to 5 +move 2 from 3 to 6 +move 3 from 5 to 6 +move 4 from 6 to 4 +move 3 from 4 to 8 +move 7 from 2 to 9 +move 2 from 2 to 1 +move 9 from 8 to 4 +move 7 from 1 to 7 +move 8 from 7 to 5 +move 2 from 8 to 4 +move 3 from 9 to 6 +move 4 from 4 to 6 +move 1 from 7 to 3 +move 4 from 8 to 2 +move 2 from 9 to 8 +move 9 from 6 to 7 +move 1 from 9 to 8 +move 1 from 1 to 5 +move 3 from 4 to 5 +move 1 from 3 to 2 +move 5 from 8 to 2 +move 9 from 2 to 7 +move 1 from 6 to 7 +move 1 from 6 to 2 +move 9 from 7 to 4 +move 2 from 5 to 9 +move 10 from 4 to 6 +move 1 from 8 to 6 +move 5 from 4 to 3 +move 5 from 4 to 9 +move 5 from 9 to 5 +move 1 from 1 to 7 +move 4 from 7 to 8 +move 8 from 5 to 3 +move 3 from 3 to 8 +move 6 from 7 to 6 +move 3 from 3 to 1 +move 5 from 3 to 7 +move 1 from 9 to 6 +move 2 from 7 to 6 +move 1 from 9 to 3 +move 4 from 6 to 9 +move 2 from 2 to 6 +move 1 from 7 to 3 +move 6 from 5 to 4 +move 7 from 6 to 9 +move 6 from 6 to 8 +move 2 from 1 to 2 +move 1 from 5 to 1 +move 5 from 8 to 5 +move 1 from 3 to 9 +move 4 from 4 to 5 +move 10 from 9 to 2 +move 14 from 6 to 4 +move 1 from 3 to 8 +move 1 from 8 to 5 +move 2 from 7 to 9 +move 1 from 1 to 2 +move 14 from 4 to 7 +move 1 from 1 to 4 +move 3 from 4 to 1 +move 3 from 5 to 1 +move 6 from 5 to 1 +move 10 from 7 to 3 +move 6 from 1 to 5 +move 6 from 1 to 7 +move 3 from 8 to 3 +move 1 from 5 to 1 +move 3 from 9 to 6 +move 1 from 9 to 3 +move 6 from 5 to 9 +move 2 from 6 to 1 +move 9 from 2 to 1 +move 6 from 9 to 6 +move 2 from 8 to 7 +move 5 from 7 to 3 +move 7 from 7 to 5 +move 4 from 2 to 8 +move 6 from 8 to 3 +move 1 from 9 to 4 +move 1 from 7 to 3 +move 2 from 5 to 3 +move 7 from 6 to 4 +move 28 from 3 to 4 +move 1 from 3 to 8 +move 1 from 5 to 9 +move 9 from 4 to 5 +move 12 from 4 to 5 +move 2 from 4 to 6 +move 5 from 4 to 6 +move 1 from 3 to 8 +move 10 from 5 to 8 +move 10 from 5 to 4 +move 5 from 5 to 9 +move 3 from 4 to 1 +move 5 from 6 to 9 +move 2 from 6 to 7 +move 2 from 7 to 5 +move 10 from 9 to 4 +move 1 from 8 to 5 +move 5 from 1 to 5 +move 8 from 8 to 7 +move 8 from 5 to 3 +move 8 from 7 to 8 +move 2 from 8 to 2 +move 7 from 3 to 2 +move 21 from 4 to 7 +move 10 from 1 to 9 +move 3 from 4 to 5 +move 1 from 4 to 8 +move 1 from 8 to 3 +move 7 from 8 to 5 +move 2 from 3 to 1 +move 7 from 7 to 2 +move 1 from 1 to 4 +move 1 from 1 to 6 +move 8 from 9 to 3 +move 2 from 8 to 4 +move 3 from 3 to 1 +move 3 from 4 to 7 +move 1 from 6 to 7 +move 5 from 2 to 4 +move 2 from 1 to 6 \ No newline at end of file diff --git a/src/Day05_test.txt b/src/Day05_test.txt new file mode 100644 index 0000000..c526f15 --- /dev/null +++ b/src/Day05_test.txt @@ -0,0 +1,9 @@ + [D] +[N] [C] +[Z] [M] [P] + 1 2 3 + +move 1 from 2 to 1 +move 3 from 1 to 3 +move 2 from 2 to 1 +move 1 from 1 to 2 \ No newline at end of file diff --git a/src/Day06.kt b/src/Day06.kt new file mode 100644 index 0000000..6c4c045 --- /dev/null +++ b/src/Day06.kt @@ -0,0 +1,18 @@ +fun main() { + fun part1(input: List): Int { + TODO() + } + + fun part2(input: List): Int { + TODO() + } + + // test if implementation meets criteria from the description, like: + val testInput = readInput("Day06_test") + check(part1(testInput) == 7) + check(part2(testInput) == 5) + + val input = readInput("Day06") + println(part1(input)) + println(part2(input)) +} \ No newline at end of file diff --git a/src/Day06.txt b/src/Day06.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Day06_test.txt b/src/Day06_test.txt new file mode 100644 index 0000000..e69de29