commit 9755ba3236266ea10d532d2de17f718b206fcaf5
parent 9ef6524cd12f950ff324f885843b25e86266dc92
Author: Louis Burda <quent.burda@gmail.com>
Date: Fri, 11 Dec 2020 09:45:20 +0100
day 10 prepare and day 11 solution - unpolished
Diffstat:
M | aoc | | | 54 | +++++++++++++++++++++++++----------------------------- |
A | src/day10/input | | | 100 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | src/day10/main.zig | | | 16 | ++++++++++++++++ |
A | src/day10/part1 | | | 68 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | src/day11/input | | | 90 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | src/day11/main.zig | | | 161 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | src/day11/part1 | | | 58 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | src/day11/part2 | | | 56 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
8 files changed, 574 insertions(+), 29 deletions(-)
diff --git a/aoc b/aoc
@@ -4,39 +4,35 @@ function rmprefix() {
echo "${1:${#2}}"
}
-SCRIPTPATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-REPOROOT=$(git -C "$SCRIPTPATH" rev-parse --show-toplevel)
-
-if [[ "${BASH_SOURCE[0]}" != "$0" ]]; then
- if [ -z "$PS1_PREFIX" ]; then
- echo "Enabling AoC env.."
-
- export AOCBIN="$REPOROOT/aoc"
-
- export PS1_PREFIX="[🎄]:"
- export PS1="$PS1_PREFIX$PS1"
-
- export PATH_PREFIX="$REPOROOT:"
- export PATH="$PATH_PREFIX$PATH"
-
- export REPOROOT="$REPOROOT"
- else
- echo "Disabling AoC env.."
-
+function aoc() {
+ [ $# -lt 1 ] && exit;
+ if [ $1 == "deactivate" ]; then
export PS1=$(rmprefix "$PS1" "$PS1_PREFIX")
export PS1_PREFIX=
- export PATH=$(rmprefix "$PATH" "$PATH_PREFIX")
- export PATH_PREFIX=
-
- export AOCBIN=
export REPOROOT=
- fi
-else
- [ $# -lt 1 ] && exit 0
- if [ -e "$REPOROOT/scripts/$1" ]; then
- "$REPOROOT/scripts/$1" ${@:2}
+ unset aoc
else
- echo "No such script"
+ [ $# -lt 1 ] && exit 0
+ if [ -e "$REPOROOT/scripts/$1" ]; then
+ "$REPOROOT/scripts/$1" ${@:2}
+ else
+ echo "No such script"
+ fi
+ fi
+}
+
+SCRIPTPATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+REPOROOT=$(git -C "$SCRIPTPATH" rev-parse --show-toplevel)
+
+if [[ "${BASH_SOURCE[0]}" != "$0" ]]; then
+ echo "Enabling AoC env.."
+ if [ ! -z "$PS1_PREFIX" ]; then
+ echo "Already initialized!"
+ return 0
fi
+ export PS1_PREFIX="[🎄]:"
+ export PS1="$PS1_PREFIX$PS1"
+
+ export REPOROOT="$REPOROOT"
fi
diff --git a/src/day10/input b/src/day10/input
@@ -0,0 +1,100 @@
+46
+63
+21
+115
+125
+35
+89
+17
+116
+90
+51
+66
+111
+142
+148
+60
+2
+50
+82
+20
+47
+24
+80
+101
+103
+16
+34
+72
+145
+141
+124
+14
+123
+27
+62
+61
+95
+138
+29
+7
+149
+147
+104
+152
+22
+81
+11
+96
+97
+30
+41
+98
+59
+45
+88
+37
+10
+114
+110
+4
+56
+122
+139
+117
+108
+91
+36
+146
+131
+109
+31
+75
+70
+140
+38
+121
+3
+28
+118
+54
+107
+84
+15
+76
+71
+102
+130
+132
+87
+55
+129
+83
+23
+42
+69
+1
+77
+135
+128
+94
diff --git a/src/day10/main.zig b/src/day10/main.zig
@@ -0,0 +1,16 @@
+const std = @import("std");
+const aoc = @import("aoc");
+
+fn part1(allocator: *std.mem.Allocator, input: []u8, args: [][]u8) !void {
+ var answer: u32 = 0;
+
+ std.debug.print("{}\n", .{answer});
+}
+
+fn part2(allocator: *std.mem.Allocator, input: []u8, args: [][]u8) !void {
+ var answer: u32 = 0;
+
+ std.debug.print("{}\n", .{answer});
+}
+
+pub const main = aoc.gen_main(part1, part2);
diff --git a/src/day10/part1 b/src/day10/part1
@@ -0,0 +1,68 @@
+--- Day 10: Adapter Array ---
+
+Patched into the aircraft's data port, you discover weather forecasts of a massive tropical storm.
+Before you can figure out whether it will impact your vacation plans, however, your device suddenly
+turns off!
+
+Its battery is dead.
+
+You'll need to plug it in. There's only one problem: the charging outlet near your seat produces the
+wrong number of [1m[37mjolts[0m. Always prepared, you make a list of all of the joltage adapters
+in your bag.
+
+Each of your joltage adapters is rated for a specific [1m[37moutput joltage[0m (your puzzle
+input). Any given adapter can take an input 1, 2, or 3 jolts [1m[37mlower[0m than its rating and
+still produce its rated output joltage.
+
+In addition, your device has a built-in joltage adapter rated for [1m[37m3 jolts higher[0m than
+the highest-rated adapter in your bag. (If your adapter list were 3, 9, and 6, your device's
+built-in adapter would be rated for 12 jolts.)
+
+Treat the charging outlet near your seat as having an effective joltage rating of 0.
+
+Since you have some time to kill, you might as well test all of your adapters. Wouldn't want to get
+to your resort and realize you can't even charge your device!
+
+If you [1m[37muse every adapter in your bag[0m at once, what is the distribution of joltage
+differences between the charging outlet, the adapters, and your device?
+
+For example, suppose that in your bag, you have adapters with the following joltage ratings:
+
+16 10 15 5 1 11 7 19 6 12 4
+
+With these adapters, your device's built-in joltage adapter would be rated for 19 + 3 =
+[1m[37m22[0m jolts, 3 higher than the highest-rated adapter.
+
+Because adapters can only connect to a source 1-3 jolts lower than its rating, in order to use every
+adapter, you'd need to choose them like this:
+
+- The charging outlet has an effective rating of 0 jolts, so the only adapters that could connect to
+it directly would need to have a joltage rating of 1, 2, or 3 jolts. Of these, only one you have is
+an adapter rated 1 jolt (difference of [1m[37m1[0m). - From your 1-jolt rated adapter, the only
+choice is your 4-jolt rated adapter (difference of [1m[37m3[0m). - From the 4-jolt rated adapter,
+the adapters rated 5, 6, or 7 are valid choices. However, in order to not skip any adapters, you
+have to pick the adapter rated 5 jolts (difference of [1m[37m1[0m). - Similarly, the next choices
+would need to be the adapter rated 6 and then the adapter rated 7 (with difference of [1m[37m1[0m
+and [1m[37m1[0m). - The only adapter that works with the 7-jolt rated adapter is the one rated 10
+jolts (difference of [1m[37m3[0m). - From 10, the choices are 11 or 12; choose 11 (difference of
+[1m[37m1[0m) and then 12 (difference of [1m[37m1[0m). - After 12, only valid adapter has a
+rating of 15 (difference of [1m[37m3[0m), then 16 (difference of [1m[37m1[0m), then 19
+(difference of [1m[37m3[0m). - Finally, your device's built-in adapter is always 3 higher than
+the highest adapter, so its rating is 22 jolts (always a difference of [1m[37m3[0m).
+
+In this example, when using every adapter, there are [1m[37m7[0m differences of 1 jolt and
+[1m[37m5[0m differences of 3 jolts.
+
+Here is a larger example:
+
+28 33 18 42 31 14 46 20 48 47 24 23 49 45 19 38 39 11 1 32 25 35 8 17 7 9 4 2 34 10 3
+
+In this larger example, in a chain that uses all of the adapters, there are [1m[37m22[0m
+differences of 1 jolt and [1m[37m10[0m differences of 3 jolts.
+
+Find a chain that uses all of your adapters to connect the charging outlet to your device's built-in
+adapter and count the joltage differences between the charging outlet, the adapters, and your
+device. [1m[37mWhat is the number of 1-jolt differences multiplied by the number of 3-jolt
+differences?[0m
+
+
diff --git a/src/day11/input b/src/day11/input
@@ -0,0 +1,90 @@
+LLLLL.L.LLLLLLL.LL.LLLLL.LLLLLLL..LLLLL.LLLLL.L..LLLLL..LLLLLLLL.LLLL.LLL.LLLLLLL.LLLLLLLLLL
+LLLLLLL.LLLLL..LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLL.LL.LLLLLLLLL.LLLLLL.LLLLLLLLLL
+LLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL
+LLLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.L.LLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLL.LLLL.LLLLL
+LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL.LLL.L.LLLLLLLL.LLLLLLLLL.LLLLLLLL..LLLLLLLLLLLLL.LLL
+LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLL.LL.LLLLLL.LLLLL.LL.LLLLLLLLL..LLLLLLLLLLLLLLLL
+L.....L.....LL.LL.L.L..L............L.L.L.........L...L...LLLL..L.....L.L.L.....L.LLLL.....L
+LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLL..LLLLL.LLLLLLLL.LLLLL.LLL.LLLLL.LLLLLLLLL.LLLLLLLLLL.LLLLLL
+.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLL.LLL.LLLLL.LLLLLLLLL.LLLLLL.LLLLL.L.LL
+LLLL.LL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL
+LL.LLL..LLLLL.LLLLLLL.L.LLLLLLLL.LLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLL
+LLLLLLLLLLLLL..LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL..LLLLLLL..LLLLLLLLL.LLLLLL.LLLLLLLLLL
+LLLLLL..LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLL
+LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLL.LLLL.LLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL
+LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLL.LLL.LLLLLLLLL.L.LLLL.LLLL.LLLLL
+LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLL.LLLLLLLL.L.LLLLLLLLLLLLLLLL..LLLLLL.LLLLLLLLLL
+L..L..L.L.LLL.....L......LL.L.LL.L.LL....L.....LL..LL..LL...L....L.L.L......L..L.L.LL..LLLLL
+LLLLLLL.LLLLL.LLLLLLL.L.LLLL.LLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLL
+LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL..LLLLLLLL.LLLLLL..LLLLLLLLLLLLLL.L.LLLLLLLLLLLLLL.LLLLLLLLLL
+LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLL.LLLLLLLL.L
+LLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLL.LLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLL.
+LLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL..LLLLLLLL.LLL.L.LLLLLL.LLL.LLLLLLLL.LLLLLL..LLLLLLLLL
+LLLLL.LLLLL.L.LLLLL.LLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLL.LLLLLLLLLLLL.LLLLLLLLLL
+LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLL.LL.LLLLLLLLLL
+..LL..L.L..LL..L..LL...LLL.L.L.L.......L........L........L.L......L.L..LL...L..LLLLL..L.....
+LLLLLLL.LLLLL.LLLLLL.L..L.LLLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL
+LLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.L.LLLLLLL.LLLLLLL.LLL.LLLL.LLLLLLL.LL
+LL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LL.L
+LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLL.LLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL
+LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLL.LLLLL.LLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLLL.LLLLLLLLLL
+LLLLLLL.LLL.LLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLL
+..LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLL.LLLLL.LLLLL.LLL.LLLLLLLLL.LLL.LL.LLLLLLLLLL
+LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLL
+....L...L.....L.....LLLL......L.L......L........LL...L....LLLL....LL......LL...........L.L.L
+LLLLLLL.LLLLLLLLLLLL.LL.L.LL.LLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LL.LL..LLLLLLLLLL
+LLLL.LL.L.LLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.L.LLL.LLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLL.LLLL
+LLLLLLL.LLLLL..LLLLLLLL.LLLLLLLL.LLLLL..LLLLL.LLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLLLL
+LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLL...LLLLLLLLLL.LL.LLLLLLLLLLLLLLLLL.L..LLLLL.LLLLLLLLLL
+LLLLLLL.LLLLLLLLLLLLLLL..LLL.LL..LLL....LLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLL.LLLLL.LLLL
+LLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLL..LLLLLLL.LLLLLL.LLLLLLLLLL
+LL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLL.LLLLL.LLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLLLLL
+L.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLL.LLLLL.LLLL.LLLL.LLLLLLLLL.LL.LL..LLLLLLLLLL
+LL......L.....LL....L.L..L.L.L..L..L......LL...L.L.L.LL..LLLL.LLL....L..L...L...L..L.LLL..L.
+LLLLLL.LL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLL.LLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLL
+LLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLL.LLLLLLLLLLLLLLLLLLLLLLL
+LLLLLLL.LLLLL.LLLLLLLL..LLLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL
+LLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL
+LLLLLLL.LLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL..LLLL.LLLLLLLLLL.LLLLLL.LLL.LL.L.LLLLLLLL.L
+LLLLLLL.LLLLL.LLLL.LLLLLLLLLLLLL.LL..LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.L
+LLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL
+LLL..LLLLLLLL.LLLLLLLLLLLLLL.LLL.LLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLL
+.....L....L.......L...L..LL.LL.LL.L.L.L..L..L..LLL..L.......LL.LL..LL......LL.L..L....L.....
+LL.LLLL.LLLLL.LLLLLLLLL.LLLLL..LLLLLLLL..LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLL.LLLL..LLLL
+LLLLL.L.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL
+LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLL
+LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL..LLLLLLLLLLLLLL.LLLLLLLLL.L.LLLLLLLLLLLLLL.LLLLLLLLLL
+LLLLLLL.LLLLL.LLLLLLLLL.L.LLL.LL.LLLLLL.LLLLLLLL.LL..LLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLL
+.....LL.....L.L...............L..........LLL................LLLL.....L.L............L..L..LL
+LLLLLL..LLL.L.LLLLLLLLLLLLLL.LLL.LL.LLL.LLLLLLLLLLL.LL.LLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL
+LLL.LLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLL.LLLL.LLLLL.LLLLLLLLLL..LLLLL.LLLLLLLL.L
+LLLLLL..LLLLL.LLLL.LLLL.LLLLLLLL.LLLL.L.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL
+LLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL..LLLLLLLLLLLL.LLLLLLLLLL
+LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL.L.LLLLLL.LLLLL.LLLLLLLLL..LLL.LLLLLLLLLLLLLLLLLLLLLL
+.L.L.L.......L...LL....LLL.L.....LL..L.L..LLLL......L.LL......L.L.L.....LL...L....L..L.LL..L
+LLLLLLL.L.LLL.LLLLLL.LL.LLLL.LLL.LLLLLL.LLLLLLLL.L..L.L.LLLLLLLL.LLLLLLLLL.LLL..LLLLL.LLLLLL
+LLLLLL..LLLLL.LLLLLLLLL.L.LLLLLL.LLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLL..LLLLLLL.LLLLLL.LLLLLLLLLL
+LLLLLLLLLLLL..LLLLLLLLL.L.LLLLLLL.LLLLL.LLLL.LLL.LLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL
+LLLLLLL.LLLLL.LLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL
+LLLL.LL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLL.LLL.LLLLLLLLLLLLLLLL.LLLLLLLLLL
+LLLLL.L.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLL.
+L.......LL.....L..L....LLL..L..LL....LL....L.LL.......LLL.....LL.L...LLLLL..L..LL.LL.LL..LL.
+LLL.LLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLL.L.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL
+LLLLLLL.LL.LL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLL...LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
+LLLLLLL.LLL.L.L.LLLLLLLLLLLLL.LLLLLLLL..LLLLLLL..LL.LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLLL
+LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL..LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL
+LLLLLLL.LLLLL.LLLL.LLLL.LLLLLLLL.LL..LL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLL
+L.LLLLL.LLLLLLLLLLLLLLL.LLLLLL.L.LLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLL.LLLLLLLLLLLLLLLLLL.L.LL
+LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLL.LLLLLLLLL.L.L..LLLL.LLLL.LLLLL.LLLLLLLLLL.LL.LLLLLLL
+LLLLLLLLLLLLLLLLLLL.LLL.LLLLLLLL.LLLLL..LLLLLLLL.LLL.L.LLLL.LLL..LLLLLLLLLLLLLLLLLLLL.LLLLLL
+.L..LL...LL...L..LL......L.LLLL.L...L.LL..LLL............LL....LL.LL..L..L...L...L...L...LL.
+LL.LLLL.LLLLLL.LLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.L
+LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLL.
+LLLLLLL.LLLLL.LLLLLLLLL.LLLLL.L..LLLLLLL.LLLLLL..LLLLL.LLLLLLLLL.LL.LLLLLL.LL.LL.LLLLLLLLLLL
+LLL.LLL.LLLLL.LLL.LLLLL.LLLLLLL.LLLLLLL.L.LLLLLL.LLLLLLLLLL.LLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLL
+LLLLLLL.LLLLL..L.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLL.LLLLL..LLLLLLLLLL
+LLLLLLL.LLLLLLLLLLLLLLL..L.LLL.L.LLLLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLL
+LLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLL.L.LLLLLLLL.LLLLLLL.L..LLLLLLLL.LLLL.L.LLLLLLLLLL
+LLLLLLLLLLLLL.L.LLLLLL.LLLLLLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLL.
+LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLL..LLLLLLLLL
+LLLLLLL.LL.LL.LLLLLLLLL.LLLLLLLLLLLLLLL.L.LLLLLL.LLLLL.LLLLLLLLL.LLLLLLL.L.LLLLLLLLLLLLLLLLL
diff --git a/src/day11/main.zig b/src/day11/main.zig
@@ -0,0 +1,161 @@
+const std = @import("std");
+const aoc = @import("aoc");
+
+const SeatState = enum { EMPTY, FLOOR, TAKEN };
+const MapDims = struct { width: usize, height: usize };
+const Dir = struct { x: i8, y: i8 };
+const Pos = struct { x: i128, y: i128 };
+
+const adjacent = [_]Dir{
+ Dir{ .x = -1, .y = -1 },
+ Dir{ .x = -0, .y = -1 },
+ Dir{ .x = 1, .y = -1 },
+ Dir{ .x = -1, .y = 0 },
+ Dir{ .x = 1, .y = 0 },
+ Dir{ .x = -1, .y = 1 },
+ Dir{ .x = 0, .y = 1 },
+ Dir{ .x = 1, .y = 1 },
+};
+
+fn parseMap(mapitems: *[]SeatState, dims: *MapDims, input: []const u8, allocator: *std.mem.Allocator) !void {
+ var lineit = std.mem.tokenize(input, "\n");
+ var map = std.ArrayList(SeatState).init(allocator);
+ errdefer map.deinit();
+ while (lineit.next()) |line| {
+ if (dims.width == 0) {
+ dims.width = line.len;
+ } else if (dims.width != line.len) {
+ return aoc.Error.InvalidInput;
+ }
+ for (line) |c, i| {
+ try map.append(switch (c) {
+ '#' => SeatState.TAKEN,
+ 'L' => SeatState.EMPTY,
+ '.' => SeatState.FLOOR,
+ else => {
+ return aoc.Error.InvalidInput;
+ },
+ });
+ }
+ dims.height += 1;
+ }
+ mapitems.* = map.toOwnedSlice();
+}
+
+fn printMap(mapitems: []SeatState, dims: MapDims) void {
+ for (mapitems) |state, i| {
+ const c: u8 = switch (state) {
+ SeatState.EMPTY => 'L',
+ SeatState.TAKEN => '#',
+ SeatState.FLOOR => '.',
+ };
+ if (i % dims.width == 0) {
+ std.debug.print("\n", .{});
+ }
+ std.debug.print("{c}", .{c});
+ }
+}
+
+fn simulateStrategyOne(before: []SeatState, after: []SeatState, dims: MapDims) u32 {
+ var seat_changes: u32 = 0;
+ for (before) |state, i| {
+ const p = Pos{ .x = i % dims.width, .y = i / dims.width };
+ var count: u32 = 0;
+ for (adjacent) |ap| {
+ if (p.x + ap.x >= dims.width or p.x + ap.x < 0 or p.y + ap.y >= dims.height or p.y + ap.y < 0) continue;
+ const ni = @intCast(u64, @intCast(i64, i) + ap.x + ap.y * @intCast(i64, dims.width));
+ count += @boolToInt(before[ni] == SeatState.TAKEN);
+ }
+ if (state == SeatState.EMPTY and count == 0) {
+ after[i] = SeatState.TAKEN;
+ seat_changes += 1;
+ } else if (state == SeatState.TAKEN and count >= 4) {
+ after[i] = SeatState.EMPTY;
+ seat_changes += 1;
+ } else {
+ after[i] = before[i];
+ }
+ }
+ return seat_changes;
+}
+
+fn simulateStrategyTwo(before: []SeatState, after: []SeatState, dims: MapDims) u32 {
+ var seat_changes: u32 = 0;
+ for (before) |state, i| {
+ const p = Pos{ .x = i % dims.width, .y = i / dims.width };
+ var count: u32 = 0;
+ for (adjacent) |ap| {
+ var iterp = Pos{ .x = p.x + ap.x, .y = p.y + ap.y };
+ while (iterp.x < dims.width and iterp.x >= 0 and iterp.y < dims.height and iterp.y >= 0) {
+ const ni = @intCast(u64, iterp.x + iterp.y * @intCast(i64, dims.width));
+ if (before[ni] == SeatState.TAKEN) {
+ count += 1;
+ break;
+ } else if (before[ni] == SeatState.EMPTY) {
+ break;
+ } else {
+ iterp.x += ap.x;
+ iterp.y += ap.y;
+ }
+ }
+ }
+ if (state == SeatState.EMPTY and count == 0) {
+ after[i] = SeatState.TAKEN;
+ seat_changes += 1;
+ } else if (state == SeatState.TAKEN and count >= 5) {
+ after[i] = SeatState.EMPTY;
+ seat_changes += 1;
+ } else {
+ after[i] = before[i];
+ }
+ }
+ return seat_changes;
+}
+
+fn part1(allocator: *std.mem.Allocator, input: []u8, args: [][]u8) !void {
+ var mapdims = MapDims{ .width = 0, .height = 0 };
+ var mapitems: []SeatState = undefined;
+ try parseMap(&mapitems, &mapdims, input, allocator);
+ defer allocator.free(mapitems);
+
+ var mapresult = try allocator.alloc(SeatState, mapitems.len);
+ defer allocator.free(mapresult);
+
+ var round: u32 = 0;
+ while (simulateStrategyOne(mapitems, mapresult, mapdims) > 0) : (round += 1) {
+ std.debug.print("\rRound: {}", .{round});
+ std.mem.copy(SeatState, mapitems, mapresult);
+ }
+
+ var taken_count: u64 = 0;
+ for (mapresult) |state| {
+ taken_count += @boolToInt(state == SeatState.TAKEN);
+ }
+
+ std.debug.print("\nSeats Occupied: {}\n", .{taken_count});
+}
+
+fn part2(allocator: *std.mem.Allocator, input: []u8, args: [][]u8) !void {
+ var mapdims = MapDims{ .width = 0, .height = 0 };
+ var mapitems: []SeatState = undefined;
+ try parseMap(&mapitems, &mapdims, input, allocator);
+ defer allocator.free(mapitems);
+
+ var mapresult = try allocator.alloc(SeatState, mapitems.len);
+ defer allocator.free(mapresult);
+
+ var round: u32 = 0;
+ while (simulateStrategyTwo(mapitems, mapresult, mapdims) > 0) : (round += 1) {
+ std.debug.print("\rRound: {}", .{round});
+ std.mem.copy(SeatState, mapitems, mapresult);
+ }
+
+ var taken_count: u64 = 0;
+ for (mapresult) |state| {
+ taken_count += @boolToInt(state == SeatState.TAKEN);
+ }
+
+ std.debug.print("\nSeats Occupied: {}\n", .{taken_count});
+}
+
+pub const main = aoc.gen_main(part1, part2);
diff --git a/src/day11/part1 b/src/day11/part1
@@ -0,0 +1,58 @@
+--- Day 11: Seating System ---
+
+Your plane lands with plenty of time to spare. The final leg of your journey is a ferry that goes
+directly to the tropical island where you can finally start your vacation. As you reach the waiting
+area to board the ferry, you realize you're so early, nobody else has even arrived yet!
+
+By modeling the process people use to choose (or abandon) their seat in the waiting area, you're
+pretty sure you can predict the best place to sit. You make a quick map of the seat layout (your
+puzzle input).
+
+The seat layout fits neatly on a grid. Each position is either floor (.), an empty seat (L), or an
+occupied seat (#). For example, the initial seat layout might look like this:
+
+L.LL.LL.LL LLLLLLL.LL L.L.L..L.. LLLL.LL.LL L.LL.LL.LL L.LLLLL.LL ..L.L..... LLLLLLLLLL L.LLLLLL.L
+L.LLLLL.LL
+
+Now, you just need to model the people who will be arriving shortly. Fortunately, people are
+entirely predictable and always follow a simple set of rules. All decisions are based on the
+[1m[37mnumber of occupied seats[0m adjacent to a given seat (one of the eight positions
+immediately up, down, left, right, or diagonal from the seat). The following rules are applied to
+every seat simultaneously:
+
+- If a seat is [1m[37mempty[0m (L) and there are [1m[37mno[0m occupied seats adjacent to it,
+the seat becomes [1m[37moccupied[0m. - If a seat is [1m[37moccupied[0m (#) and [1m[37mfour
+or more[0m seats adjacent to it are also occupied, the seat becomes [1m[37mempty[0m. -
+Otherwise, the seat's state does not change.
+
+Floor (.) never changes; seats don't move, and nobody sits on the floor.
+
+After one round of these rules, every seat in the example layout becomes occupied:
+
+#.##.##.## #######.## #.#.#..#.. ####.##.## #.##.##.## #.#####.## ..#.#..... ########## #.######.#
+#.#####.##
+
+After a second round, the seats with four or more occupied adjacent seats become empty again:
+
+#.LL.L#.## #LLLLLL.L# L.L.L..L.. #LLL.LL.L# #.LL.LL.LL #.LLLL#.## ..L.L..... #LLLLLLLL# #.LLLLLL.L
+#.#LLLL.##
+
+This process continues for three more rounds:
+
+#.##.L#.## #L###LL.L# L.#.#..#.. #L##.##.L# #.##.LL.LL #.###L#.## ..#.#..... #L######L# #.LL###L.L
+#.#L###.##
+
+#.#L.L#.## #LLL#LL.L# L.L.L..#.. #LLL.##.L# #.LL.LL.LL #.LL#L#.## ..L.L..... #L#LLLL#L# #.LLLLLL.L
+#.#L#L#.##
+
+#.#L.L#.## #LLL#LL.L# L.#.L..#.. #L##.##.L# #.#L.LL.LL #.#L#L#.## ..L.L..... #L#L##L#L# #.LLLLLL.L
+#.#L#L#.##
+
+At this point, something interesting happens: the chaos stabilizes and further applications of these
+rules cause no seats to change state! Once people stop moving around, you count [1m[37m37[0m
+occupied seats.
+
+Simulate your seating area by applying the seating rules repeatedly until no seats change state.
+[1m[37mHow many seats end up occupied?[0m
+
+
diff --git a/src/day11/part2 b/src/day11/part2
@@ -0,0 +1,56 @@
+--- Part Two ---
+
+As soon as people start to arrive, you realize your mistake. People don't just care about adjacent
+seats - they care about [1m[37mthe first seat they can see[0m in each of those eight directions!
+
+Now, instead of considering just the eight immediately adjacent seats, consider the [1m[37mfirst
+seat[0m in each of those eight directions. For example, the empty seat below would see
+[1m[37meight[0m occupied seats:
+
+.......#. ...#..... .#....... ......... ..#L....# ....#.... ......... #........ ...#.....
+
+The leftmost empty seat below would only see [1m[37mone[0m empty seat, but cannot see any of the
+occupied ones:
+
+............. .L.L.#.#.#.#. .............
+
+The empty seat below would see [1m[37mno[0m occupied seats:
+
+.##.##. #.#.#.# ##...## ...L... ##...## #.#.#.# .##.##.
+
+Also, people seem to be more tolerant than you expected: it now takes [1m[37mfive or more[0m
+visible occupied seats for an occupied seat to become empty (rather than [1m[37mfour or more[0m
+from the previous rules). The other rules still apply: empty seats that see no occupied seats become
+occupied, seats matching no rule don't change, and floor never changes.
+
+Given the same starting layout as above, these new rules cause the seating area to shift around as
+follows:
+
+L.LL.LL.LL LLLLLLL.LL L.L.L..L.. LLLL.LL.LL L.LL.LL.LL L.LLLLL.LL ..L.L..... LLLLLLLLLL L.LLLLLL.L
+L.LLLLL.LL
+
+#.##.##.## #######.## #.#.#..#.. ####.##.## #.##.##.## #.#####.## ..#.#..... ########## #.######.#
+#.#####.##
+
+#.LL.LL.L# #LLLLLL.LL L.L.L..L.. LLLL.LL.LL L.LL.LL.LL L.LLLLL.LL ..L.L..... LLLLLLLLL# #.LLLLLL.L
+#.LLLLL.L#
+
+#.L#.##.L# #L#####.LL L.#.#..#.. ##L#.##.## #.##.#L.## #.#####.#L ..#.#..... LLL####LL# #.L#####.L
+#.L####.L#
+
+#.L#.L#.L# #LLLLLL.LL L.L.L..#.. ##LL.LL.L# L.LL.LL.L# #.LLLLL.LL ..L.L..... LLLLLLLLL# #.LLLLL#.L
+#.L#LL#.L#
+
+#.L#.L#.L# #LLLLLL.LL L.L.L..#.. ##L#.#L.L# L.L#.#L.L# #.L####.LL ..#.#..... LLL###LLL# #.LLLLL#.L
+#.L#LL#.L#
+
+#.L#.L#.L# #LLLLLL.LL L.L.L..#.. ##L#.#L.L# L.L#.LL.L# #.LLLL#.LL ..#.L..... LLL###LLL# #.LLLLL#.L
+#.L#LL#.L#
+
+Again, at this point, people stop shifting around and the seating area reaches equilibrium. Once
+this occurs, you count [1m[37m26[0m occupied seats.
+
+Given the new visibility method and the rule change for occupied seats becoming empty, once
+equilibrium is reached, [1m[37mhow many seats end up occupied?[0m
+
+