From f8f82e80b224e4d913dd824873b837e08a88ebd5 Mon Sep 17 00:00:00 2001 From: Patrick Michl Date: Mon, 12 Dec 2022 21:43:34 +0100 Subject: [PATCH] add solutions for day 9 to 12 --- data/day_10.txt | 138 ++++ data/day_11.txt | 55 ++ data/day_12.txt | 41 + data/day_9.txt | 2000 +++++++++++++++++++++++++++++++++++++++++++++++ src/day_10.jl | 53 ++ src/day_11.jl | 94 +++ src/day_12.jl | 47 ++ src/day_9.jl | 58 ++ 8 files changed, 2486 insertions(+) create mode 100644 data/day_10.txt create mode 100644 data/day_11.txt create mode 100644 data/day_12.txt create mode 100644 data/day_9.txt create mode 100644 src/day_10.jl create mode 100644 src/day_11.jl create mode 100644 src/day_12.jl create mode 100644 src/day_9.jl diff --git a/data/day_10.txt b/data/day_10.txt new file mode 100644 index 0000000..a0257cf --- /dev/null +++ b/data/day_10.txt @@ -0,0 +1,138 @@ +noop +noop +addx 5 +addx 29 +addx -28 +addx 5 +addx -1 +noop +noop +addx 5 +addx 12 +addx -6 +noop +addx 4 +addx -1 +addx 1 +addx 5 +addx -31 +addx 32 +addx 4 +addx 1 +noop +addx -38 +addx 5 +addx 2 +addx 3 +addx -2 +addx 2 +noop +addx 3 +addx 2 +addx 5 +addx 2 +addx 3 +noop +addx 2 +addx 3 +noop +addx 2 +addx -32 +addx 33 +addx -20 +addx 27 +addx -39 +addx 1 +noop +addx 5 +addx 3 +noop +addx 2 +addx 5 +noop +noop +addx -2 +addx 5 +addx 2 +addx -16 +addx 21 +addx -1 +addx 1 +noop +addx 3 +addx 5 +addx -22 +addx 26 +addx -39 +noop +addx 5 +addx -2 +addx 2 +addx 5 +addx 2 +addx 23 +noop +addx -18 +addx 1 +noop +noop +addx 2 +noop +noop +addx 7 +addx 3 +noop +addx 2 +addx -27 +addx 28 +addx 5 +addx -11 +addx -27 +noop +noop +addx 3 +addx 2 +addx 5 +addx 2 +addx 27 +addx -26 +addx 2 +addx 5 +addx 2 +addx 4 +addx -3 +addx 2 +addx 5 +addx 2 +addx 3 +addx -2 +addx 2 +noop +addx -33 +noop +noop +noop +noop +addx 31 +addx -26 +addx 6 +noop +noop +addx -1 +noop +addx 3 +addx 5 +addx 3 +noop +addx -1 +addx 5 +addx 1 +addx -12 +addx 17 +addx -1 +addx 5 +noop +noop +addx 1 +noop +noop diff --git a/data/day_11.txt b/data/day_11.txt new file mode 100644 index 0000000..8798a00 --- /dev/null +++ b/data/day_11.txt @@ -0,0 +1,55 @@ +Monkey 0: + Starting items: 71, 56, 50, 73 + Operation: new = old * 11 + Test: divisible by 13 + If true: throw to monkey 1 + If false: throw to monkey 7 + +Monkey 1: + Starting items: 70, 89, 82 + Operation: new = old + 1 + Test: divisible by 7 + If true: throw to monkey 3 + If false: throw to monkey 6 + +Monkey 2: + Starting items: 52, 95 + Operation: new = old * old + Test: divisible by 3 + If true: throw to monkey 5 + If false: throw to monkey 4 + +Monkey 3: + Starting items: 94, 64, 69, 87, 70 + Operation: new = old + 2 + Test: divisible by 19 + If true: throw to monkey 2 + If false: throw to monkey 6 + +Monkey 4: + Starting items: 98, 72, 98, 53, 97, 51 + Operation: new = old + 6 + Test: divisible by 5 + If true: throw to monkey 0 + If false: throw to monkey 5 + +Monkey 5: + Starting items: 79 + Operation: new = old + 7 + Test: divisible by 2 + If true: throw to monkey 7 + If false: throw to monkey 0 + +Monkey 6: + Starting items: 77, 55, 63, 93, 66, 90, 88, 71 + Operation: new = old * 7 + Test: divisible by 11 + If true: throw to monkey 2 + If false: throw to monkey 4 + +Monkey 7: + Starting items: 54, 97, 87, 70, 59, 82, 59 + Operation: new = old + 8 + Test: divisible by 17 + If true: throw to monkey 1 + If false: throw to monkey 3 diff --git a/data/day_12.txt b/data/day_12.txt new file mode 100644 index 0000000..2e8d203 --- /dev/null +++ b/data/day_12.txt @@ -0,0 +1,41 @@ +abaaaaacccccccccccccccccccccccccccccccccccccccaaaaaaaccccaaaaaaaaaaaaaaaaacccccaaaaaacccccccccccccccccccccccaaaaaaaaccccccccccccccccccccccccccccccccaaaaaa +abaaaaaacccaaaacccccccccccccccccccccccaccccccccaaaaaaaaccaaaaaaaaaaaaaaaaccccccaaaaaacccccccccccccccccccccccccaaaaccccccccccccccccccccccccccccccccccaaaaaa +abaaaaaacccaaaacccccccccccccccccaaaaaaaacccccccaaaaaaaaacaaaaaaaaaaaaacccccccccaaaaacccccccccccccccccccccccccaaaaacccccccccccccccccccaaaccccccccccccaaaaaa +abaaacaccccaaaaccccccccccccccccccaaaaaacccccccccaaaaaaaccccaaaaaaaaaaacccccccccaaaaacccccccccccccccccccccccccaacaaaccccccccccccccccccaaacccccccccccccccaaa +abaaacccccccaaacccccccccccaacccccaaaaaaccccccccaaaaaaccccccaacaaaaaaaacccccccccccccccccccccccaaccccccccccccccacccaaaaacccccccccaaccccaaacccccccccccccccaaa +abccccccccccccccccccccccccaaaaccaaaaaaaacccccccaaaaaaaccccccccaaaaaaaaaccccccccccaacccccccccaaaccccccccccccccccccacaaacccccccccaaaaccaaacccccccccccccccaac +abccccccccccccccccccccccaaaaaacaaaaaaaaaaccccccaaccaaaaacccccaaaaccaaaaccccccccccaaacaacccccaaacaaacccaaccccccccaaaaaaaacccccccaaaaakkkkkkcccccccccccccccc +abccccccccccccccccccccccaaaaaccaaaaaaaaaacccccccccccaaaaaaccccacccaaaaaccccccccccaaaaaaccaaaaaaaaaaaaaaaccccccccaaaaaaaaccccccccaaajkkkkkkkaccccccaacccccc +abcccccccccccccccccccccccaaaaacacacaaaccccccccccccccaaaaaaccccccccaaaacccccccccaaaaaaacccaaaaaaaaaaaaaaaaaccccccccaaaaaccccccccccjjjkkkkkkkkccaaaaaacccccc +abcccccccccccccccccccccccaacaacccccaaacccaccccccccccaaaaaaccccccccaaaacccccccccaaaaaaacccccaaaaaacaaaaaaaacccccccaaaaacccccccjjjjjjjooopppkkkcaaaaaaaccccc +abcccccccccccccccccaacaacccccccccccaaaaaaacccccccccccaaaaacccccccccccccccccccccccaaaaaaccccaaaaaaccaaaaaaacccccccaaaaaacciijjjjjjjjoooopppkkkcaaaaaaaacccc +abccccccccccaaaccccaaaaacccccccccccccaaaaacccccccccccaaaaccccccccccccccccccccccccaacaaaccccaaaaaaacaaaaacccccccccaccaaaciiiijjjjjjoooopppppkllcaaaaaaacccc +abccaaccccccaaaaacaaaaacccccccccccccaaaaaacccccccccccccccccccccccccccccccccccccccaacccccccaaaacaaaaaaaaacccaaccccaaaaaciiiiinoooooooouuuupplllaaaaaacccccc +abcaaacccccaaaaaacaaaaaacccccccccccaaaaaaaaccccccccaacaccccccccccccccccccccccccccccccccccccaccccccccccaaccaaaccccaaaaaciiinnnooooooouuuuuppplllaaacacccccc +abaaaaaacccaaaaaacccaaaacccccccccccaaaaaaaaccccccccaaaaccccccccccccccccccccccccccccccccccccccccccccccccaaaaacaacaaaaaaiiinnnnntttoouuuuuupppllllcccccccccc +abaaaaaaccccaaaaacccaaccccccccccacccccaaccccccccccaaaaaccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaacaaaaaaiiinnnnttttuuuuxxuuupppllllccccccccc +abaaaaacccccaacaaccccccccccccccaaaccccaacccccaacccaaaaaacccccccccccccccccccccccccccccccccccccccccccccccccaaaaaccaaaaaaiiinnnttttxxuuxxyyuuppppllllcccccccc +abaaaacccccccccccccccccccccaaacaaaccccccaaacaaaaccacaaaacccccccccccccccccccccccccccccccccccaacccccccccccaaaaaccccaaaccciinnntttxxxxxxxyyvvvqqqqqlllccccccc +abaaaaaccccccccccccccccccccaaaaaaaaaacccaaaaaaacccccaaccccccccccccccccccccccccccccccccccccaaacccccccccccaacaaaccccccccciiinntttxxxxxxxyyvvvvvqqqqljjcccccc +abccaaaccaccccccccaaacccccccaaaaaaaaaccccaaaaaacccccccccccccccccccccccccccccccaacccccccaaaaacaaccccccccccccaacccccccccchhinnnttxxxxxxyyyyyvvvvqqqjjjcccccc +SbccccaaaacccccccaaaaaacccccccaaaaaccccccaaaaaaaaccccccccccccccccccccaaccccccaaaaccccccaaaaaaaacccccccccccccccccccccccchhhnnntttxxxxEzyyyyyvvvqqqjjjcccccc +abccccaaaacccccccaaaaaaccccccaaaaaacccccaaaaaaaaaacccccccccccccccccccaaccccccaaaaccccccccaaaaacccccccccccccccccccccccccchhhnntttxxxyyyyyyyvvvvqqqjjjcccccc +abcccaaaaaaccccccaaaaaacccccaaaaaaaccccaaaaaaaaaacccccccccccccccccaaaaaaaacccaaaacccccccaaaaaccccccccccccccccccccccccccchhmmmttxxxyyyyyyvvvvvqqqjjjdcccccc +abcccaaaaaacccccccaaaaacccccaaacaaacaaaaaaaaaaccccccccccccaaacccccaaaaaaaaccccccccccccccaacaaacccccccaacaaacccccccccccchhhmmmtswwwyyyyyyvvvqqqqjjjjdddcccc +abcccccaacccccccccaacaacccccccccccacaaaaaccaaaccccccccccaaaaacccccccaaaacccccccccccccccccccaaccccccccaaaaaacccccccccccchhhmmssswwwwwwyyywvrqqqjjjjdddccccc +abcccccccccccccccccccccccccccccccccaaaaaccccaaccccccccacaaaaaacccccaaaaacccccccccccccccccccccccccccccaaaaaacccccccccccchhhmmssswwwwwwywywwrrqjjjjddddccccc +abcccccccccccccccccccccccccccccccccaaaaaccccccccaaacaaacaaaaaacccccaaaaaaccccccccccccccccccccccccccccaaaaaaaccccccccccchhmmmsssswwsswwwwwwrrkkjjddddcccccc +abccccccccccccccccccccccccccccccccccaaaaacccccccaaaaaaacaaaaaccccccaaccaacccccccccccaaccccccccccccccaaaaaaaacaacaaccccchhhmmmsssssssswwwwrrrkkjddddaaccccc +abcccccccccccccccccccccccccaaaaaccccaacccccccccccaaaaaacaaaaacccccccccccccaacccccccaaaaaacccccccccccaaaaaaaacaaaaaccccchhgmmmmssssssrrwwwrrrkkddddaaaccccc +abcccccccccccccccccccccccccaaaaacccccccccccccccccaaaaaaaacccccccccccccccaaaaaaccccccaaaaaccccaaccccccccaaacccaaaaaaccccgggmmmmmmllllrrrrrrrkkkeedaaaaccccc +abcccccccccccaaccccccccccccaaaaaacccccccccccccccaaaaaaaaacccccccccccccccaaaaaaccccaaaaaaacccaaaacccccccaaccccaaaaaaccccggggmmmmllllllrrrrrkkkkeedaaaaacccc +abcccccccccccaaacaacaaaccccaaaaaaccccccccccccccaaaaaaaaaacccccccccccccccaaaaaaccccaaaaaaaaccaaaacccccccccccccaaaaaccccccgggggglllllllllrrkkkkeeeaaaaaacccc +abcccccccccccaaaaaacaaaacccaaaaaaccccccccccccccaaacaaaaaaccccccccccccccccaaaaaccccaaaaaaaaccaaaacccccccccccaaccaaaccccccgggggggggffflllkkkkkkeeeaaaaaacccc +abaccccccccaaaaaaaccaaaacccccaaacccccccccccccccccccaaaaaacaccccccccaaccccaaaacccccccaaacacccccccccccccccaaaaaccccccccccccccgggggffffflllkkkkeeeccaaacccccc +abaccccccccaaaaaaaccaaacccccccccccccccccaaaccccccccaaacaaaaaccccccaaacccccccccccccaaaacccccccccccccccccccaaaaaccccccccccccccccccaffffffkkkeeeeeccaaccccccc +abaaaccccccccaaaaaaccccccccccccccccccccaaaaaacccccccaaaaaaaacaaaacaaacccccccccaaaaaacccccccccccccccccccccaaaaaccccccccccccccccccccaffffffeeeeecccccccccccc +abaacccccccccaacaaaccccccccccccccccccccaaaaaaccccccccaaaaaccaaaaaaaaacccccccccaaaaaaaaccccccccccaaccccccaaaaacccccccccccccccccccccaaaffffeeeecccccccccccaa +abaacccccccccaaccccccccccccccccaaccccccaaaaacaaccaacccaaaaacaaaaaaaaacccccccccaaaaaaaaccccccaaacaacccccccccaacccccccccccccccccccccaaaccceaecccccccccccccaa +abaacccccccccccccccccccccccccccaaaaaacccaaaaaaaaaaaccaaacaaccaaaaaaaaaaaaacccccaaaaaaacccccccaaaaaccccccccccccccccccccccccccccccccaaacccccccccccccccaaacaa +abcccccccccccccccccccccccccccccaaaaaccccaacaacaaaaacccaaccccccaaaaaaaaaaaacccccaaaaacccccccccaaaaaaaccccccccccccccccccccccccccccccaaacccccccccccccccaaaaaa +abcccccccccccccccccccccccccccaaaaaaaccccccccaaaaaaaaccccccccccaaaaaaaaaaccccccaaaaaaccccccccaaaaaaaaccccccccccccccccccccccccccccccccccccccccccccccccaaaaaa diff --git a/data/day_9.txt b/data/day_9.txt new file mode 100644 index 0000000..bbd1f5c --- /dev/null +++ b/data/day_9.txt @@ -0,0 +1,2000 @@ +D 2 +R 1 +L 2 +U 1 +R 2 +L 2 +R 2 +L 1 +R 1 +L 1 +R 2 +L 2 +R 1 +D 2 +U 1 +R 1 +L 2 +U 2 +R 2 +U 2 +R 2 +D 1 +L 1 +U 1 +R 2 +L 1 +D 1 +U 1 +L 1 +U 1 +D 2 +U 1 +R 2 +U 1 +L 1 +D 1 +L 1 +U 1 +R 1 +L 1 +U 2 +L 2 +D 2 +L 2 +R 2 +U 1 +R 1 +U 2 +D 2 +R 2 +L 1 +R 1 +D 1 +U 2 +R 1 +L 1 +U 2 +L 2 +U 1 +L 2 +U 1 +R 1 +L 1 +D 2 +U 2 +R 2 +D 1 +R 1 +U 2 +R 2 +L 2 +U 1 +L 1 +D 2 +R 2 +L 1 +R 1 +D 1 +R 1 +L 1 +D 2 +R 1 +U 1 +L 1 +R 1 +L 1 +D 2 +L 1 +U 1 +R 1 +D 1 +R 1 +D 1 +L 2 +U 1 +D 1 +R 2 +D 2 +R 2 +L 2 +U 2 +L 1 +U 1 +L 1 +R 1 +L 1 +U 2 +L 2 +U 2 +L 1 +U 1 +D 1 +U 3 +R 2 +D 2 +R 1 +U 2 +L 2 +D 1 +U 1 +R 2 +U 3 +D 1 +L 3 +U 2 +D 2 +R 1 +D 1 +L 1 +D 2 +L 2 +U 1 +L 2 +R 3 +U 3 +L 1 +U 3 +L 1 +D 1 +U 3 +R 1 +U 3 +D 2 +L 3 +R 3 +L 2 +U 1 +D 1 +U 1 +L 1 +D 1 +R 2 +U 3 +D 3 +L 3 +R 1 +U 3 +D 1 +U 3 +L 1 +D 3 +R 3 +U 2 +D 1 +R 2 +U 1 +R 3 +U 1 +D 1 +U 1 +L 1 +R 3 +U 2 +D 3 +U 2 +R 2 +L 1 +D 3 +R 3 +L 2 +U 1 +L 2 +U 2 +R 3 +U 3 +D 2 +U 2 +D 3 +R 1 +D 1 +R 3 +D 1 +L 3 +R 2 +D 1 +L 1 +D 1 +L 3 +D 1 +L 3 +D 2 +L 2 +D 2 +R 1 +U 2 +D 1 +U 3 +L 3 +D 1 +R 3 +L 2 +D 2 +U 2 +R 1 +U 2 +R 3 +L 1 +R 3 +L 1 +D 1 +U 2 +L 3 +U 3 +R 2 +L 1 +R 2 +U 4 +R 1 +U 2 +L 2 +D 3 +U 1 +L 2 +U 1 +L 2 +D 3 +U 1 +D 3 +U 1 +D 3 +L 2 +R 1 +L 3 +R 2 +U 2 +L 2 +D 3 +L 2 +U 3 +R 4 +L 3 +D 4 +L 3 +U 2 +L 2 +U 4 +R 2 +D 4 +R 1 +D 4 +U 4 +D 3 +R 2 +D 4 +U 1 +D 4 +U 4 +R 2 +D 3 +R 4 +D 2 +L 2 +R 4 +L 1 +D 2 +U 4 +R 4 +U 4 +L 4 +U 2 +D 3 +L 3 +U 3 +R 1 +L 2 +D 2 +L 3 +R 2 +U 3 +D 4 +L 1 +D 4 +U 3 +L 3 +U 4 +D 1 +U 2 +D 4 +L 4 +D 3 +R 3 +U 1 +L 4 +D 2 +R 4 +U 4 +L 4 +U 3 +L 4 +R 3 +D 3 +L 1 +U 2 +R 1 +U 2 +D 3 +U 4 +L 1 +D 2 +U 1 +D 1 +L 1 +D 1 +U 1 +D 3 +L 1 +D 4 +L 2 +R 3 +L 2 +R 4 +L 4 +U 2 +R 3 +L 2 +D 3 +L 2 +U 2 +R 3 +U 1 +D 3 +U 5 +D 4 +U 3 +L 1 +D 4 +U 3 +D 2 +L 1 +R 3 +U 5 +L 5 +R 1 +D 2 +R 2 +D 3 +L 4 +D 4 +U 2 +D 3 +R 5 +D 3 +U 2 +D 4 +L 1 +D 5 +R 2 +D 1 +U 2 +L 1 +R 5 +U 4 +L 5 +D 2 +U 4 +D 5 +U 4 +L 4 +U 3 +D 2 +L 2 +R 2 +D 1 +U 1 +R 5 +L 3 +R 4 +D 5 +R 5 +D 4 +L 1 +R 2 +U 3 +R 5 +D 5 +R 3 +D 1 +R 3 +D 2 +U 4 +D 1 +U 5 +L 1 +U 3 +L 3 +D 1 +R 3 +U 1 +L 3 +R 2 +L 4 +R 4 +U 1 +D 5 +R 2 +L 5 +R 5 +U 3 +D 1 +R 4 +D 5 +L 5 +R 4 +U 5 +R 4 +D 3 +R 4 +D 2 +R 2 +U 1 +D 2 +L 1 +R 1 +L 3 +D 3 +L 5 +D 4 +R 5 +D 2 +L 5 +U 3 +R 3 +L 5 +U 3 +L 5 +R 5 +L 2 +U 4 +D 2 +R 1 +L 5 +R 1 +U 5 +L 2 +R 2 +U 6 +L 6 +U 2 +R 5 +U 3 +R 2 +D 3 +U 3 +D 1 +L 1 +U 2 +R 5 +L 1 +R 5 +D 6 +R 4 +L 4 +U 1 +R 3 +D 5 +U 3 +L 6 +U 1 +D 6 +R 6 +L 4 +R 4 +U 6 +R 6 +U 3 +R 6 +U 2 +R 6 +U 4 +R 2 +L 5 +U 2 +D 6 +L 4 +U 5 +L 4 +R 6 +L 1 +R 3 +L 3 +D 1 +L 5 +D 1 +L 5 +R 2 +D 3 +L 1 +U 6 +R 6 +U 2 +L 3 +R 4 +U 6 +R 3 +L 4 +U 1 +R 1 +D 1 +L 4 +D 6 +U 1 +R 2 +L 6 +U 3 +R 1 +L 1 +D 3 +R 1 +U 4 +D 2 +L 1 +D 3 +R 2 +D 5 +L 3 +R 6 +U 4 +D 4 +L 4 +U 2 +D 2 +L 4 +D 6 +U 5 +D 5 +R 6 +D 1 +L 4 +R 2 +U 3 +D 5 +R 4 +U 6 +R 4 +U 6 +L 7 +U 6 +D 1 +U 2 +D 6 +R 4 +U 7 +D 2 +L 6 +R 2 +U 7 +R 7 +L 1 +U 2 +L 5 +R 4 +L 7 +R 3 +D 5 +U 7 +D 4 +L 6 +U 5 +L 4 +D 2 +U 2 +D 2 +U 5 +R 7 +D 3 +U 3 +D 6 +U 4 +D 2 +R 6 +L 5 +U 3 +R 1 +D 7 +R 7 +U 4 +R 7 +U 2 +R 1 +L 4 +U 6 +L 1 +D 1 +U 3 +R 7 +U 1 +R 3 +L 3 +R 2 +U 6 +L 6 +D 7 +L 7 +R 3 +U 5 +L 5 +D 4 +L 7 +R 5 +U 7 +D 5 +R 2 +U 2 +L 4 +U 4 +D 5 +L 6 +R 3 +D 4 +U 3 +D 6 +L 5 +U 1 +L 4 +R 2 +L 2 +U 7 +R 4 +U 4 +L 4 +D 1 +U 1 +D 3 +U 3 +D 3 +R 6 +L 5 +R 6 +D 1 +U 4 +L 5 +U 2 +D 6 +L 1 +U 5 +D 5 +R 5 +D 1 +L 4 +D 2 +U 1 +R 3 +U 3 +L 3 +D 5 +U 2 +R 4 +U 1 +D 8 +R 2 +U 4 +L 4 +D 8 +R 2 +U 6 +D 4 +R 5 +U 4 +R 2 +L 2 +U 4 +D 8 +R 7 +L 5 +R 5 +U 6 +R 6 +U 7 +D 2 +U 6 +D 1 +R 5 +U 1 +D 6 +R 7 +L 1 +R 1 +D 1 +R 3 +D 8 +R 1 +U 2 +L 4 +R 4 +L 6 +R 2 +U 7 +R 1 +L 3 +D 1 +L 3 +U 7 +R 8 +L 7 +D 1 +R 1 +L 7 +D 7 +U 5 +D 5 +L 1 +U 7 +D 7 +R 5 +D 5 +U 5 +R 6 +L 8 +R 6 +L 1 +R 3 +D 1 +L 2 +U 7 +R 5 +L 4 +U 3 +L 6 +U 6 +R 6 +L 4 +U 6 +R 5 +U 2 +R 7 +U 8 +R 5 +U 2 +R 4 +L 5 +R 1 +D 4 +L 8 +R 3 +L 2 +U 7 +R 4 +L 6 +R 5 +U 2 +L 3 +D 8 +R 8 +D 7 +L 4 +D 4 +R 6 +L 7 +U 8 +L 5 +R 4 +D 4 +R 8 +D 2 +L 7 +D 6 +U 3 +L 4 +R 6 +U 8 +L 2 +R 6 +L 7 +U 4 +L 3 +D 2 +R 8 +U 3 +D 2 +U 5 +R 7 +D 7 +L 6 +U 8 +D 6 +U 5 +D 6 +U 2 +L 7 +R 4 +L 9 +R 2 +U 3 +R 7 +U 6 +L 3 +U 8 +L 9 +U 5 +R 1 +L 5 +D 5 +R 8 +L 3 +U 1 +L 2 +D 5 +U 1 +D 8 +U 5 +D 7 +L 9 +U 6 +D 4 +R 5 +U 3 +L 1 +D 9 +R 4 +D 7 +U 2 +R 2 +D 4 +L 2 +U 9 +R 7 +U 1 +R 2 +D 7 +R 3 +D 6 +L 7 +U 5 +R 9 +U 4 +L 7 +R 5 +U 7 +L 4 +D 4 +R 9 +D 5 +L 5 +D 1 +R 2 +D 6 +L 8 +U 8 +L 6 +D 7 +L 5 +U 2 +L 3 +D 9 +U 8 +D 3 +L 8 +R 2 +D 7 +R 5 +D 3 +U 1 +R 3 +L 9 +U 3 +D 2 +L 4 +D 7 +R 8 +U 7 +D 5 +U 5 +R 7 +L 8 +D 7 +L 7 +D 8 +U 5 +R 9 +U 10 +R 5 +U 6 +R 7 +D 9 +L 2 +R 1 +D 2 +R 9 +L 4 +U 4 +R 5 +D 9 +U 4 +L 7 +D 9 +L 4 +D 4 +L 10 +U 9 +L 8 +R 10 +U 9 +L 10 +U 2 +R 8 +L 2 +D 6 +R 1 +D 1 +L 5 +U 2 +R 9 +U 2 +R 1 +U 1 +L 6 +D 1 +R 2 +D 10 +L 7 +R 2 +U 7 +D 4 +R 9 +L 7 +D 8 +U 5 +R 10 +L 10 +D 2 +U 2 +R 8 +U 9 +D 1 +R 2 +L 10 +U 5 +R 8 +L 7 +D 1 +R 7 +D 3 +U 8 +L 4 +D 3 +U 4 +R 5 +U 9 +R 10 +U 3 +R 10 +L 6 +R 5 +U 8 +D 9 +R 4 +U 9 +L 1 +U 7 +R 4 +U 2 +L 7 +D 9 +U 8 +L 7 +U 8 +L 3 +R 7 +D 7 +L 7 +D 6 +L 2 +D 5 +U 4 +R 8 +L 6 +R 7 +D 4 +U 10 +L 8 +R 10 +D 2 +R 1 +U 7 +L 5 +R 5 +L 10 +D 5 +R 10 +U 7 +L 7 +R 9 +D 2 +L 8 +R 11 +D 4 +R 6 +L 5 +R 8 +U 1 +L 6 +U 3 +L 1 +D 10 +L 9 +D 3 +U 10 +L 9 +U 8 +D 11 +U 11 +L 1 +R 2 +U 1 +L 3 +U 2 +D 1 +U 4 +R 6 +L 6 +R 7 +L 9 +R 8 +L 4 +D 11 +L 4 +U 10 +D 6 +L 10 +U 2 +R 3 +L 10 +D 5 +L 1 +D 2 +R 6 +U 2 +L 2 +U 9 +R 10 +L 4 +D 2 +R 10 +L 5 +U 2 +L 1 +D 6 +L 4 +U 5 +D 8 +U 11 +D 5 +U 10 +L 8 +R 5 +L 6 +R 5 +L 2 +R 7 +D 4 +L 9 +D 2 +R 11 +D 5 +U 6 +D 2 +L 4 +R 9 +L 2 +D 5 +R 2 +D 9 +R 8 +L 3 +U 8 +R 9 +D 8 +R 4 +D 5 +U 7 +D 7 +R 4 +D 10 +L 1 +D 5 +U 11 +L 11 +U 11 +L 10 +U 9 +L 6 +D 4 +R 6 +D 8 +U 6 +D 11 +R 2 +U 9 +L 6 +U 5 +R 10 +D 8 +L 9 +R 8 +D 6 +L 8 +D 12 +U 2 +R 1 +L 1 +U 1 +R 6 +D 3 +U 6 +D 5 +R 9 +L 12 +U 7 +R 6 +L 9 +U 1 +R 12 +D 11 +R 6 +U 11 +D 4 +L 2 +R 12 +U 5 +R 3 +U 11 +D 6 +U 9 +L 10 +U 2 +L 9 +U 9 +R 6 +L 12 +D 2 +U 10 +R 3 +U 12 +L 12 +R 4 +L 11 +D 1 +L 3 +D 11 +U 5 +D 1 +U 12 +L 12 +U 5 +R 8 +L 1 +D 1 +L 3 +U 1 +R 4 +D 4 +L 6 +R 11 +U 11 +D 2 +U 7 +L 3 +D 3 +R 10 +D 1 +U 8 +D 7 +U 6 +L 10 +R 3 +L 6 +D 10 +L 2 +U 6 +D 8 +R 2 +L 5 +U 1 +D 5 +U 10 +D 5 +L 7 +U 3 +R 6 +D 2 +U 5 +D 10 +L 5 +D 2 +R 9 +L 11 +D 3 +L 6 +R 11 +U 10 +L 12 +D 12 +U 8 +D 5 +R 1 +L 6 +D 11 +U 12 +R 11 +D 12 +L 5 +D 7 +R 10 +U 4 +L 1 +R 3 +U 9 +L 13 +U 8 +R 3 +D 4 +R 8 +D 3 +R 8 +D 13 +U 1 +R 12 +U 12 +L 8 +R 5 +D 1 +U 3 +R 9 +D 6 +U 11 +R 3 +D 12 +R 8 +L 6 +D 8 +U 6 +R 13 +L 10 +U 6 +R 5 +L 11 +U 9 +L 12 +R 8 +L 6 +R 3 +D 12 +L 9 +D 3 +U 5 +L 6 +R 7 +L 13 +D 4 +R 7 +U 5 +D 13 +R 4 +U 11 +D 8 +R 5 +D 5 +U 3 +L 6 +U 4 +R 8 +D 8 +U 9 +L 8 +U 2 +R 7 +L 2 +U 1 +D 12 +R 3 +L 2 +R 8 +D 4 +L 7 +R 8 +D 6 +U 10 +R 7 +L 9 +D 5 +R 12 +U 2 +R 10 +U 4 +L 13 +R 9 +L 12 +U 3 +R 10 +U 3 +L 8 +R 12 +U 8 +R 11 +U 5 +L 3 +D 10 +R 8 +D 4 +R 4 +U 9 +L 13 +U 5 +R 11 +L 12 +U 11 +D 9 +L 5 +R 13 +U 2 +L 1 +U 12 +R 13 +L 1 +R 2 +U 6 +R 12 +D 11 +L 8 +U 13 +L 14 +U 13 +L 3 +U 9 +L 10 +R 11 +D 6 +U 8 +D 11 +U 5 +L 11 +U 8 +L 3 +R 2 +D 11 +L 12 +U 14 +R 3 +D 1 +U 14 +R 7 +D 14 +R 4 +D 5 +L 13 +R 2 +L 13 +U 8 +L 7 +D 14 +L 2 +U 13 +D 2 +L 13 +D 13 +U 5 +L 12 +U 3 +L 6 +D 2 +U 3 +L 9 +D 14 +R 3 +L 1 +R 6 +D 3 +U 6 +D 9 +L 5 +D 11 +L 1 +D 11 +L 9 +D 8 +U 13 +D 4 +R 5 +D 14 +L 10 +U 14 +D 14 +R 1 +L 8 +U 5 +D 11 +U 8 +D 14 +L 4 +D 13 +U 13 +R 6 +U 11 +L 9 +U 6 +D 11 +R 11 +U 11 +D 14 +R 6 +L 13 +U 1 +R 11 +L 9 +R 11 +L 4 +R 14 +L 2 +D 14 +R 3 +U 9 +D 6 +U 12 +R 7 +U 9 +L 4 +D 9 +R 11 +L 9 +R 14 +L 12 +U 1 +L 10 +U 7 +R 13 +D 3 +R 8 +L 4 +R 4 +L 3 +U 1 +R 14 +D 4 +R 9 +U 3 +L 12 +U 11 +R 5 +U 4 +L 11 +D 14 +L 12 +R 7 +L 15 +R 14 +D 12 +U 10 +R 11 +D 9 +U 14 +R 5 +D 13 +L 14 +D 9 +U 1 +R 10 +U 15 +R 12 +D 13 +L 9 +R 9 +U 8 +R 2 +U 3 +R 3 +D 8 +U 14 +R 4 +L 7 +U 11 +D 6 +L 14 +D 6 +R 8 +U 8 +R 5 +L 13 +R 9 +D 6 +R 6 +L 9 +U 2 +R 13 +U 4 +D 9 +U 14 +R 15 +D 2 +R 6 +D 7 +L 3 +U 14 +D 5 +U 13 +R 8 +D 15 +U 3 +R 9 +D 10 +R 11 +U 12 +D 8 +R 3 +L 5 +D 15 +L 1 +U 6 +R 15 +D 1 +R 13 +D 1 +U 2 +R 15 +D 3 +L 4 +U 9 +D 1 +L 13 +R 11 +U 15 +R 5 +U 15 +R 13 +L 5 +U 2 +R 5 +D 11 +U 11 +L 12 +D 15 +R 11 +L 7 +D 2 +L 11 +D 2 +L 7 +U 7 +R 5 +D 8 +R 6 +L 10 +U 5 +R 3 +U 7 +R 1 +U 7 +L 5 +U 11 +R 14 +U 9 +D 8 +R 10 +L 9 +R 11 +U 6 +R 14 +U 16 +D 13 +U 16 +L 1 +D 2 +R 13 +D 11 +U 9 +R 4 +L 11 +U 2 +L 7 +R 2 +U 14 +L 11 +R 10 +L 1 +R 15 +U 9 +L 16 +R 11 +D 15 +U 10 +L 7 +R 9 +L 9 +D 16 +U 7 +D 10 +R 11 +L 3 +R 16 +L 6 +R 7 +L 7 +R 13 +L 5 +R 6 +D 15 +R 11 +D 7 +U 5 +D 11 +U 13 +R 13 +U 12 +D 10 +L 11 +D 10 +R 6 +U 10 +D 9 +U 1 +L 13 +U 13 +L 11 +U 15 +L 7 +R 2 +D 2 +U 9 +D 1 +L 15 +U 6 +D 3 +U 7 +D 6 +L 6 +U 14 +L 3 +U 16 +L 8 +D 8 +R 4 +D 1 +U 13 +L 4 +U 1 +R 15 +U 3 +D 6 +L 4 +D 12 +L 16 +D 7 +U 10 +L 3 +R 6 +L 12 +R 9 +D 1 +U 7 +L 14 +D 5 +U 15 +D 14 +L 5 +R 6 +D 4 +U 10 +L 17 +R 9 +D 1 +R 12 +U 17 +R 14 +U 4 +R 14 +U 2 +D 13 +R 6 +L 12 +D 10 +L 9 +D 17 +R 14 +D 12 +L 5 +D 17 +L 8 +U 16 +D 9 +U 7 +L 11 +R 13 +U 2 +D 15 +R 2 +L 5 +U 6 +L 5 +U 15 +D 13 +U 17 +R 17 +L 4 +U 17 +R 1 +D 16 +L 16 +R 7 +U 14 +L 3 +D 12 +L 2 +D 6 +R 10 +U 11 +R 8 +D 8 +U 3 +R 5 +U 12 +D 5 +U 14 +R 13 +U 12 +R 1 +U 4 +D 12 +L 6 +R 8 +D 9 +U 4 +D 16 +L 4 +D 7 +L 2 +U 13 +L 7 +D 16 +U 1 +D 14 +U 14 +L 10 +U 2 +D 11 +L 5 +D 14 +U 14 +L 11 +R 17 +D 3 +R 7 +D 6 +R 17 +D 4 +R 14 +L 7 +U 17 +L 6 +D 7 +L 9 +U 10 +L 4 +D 1 +L 17 +R 4 +D 13 +L 4 +D 9 +U 12 +L 6 +R 18 +L 8 +R 16 +L 14 +D 9 +L 18 +D 2 +U 4 +D 7 +R 8 +D 13 +L 17 +U 3 +D 10 +R 10 +L 13 +D 15 +L 14 +D 11 +R 7 +L 3 +R 17 +U 13 +R 14 +D 5 +L 12 +U 4 +R 17 +D 2 +U 7 +R 9 +U 16 +L 18 +D 13 +R 6 +D 8 +L 18 +D 7 +L 11 +R 9 +U 18 +L 10 +U 11 +D 10 +L 7 +D 9 +R 17 +L 4 +R 2 +U 1 +D 9 +U 16 +D 1 +U 5 +R 9 +U 13 +D 10 +U 10 +L 5 +D 1 +U 11 +L 3 +D 15 +U 2 +R 15 +D 1 +L 15 +R 16 +U 14 +L 9 +D 4 +R 15 +L 9 +U 6 +L 4 +R 13 +U 17 +D 6 +L 14 +D 18 +L 17 +D 2 +L 12 +D 11 +R 14 +U 3 +R 12 +L 9 +R 14 +L 16 +U 14 +L 9 +D 1 +L 7 +D 2 +R 2 +L 18 +D 3 +L 10 +D 15 +L 14 +U 11 +L 11 +D 3 +L 4 +R 14 +D 11 +R 8 +D 8 +L 2 +U 15 +L 15 +D 6 +U 1 +D 19 +U 5 +L 5 +U 17 +D 6 +R 5 +L 10 +R 19 +D 9 +R 12 +L 10 +R 1 +L 17 +U 14 +L 1 +D 1 +U 14 +D 14 +L 8 +D 10 +U 12 +L 18 +U 3 +D 17 +U 4 +L 13 +D 3 +R 16 +U 7 +R 19 +U 14 +D 7 +R 15 +L 19 +R 15 +U 11 +L 9 +U 15 +D 16 +U 3 +L 10 +U 1 +D 4 +U 13 +R 7 +U 15 +D 13 +R 18 +L 4 +U 11 +D 3 +L 14 +R 9 +L 8 +R 8 +U 10 +R 17 +L 16 +U 17 +D 15 +U 8 +D 5 +L 8 +R 9 +D 12 +L 2 +U 19 +L 11 +R 18 +D 14 +R 6 +D 4 +L 3 +D 15 +L 3 +R 1 +U 4 +L 6 +U 14 +L 18 +D 13 +R 12 +U 4 +L 12 +U 15 +L 15 +D 2 +L 13 +R 15 +L 3 +U 13 +R 6 +D 1 +U 12 +D 19 +U 10 +L 13 +D 9 +L 18 +U 3 +D 13 +U 2 +L 10 +D 18 +U 16 +D 9 +U 12 diff --git a/src/day_10.jl b/src/day_10.jl new file mode 100644 index 0000000..065e2d4 --- /dev/null +++ b/src/day_10.jl @@ -0,0 +1,53 @@ +include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl")) +import .Aoc: @aoc + +function p1(input::Vector{String}) + x = 1 + cycles = [] + for i in input + if i == "noop" + push!(cycles, x) + else + num = parse(Int, split(i)[2]) + push!(cycles, x) + push!(cycles, x) + x += num + end + end + sum = 0 + for i in 20:40:220 + sum += cycles[i] * i + end + sum +end + + +function p2(input::Vector{String}) + x = 1 + cycles = [] + for i in input + if i == "noop" + push!(cycles, x) + else + num = parse(Int, split(i)[2]) + push!(cycles, x) + push!(cycles, x) + x += num + end + end + cycle = 0 + while cycle < length(cycles) + x = cycles[cycle+1] + if abs(x - (cycle%40)) < 2 + print("#") + else + print(".") + end + cycle+=1 + if cycle % 40 == 0 + print("\n") + end + end +end + +@aoc(2022, 10) diff --git a/src/day_11.jl b/src/day_11.jl new file mode 100644 index 0000000..0b2c43d --- /dev/null +++ b/src/day_11.jl @@ -0,0 +1,94 @@ +include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl")) +import .Aoc: @aoc + +function parse_monkeys(input::Vector{String}) + curr_monkey = -1 + monkeys = Dict() + ops = Dict() + tests = Dict() + conditions = Dict() + for i in input + line = strip(i) + if line == "" + continue + end + if line[1:6] == "Monkey" + curr_monkey += 1 + continue + end + if line[1:8] == "Starting" + items = split(line, ':')[2] + items = split(items, ',') + items = map((x) -> parse(Int, strip(x)), items) + monkeys[curr_monkey] = items + continue + end + if line[1:9] == "Operation" + op = strip(split(line, '=')[2]) + op = split(op) + ops[curr_monkey] = op + continue + end + if line[1:4] == "Test" + div_by = parse(Int, split(line)[end]) + tests[curr_monkey] = [div_by] + continue + end + if line[1:2] == "If" + to = parse(Int, split(line)[end]) + push!(tests[curr_monkey], to) + continue + end + end + (monkeys, ops, tests, conditions) +end + +function run(turns, monkeys, ops, tests, conditions, worry_level_fn) + inspects = Dict() + + for turn in 1:turns + for m in 0:length(keys(monkeys))-1 + while length(monkeys[m]) > 0 + if haskey(inspects, m) + inspects[m] += 1 + else + inspects[m] = 1 + end + wl = popfirst!(monkeys[m]) + op = ops[m] + operand1 = op[1] == "old" ? wl : parse(Int, op[1]) + operand2 = op[3] == "old" ? wl : parse(Int, op[3]) + operator = op[2] + wl = eval(Meta.parse("$operand1 $operator $operand2")) + wl = worry_level_fn(wl) + if wl % tests[m][1] == 0 + push!(monkeys[tests[m][2]], wl) + else + push!(monkeys[tests[m][3]], wl) + end + end + end + end + inspects +end + +function p1(input::Vector{String}) + monkeys, ops, tests, conditions = parse_monkeys(input) + inspections = run(20, monkeys, ops, tests, conditions, x -> x % 3) + res = sort(collect(values(inspections)))[end-1:end] + res[1] * res[2] +end + + +function p2(input::Vector{String}) + monkeys, ops, tests, conditions = parse_monkeys(input) + lcm = 1 + for i in values(tests) + lcm *= i[1] + end + inspections = run(10000, monkeys, ops, tests, conditions, x -> x % lcm) + res = sort(collect(values(inspections)))[end-1:end] + res[1] * res[2] +end + +@aoc(2022, 11) diff --git a/src/day_12.jl b/src/day_12.jl new file mode 100644 index 0000000..067beee --- /dev/null +++ b/src/day_12.jl @@ -0,0 +1,47 @@ +include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl")) +import .Aoc: @aoc +using Graphs + +directions = [(1, 0), (-1, 0), (0, 1), (0, -1)] + +function build_graph(input::Vector{String}) + grid = hcat(collect.(input)...) + + start = findfirst(==('S'), grid) + dest = findfirst(==('E'), grid) + grid[start] = 'a' + grid[dest] = 'z' + + grid = map(x -> x - 'a', grid) + graph = SimpleDiGraph(length(grid)) + + for (i, h) in enumerate(grid) + ic = CartesianIndices(grid)[i] + + neighs = map(x -> ic + CartesianIndex(x), directions) + for d in filter(x -> checkbounds(Bool, grid, x), neighs) + if grid[d] <= h+1 + add_edge!(graph, i, LinearIndices(grid)[d]) + end + end + end + (start, dest, grid, graph) +end + +function p1(input::Vector{String}) + start, dest, grid, graph = build_graph(input) + + solution = dijkstra_shortest_paths(graph, LinearIndices(grid)[start]) + solution.dists[LinearIndices(grid)[dest]] +end + + +function p2(input::Vector{String}) + start, dest, grid, graph = build_graph(input) + sources = findall(==(0), grid) + + solution = dijkstra_shortest_paths(graph, map(x -> LinearIndices(grid)[x], sources)) + solution.dists[LinearIndices(grid)[dest]] +end + +@aoc(2022, 12) diff --git a/src/day_9.jl b/src/day_9.jl new file mode 100644 index 0000000..0129655 --- /dev/null +++ b/src/day_9.jl @@ -0,0 +1,58 @@ +include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl")) +import .Aoc: @aoc + +offsets = Dict('L' => (-1, 0), 'R' => (1, 0), 'U' => (0, 1), 'D' => (0, -1)) + +function p1(input::Vector{String}) + headx, heady = (0,0) + tailx, taily = (0,0) + map = Dict((0,0) => true) + for i in input + x, y = offsets[i[1]] + for _ in 1:parse(Int, split(i)[2]) + headx += x + heady += y + while max(abs(tailx - headx), abs(taily - heady)) > 1 + if abs(tailx - headx) > 0 + tailx += headx > tailx ? 1 : -1 + end + if abs(taily - heady) > 0 + taily += heady > taily ? 1 : -1 + end + map[(tailx, taily)] = true + end + end + end + length(keys(map)) +end + +function p2(input::Vector{String}) + rope = [ [0, 0] for _ in 1:10 ] + map = Dict((0,0) => true) + for i in input + x, y = offsets[i[1]] + for _ in 1:parse(Int, split(i)[2]) + head = rope[1] + rope[1] = [head[1] + x, head[2] + y] + + for ri in 2:10 + prevx, prevy = rope[ri-1] + currx, curry = rope[ri] + while max(abs(currx - prevx), abs(curry - prevy)) > 1 + if abs(currx - prevx) > 0 + currx += prevx > currx ? 1 : -1 + end + if abs(curry - prevy) > 0 + curry += prevy > curry ? 1 : -1 + end + end + rope[ri] = [currx, curry] + end + last = rope[end] + map[(last[1], last[2])] = true + end + end + length(keys(map)) +end + +@aoc(2022, 9)