From: Brendan Hansen Date: Thu, 31 Dec 2020 04:52:12 +0000 (-0600) Subject: added a LOT of test cases (from AOC 2020) X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=590c0037d9be67222e4ed6fa92573f38b3a1fb2e;p=onyx.git added a LOT of test cases (from AOC 2020) --- diff --git a/.vimspector.json b/.vimspector.json index 57cf6c88..bf898e79 100644 --- a/.vimspector.json +++ b/.vimspector.json @@ -5,7 +5,7 @@ "configuration": { "type": "cppdbg", "request": "launch", - "program": "${workspaceFolder}/onyx", + "program": "${workspaceFolder}/bin/onyx", "args": ["--verbose", "tests/struct_robustness.onyx"], "stopAtEntry": true, "cwd": "~/dev/c/onyx", diff --git a/bin/onyx-js b/bin/onyx-js index 757f30f1..933c0661 100755 --- a/bin/onyx-js +++ b/bin/onyx-js @@ -3,12 +3,12 @@ const fs = require('fs'); const buf = fs.readFileSync(process.argv[2]); -let wasm_memory; +let wasm_instance; const ENV = { host: { print_str(ptr, len) { - const data = new Uint8Array(wasm_memory, ptr, len); + const data = new Uint8Array(wasm_instance.exports.memory.buffer, ptr, len); const str = new TextDecoder().decode(data); process.stdout.write(str); } @@ -17,9 +17,9 @@ const ENV = { WebAssembly.instantiate(new Uint8Array(buf), ENV) .then(res => { - const lib = res.instance.exports; - wasm_memory = lib.memory.buffer; + wasm_instance = res.instance; + const lib = res.instance.exports; lib._start(); }); diff --git a/bin/test b/bin/test index 8de7a619..826d5e3c 100755 --- a/bin/test +++ b/bin/test @@ -1,8 +1,9 @@ #!/bin/sh failed=0 -for test_file in ./tests/*.onyx ; do +for test_file in $(find tests/ -name '*.onyx'); do filename=$(basename -- "$test_file") + dirname="$(dirname -- "$test_file")" name="${filename%.*}" echo "⏲ Checking $name.onyx" @@ -19,9 +20,9 @@ for test_file in ./tests/*.onyx ; do continue fi - if ! diff ./tmpoutput "./tests/$name" >/dev/null; then + if ! diff ./tmpoutput "$dirname/$name" >/dev/null; then echo "❌ Test output did not match." - diff ./tmpoutput "./tests/$name" + diff ./tmpoutput "$dirname/$name" # failed=0 continue fi diff --git a/tests/aoc-2020/day1 b/tests/aoc-2020/day1 new file mode 100644 index 00000000..c92b8a50 --- /dev/null +++ b/tests/aoc-2020/day1 @@ -0,0 +1 @@ +Answer: 200637446 diff --git a/tests/aoc-2020/day1.onyx b/tests/aoc-2020/day1.onyx new file mode 100644 index 00000000..a228699e --- /dev/null +++ b/tests/aoc-2020/day1.onyx @@ -0,0 +1,28 @@ +#include_file "core/std/js" + +use package core + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day1.txt"; + contents_orig := contents; + defer cfree(contents_orig.data); + + nums: [..] u32; + array.init(^nums, 128); + defer array.free(^nums); + + while num := 1; num > 0 { + // This sets num to be 0 if there is no number + string.read_u32(^contents, ^num); + if num != 0 do array.push(^nums, num); + } + + for i: nums do for j: nums do for k: nums { + if j + i + k == 2020 { + printf("Answer: %i\n", i * j * k); + + // Break out of all of the loops + break break break; + } + } +} diff --git a/tests/aoc-2020/day10 b/tests/aoc-2020/day10 new file mode 100644 index 00000000..61a9221e --- /dev/null +++ b/tests/aoc-2020/day10 @@ -0,0 +1,2 @@ +Diff prod: 1820 +Arrangements: 3454189699072 diff --git a/tests/aoc-2020/day10.onyx b/tests/aoc-2020/day10.onyx new file mode 100644 index 00000000..f1d9b5b4 --- /dev/null +++ b/tests/aoc-2020/day10.onyx @@ -0,0 +1,53 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +count_ending_paths :: proc (nums: [..] u32) -> u64 { + tally: [..] u64; + array.init(^tally, nums.count); + defer array.free(^tally); + + for ^t: tally do *t = 0; + tally[nums.count - 1] = 1; + + while i := cast(i32) (nums.count - 2); i >= 0 { + for diff: 1 .. 4 { + if i + diff >= nums.count do continue; + + if nums[i + diff] - nums[i] <= 3 do tally[i] += tally[i + diff]; + } + + i -= 1; + } + + return tally[0]; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day10.txt"; + + file := reader.make(contents); + + nums: [..] u32; + array.init(^nums); + defer array.free(^nums); + + while !reader.empty(^file) { + array.push(^nums, reader.read_u32(^file)); + reader.advance_line(^file); + } + + // Slight hack, but having 0 in the array makes both parts easier + array.push(^nums, 0); + + array.sort(^nums, cmp_asc); + + diffs: [3] u32; + for ^d: diffs do *d = 0; + for i: 1 .. nums.count do diffs[nums[i] - nums[i - 1] - 1] += 1; + diffs[2] += 1; + + printf("Diff prod: %i\n", diffs[0] * diffs[2]); + printf("Arrangements: %l\n", count_ending_paths(nums)); +} diff --git a/tests/aoc-2020/day11 b/tests/aoc-2020/day11 new file mode 100644 index 00000000..c0500cf2 --- /dev/null +++ b/tests/aoc-2020/day11 @@ -0,0 +1 @@ +Occupied: 2027 diff --git a/tests/aoc-2020/day11.onyx b/tests/aoc-2020/day11.onyx new file mode 100644 index 00000000..0eed2fe7 --- /dev/null +++ b/tests/aoc-2020/day11.onyx @@ -0,0 +1,101 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +GameOfSeats :: struct { + width : u32; + height : u32; + seats : [..] SeatState; + temp : [..] SeatState; +} + +SeatState :: enum (u8) { OOB; Floor; Empty; Occupied; } + +gos_get_seat :: proc (use gos: ^GameOfSeats, x: i32, y: i32) -> SeatState { + if x < 0 || y < 0 || x >= width || y >= height do return SeatState.OOB; + return seats[x + y * width]; +} + +gos_neighbors :: proc (use gos: ^GameOfSeats, x: i32, y: i32, state := SeatState.Occupied) -> u32 { + count := 0; + + for dy: -1 .. 2 { + for dx: -1 .. 2 { + if dy == 0 && dx == 0 do continue; + + t := 1; + seat := gos_get_seat(gos, x + dx, y + dy); + while seat == SeatState.Floor { + t += 1; + seat = gos_get_seat(gos, x + dx * t, y + dy * t); + } + + if seat == state do count += 1; + } + } + + return count; +} + +gos_iter :: proc (use gos: ^GameOfSeats) -> bool { + for i: 0 .. seats.count do temp[i] = seats[i]; + + changed := false; + for y: 0 .. height { + for x: 0 .. width { + occ_neighbors := gos_neighbors(gos, x, y); + + switch gos_get_seat(gos, x, y) { + case SeatState.Empty do if occ_neighbors == 0 { + temp[x + y * width] = SeatState.Occupied; + changed = true; + } + + case SeatState.Occupied do if occ_neighbors >= 5 { + temp[x + y * width] = SeatState.Empty; + changed = true; + } + } + } + } + + for i: 0 .. seats.count do seats[i] = temp[i]; + + return changed; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day11.txt"; + + file := reader.make(contents); + + gos : GameOfSeats; + array.init(^gos.seats, 32); + defer array.free(^gos.seats); + + gos.height = 0; + + while !reader.empty(^file) { + line := reader.read_line(^file); + for ch: line do switch ch { + case #char "." do array.push(^gos.seats, SeatState.Floor); + case #char "L" do array.push(^gos.seats, SeatState.Empty); + case #char "#" do array.push(^gos.seats, SeatState.Occupied); + } + + gos.width = line.count; + gos.height += 1; + } + + array.init(^gos.temp, gos.seats.count); + defer array.free(^gos.temp); + + while gos_iter(^gos) --- + + occupied := 0; + for s: gos.seats do if s == SeatState.Occupied do occupied += 1; + + printf("Occupied: %i\n", occupied); +} + diff --git a/tests/aoc-2020/day12 b/tests/aoc-2020/day12 new file mode 100644 index 00000000..c237e666 --- /dev/null +++ b/tests/aoc-2020/day12 @@ -0,0 +1 @@ +Ship distance: 20592 diff --git a/tests/aoc-2020/day12.onyx b/tests/aoc-2020/day12.onyx new file mode 100644 index 00000000..012a3492 --- /dev/null +++ b/tests/aoc-2020/day12.onyx @@ -0,0 +1,71 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +Ship :: struct { + x : i32 = 0; + y : i32 = 0; + + fx : i32 = 1; + fy : i32 = 0; +} + +rotate_left :: proc (ship: ^Ship) { + ofx := ship.fx; + ofy := ship.fy; + + ship.fx = ofy; + ship.fy = -ofx; +} + +rotate_right :: proc (ship: ^Ship) { + ofx := ship.fx; + ofy := ship.fy; + + ship.fx = -ofy; + ship.fy = ofx; +} + +turn_around :: proc (ship: ^Ship) { + ship.fx = -ship.fx; + ship.fy = -ship.fy; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day12.txt"; + + file := reader.make(contents); + + ship := Ship.{ fx = 10, fy = -1 }; + while !reader.empty(^file) { + dir := reader.read_byte(^file); + val := reader.read_u32(^file); + reader.advance_line(^file); + + switch dir { + case #char "N" do ship.fy -= val; + case #char "E" do ship.fx += val; + case #char "S" do ship.fy += val; + case #char "W" do ship.fx -= val; + case #char "F" { + ship.x += ship.fx * val; + ship.y += ship.fy * val; + } + + case #char "L" do switch val { + case 90 do rotate_left(^ship); + case 180 do turn_around(^ship); + case 270 do rotate_right(^ship); + } + + case #char "R" do switch val { + case 90 do rotate_right(^ship); + case 180 do turn_around(^ship); + case 270 do rotate_left(^ship); + } + } + } + + printf("Ship distance: %i\n", math.abs(ship.x) + math.abs(ship.y)); +} diff --git a/tests/aoc-2020/day13 b/tests/aoc-2020/day13 new file mode 100644 index 00000000..c01ccc83 --- /dev/null +++ b/tests/aoc-2020/day13 @@ -0,0 +1 @@ +Result: 800177252346225 diff --git a/tests/aoc-2020/day13.onyx b/tests/aoc-2020/day13.onyx new file mode 100644 index 00000000..4cba8910 --- /dev/null +++ b/tests/aoc-2020/day13.onyx @@ -0,0 +1,94 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +inv_mod :: proc (a_: i64, m_: i64) -> i64 { + if m_ <= 1 do return 0; + + a := a_; m := m_; + x: i64 = 0; y: i64 = 1; + + while a > 1 { + quot := a / m; + temp1 := m; + m = a % m; + a = temp1; + temp2 := x; + x = y - quot * x; + y = temp2; + } + + if y < 0 do y += m_; + return y; +} + +chinese_remainder_theorem :: proc (mods: [..] i64, rems: [..] i64) -> i64 { + N: i64 = 1; + for n: mods do N *= n; + + res: i64 = 0; + for i: 0 .. mods.count { + n := N / mods[i]; + res += rems[i] * inv_mod(n, mods[i]) * n; + } + + return res % N; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day13.txt"; + + file := reader.make(contents); + + est := reader.read_u32(^file); + reader.advance_line(^file); + + buses: [..] i64; + array.init(^buses); + defer array.free(^buses); + + rems: [..] i64; + array.init(^rems); + defer array.free(^rems); + + offset: i64 = 0; + while !reader.empty(^file) { + if *file.data == #char "x" { + reader.skip_bytes(^file, 2); + } else { + bus := reader.read_u64(^file); + array.push(^buses, ~~bus); + array.push(^rems, bus - offset); + + reader.skip_bytes(^file, 1); + } + + offset += 1; + } + + // Part 1 + // min := array.fold(^buses, 0xffffffff, math.min); + + // take_bus := 0; + // depart := 0; + + // for i: 0 .. min { + // for bus: buses { + // if (i + est) % bus == 0 { + // take_bus = bus; + // depart = i + est; + // break break; + // } + // } + // } + + // result := take_bus * (depart - est); + // printf("Bus: %i\n", take_bus); + // printf("Depart at: %i\n", depart); + // printf("Result: %i\n", result); + + // Part 2 + result := chinese_remainder_theorem(buses, rems); + printf("Result: %l\n", result); +} diff --git a/tests/aoc-2020/day14 b/tests/aoc-2020/day14 new file mode 100644 index 00000000..0e773d88 --- /dev/null +++ b/tests/aoc-2020/day14 @@ -0,0 +1 @@ +Sum: 4254673508445 diff --git a/tests/aoc-2020/day14.onyx b/tests/aoc-2020/day14.onyx new file mode 100644 index 00000000..e5e583a2 --- /dev/null +++ b/tests/aoc-2020/day14.onyx @@ -0,0 +1,135 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +MASK_SIZE :: 36 +Bitmask :: #type [MASK_SIZE] u8; + +// Part 1 +bitmask_p1 :: proc (mask: Bitmask, val: u64) -> u64 { + res: u64 = 0; + bit: u64 = 1; + for m: mask { + switch m { + case 1 do res |= bit; + case 2 do res |= (val & bit); + } + + bit <<= 1; + } + + return res; +} + +// Part 2 +BitmaskIter :: struct { + floating_indicies : [..] u8; + val : u64; + done : bool; +} + +bitmask_iter_make :: proc (mask: Bitmask, val: u64) -> BitmaskIter { + bmi : BitmaskIter; + bmi.done = false; + + array.init(^bmi.floating_indicies, 8); + + v := val; + for i: 0 .. MASK_SIZE { + if mask[i] == 1 { + v |= 1 << cast(u64) i; + } + + if mask[i] == 2 { + v &= ~(1 << cast(u64) i); + + array.push(^bmi.floating_indicies, cast(u8) i); + } + } + + bmi.val = v; + return bmi; +} + +bitmask_iter_free :: proc (use bmi: ^BitmaskIter) { + array.free(^floating_indicies); +} + +bitmask_iter_done :: proc (use bmi: ^BitmaskIter) -> bool do return done; + +bitmask_iter_next :: proc (use bmi: ^BitmaskIter) -> u64 { + { + for ind: floating_indicies { + is_set := (val & (1 << cast(u64) ind)) != 0; + + val ^= 1 << cast(u64) ind; + + if !is_set do break break; + } + + done = true; + } + + return val; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day14.txt"; + + file := reader.make(contents); + + mem : map.Map(u64, u64); + map.init(^mem, 257); + defer map.free(^mem); + + mask : Bitmask; + for ^m: mask do *m = 2; + + while !reader.empty(^file) { + word := reader.read_word(^file); + if string.equal(word, "mask") { + reader.skip_bytes(^file, 3); + + i := 35; + while ch := reader.read_byte(^file); ch != #char "\n" { + switch ch { + case #char "0" do mask[i] = 0; + case #char "1" do mask[i] = 1; + case #char "X" do mask[i] = 2; + } + + i -= 1; + + ch = reader.read_byte(^file); + } + } + elseif string.equal(word, "mem") { + reader.skip_bytes(^file, 1); + + addr := reader.read_u64(^file); + reader.skip_bytes(^file, 4); + + val := reader.read_u64(^file); + + // Part 1 + // map.put(^mem, addr, bitmask_p1(mask, val)); + + // Part 2 + bmi := bitmask_iter_make(mask, addr); + while !bitmask_iter_done(^bmi) { + real_addr := bitmask_iter_next(^bmi); + map.put(^mem, real_addr, val); + } + + bitmask_iter_free(^bmi); + + reader.advance_line(^file); + } + } + + s: u64 = 0; + for e: mem.entries do s += e.value; + + printf("Sum: %l\n", s); +} diff --git a/tests/aoc-2020/day15 b/tests/aoc-2020/day15 new file mode 100644 index 00000000..d8a91376 --- /dev/null +++ b/tests/aoc-2020/day15 @@ -0,0 +1 @@ +2020th: 492 diff --git a/tests/aoc-2020/day15.onyx b/tests/aoc-2020/day15.onyx new file mode 100644 index 00000000..aeb5332f --- /dev/null +++ b/tests/aoc-2020/day15.onyx @@ -0,0 +1,45 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +initial_numbers := u32.[ 1, 20, 8, 12, 0, 14 ]; + +spoken_times :: struct { + recent : u32 = 0; + previous : u32 = 0; +} + +main :: proc (args: [] cstr) { + // The current implementation of Map is rather slow at a large scale. + // Any changes to the implementation of Map should be tested on this + // file to validate if they 1) work and 2) are faster. + nums : map.Map(u32, spoken_times); + map.init(^nums, 32767); + defer map.free(^nums); + + turn := 1; + last_num := 0; + + for n: initial_numbers { + map.put(^nums, n, spoken_times.{ recent = turn }); + turn += 1; + last_num = n; + } + + while turn != 2021 { + st := map.get(^nums, last_num, spoken_times.{}); + + if st.previous == 0 do last_num = 0; + else do last_num = st.recent - st.previous; + + st = map.get(^nums, last_num, spoken_times.{}); + st.previous = st.recent; + st.recent = turn; + map.put(^nums, last_num, st); + + turn += 1; + } + + printf("2020th: %i\n", last_num); +} diff --git a/tests/aoc-2020/day16 b/tests/aoc-2020/day16 new file mode 100644 index 00000000..c01006f4 --- /dev/null +++ b/tests/aoc-2020/day16 @@ -0,0 +1,2 @@ +Scanning error: 27898 +Departure multiply: 2766491048287 diff --git a/tests/aoc-2020/day16.onyx b/tests/aoc-2020/day16.onyx new file mode 100644 index 00000000..d5a8e9f2 --- /dev/null +++ b/tests/aoc-2020/day16.onyx @@ -0,0 +1,142 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +Field :: struct { + name : str = ""; + + column : i32 = -1; + + lower0 : u32 = 0; + upper0 : u32 = 0; + lower1 : u32 = 0; + upper1 : u32 = 0; +} + +field_valid :: proc (use field: ^Field, n: u32) -> bool { + return (lower0 <= n && n <= upper0) || (lower1 <= n && n <= upper1); +} + +total_scanning_error := 0; + +read_ticket_and_validate :: proc (file: ^reader.StringReader, fields: [..] Field, ticket_store: ^u32) -> bool { + retval := true; + + for i: 0 .. fields.count { + n := reader.read_u32(file); + ticket_store[i] = n; + + if file.data[0] == #char "," do reader.skip_bytes(file, 1); + + valid_count := 0; + for ^field: fields { + if field_valid(field, n) do valid_count += 1; + } + + if valid_count == 0 { + total_scanning_error += n; + retval = false; + } + } + + reader.advance_line(file); + return retval; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day16.txt"; + + file := reader.make(contents); + + fields : [..] Field; + array.init(^fields, 20); + defer array.free(^fields); + + // Read until the first empty line + while *file.data != #char "\n" { + field := Field.{}; + field.name = reader.read_until(^file, 0, #char ":"); + + reader.skip_bytes(^file, 2); + field.lower0 = reader.read_u32(^file); + + reader.skip_bytes(^file, 1); + field.upper0 = reader.read_u32(^file); + + reader.skip_bytes(^file, 4); + field.lower1 = reader.read_u32(^file); + + reader.skip_bytes(^file, 1); + field.upper1 = reader.read_u32(^file); + + reader.advance_line(^file); + + array.push(^fields, field); + } + + for i: 0 .. 2 do reader.advance_line(^file); + + my_ticket : [..] u32; + array.init(^my_ticket, fields.count); + defer array.free(^my_ticket); + read_ticket_and_validate(^file, fields, my_ticket.data); + + for i: 0 .. 2 do reader.advance_line(^file); + + ticket_data : [..] u32; + array.init(^ticket_data, 1024); + defer array.free(^ticket_data); + + while !reader.empty(^file) { + array.ensure_capacity(^ticket_data, ticket_data.count + fields.count); + if read_ticket_and_validate(^file, fields, ^ticket_data[ticket_data.count]) { + ticket_data.count += fields.count; + } + } + + printf("Scanning error: %i\n", total_scanning_error); + + cols_to_assign : [..] u32; + array.init(^cols_to_assign, fields.count); + defer array.free(^cols_to_assign); + + for i: 0 .. fields.count do array.push(^cols_to_assign, i); + + while cols_to_assign.count > 0 { + for col: cols_to_assign { + work_count := 0; + recent_work: ^Field = null; + + for ^field: fields { + if field.column != -1 do continue; + works := true; + + for row: 0 .. (ticket_data.count / fields.count) { + if !field_valid(field, ticket_data[col + fields.count * row]) { + works = false; + break; + } + } + + if works { + work_count += 1; + recent_work = field; + } + } + + if work_count == 1 { + recent_work.column = col; + array.remove(^cols_to_assign, col); + break; + } + } + } + + prod: u64 = 1; + for ^field: fields { + if string.starts_with(field.name, "departure") do prod *= ~~my_ticket[field.column]; + } + + printf("Departure multiply: %l\n", prod); +} diff --git a/tests/aoc-2020/day17 b/tests/aoc-2020/day17 new file mode 100644 index 00000000..f36a5caf --- /dev/null +++ b/tests/aoc-2020/day17 @@ -0,0 +1 @@ +Active count: 2192 diff --git a/tests/aoc-2020/day17.onyx b/tests/aoc-2020/day17.onyx new file mode 100644 index 00000000..867ab572 --- /dev/null +++ b/tests/aoc-2020/day17.onyx @@ -0,0 +1,109 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +CubePos :: struct { + x : i32; + y : i32; + z : i32; + w : i32; +} + +CubeState :: struct { + alive : bool = false; + next : bool = false; +} + +proc (c: CubePos) -> u32 #add_overload map.hash_function { + return 17 * c.x + 13 * c.y + 11 * c.z + 19 * c.w; +} + +proc (a: CubePos, b: CubePos) -> bool #add_overload map.cmp_function { + return (a.x == b.x) + && (a.y == b.y) + && (a.z == b.z) + && (a.w == b.w); +} + +get_neighbor_count :: proc (cubes: ^map.Map(CubePos, CubeState), pos: CubePos) -> u32 { + count := 0; + + for x: -1 .. 2 do for y: -1 .. 2 do for z: -1 .. 2 do for w: -1 .. 2 { + if x == 0 && y == 0 && z == 0 && w == 0 do continue; + key := CubePos.{ pos.x + x, pos.y + y, pos.z + z, pos.w + w }; + state := map.get(cubes, key, CubeState.{}); + if state.alive do count += 1; + } + + return count; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day17.txt"; + + file := reader.make(contents); + + cubes : map.Map(CubePos, CubeState); + map.init(^cubes, 1021); + defer map.free(^cubes); + + z := 0; + while !reader.empty(^file) { + line := reader.read_line(^file); + + x := 0; + for ch: line { + if ch == #char "#" do map.put(^cubes, CubePos.{ x, 0, z, 0 }, CubeState.{ alive = true }); + + x += 1; + } + + z += 1; + } + + cubes_to_consider : [..] CubePos; + array.init(^cubes_to_consider); + defer array.free(^cubes_to_consider); + + for i: 0 .. 6 { + for ^cube_entry: cubes.entries { + if cube_entry.value.alive { + for x: -1 .. 2 do for y: -1 .. 2 do for z: -1 .. 2 do for w: -1 .. 2 { + array.push(^cubes_to_consider, CubePos.{ + cube_entry.key.x + x, + cube_entry.key.y + y, + cube_entry.key.z + z, + cube_entry.key.w + w + }); + } + } + } + + for ^cube: cubes_to_consider { + state := map.get(^cubes, *cube, CubeState.{}); + ncount := get_neighbor_count(^cubes, *cube); + + if state.alive { + state.next = ncount == 2 || ncount == 3; + } else { + state.next = ncount == 3; + } + + map.put(^cubes, *cube, state); + } + + for ^cube: cubes_to_consider { + state := map.get(^cubes, *cube, CubeState.{}); + state.alive = state.next; + map.put(^cubes, *cube, state); + } + + array.clear(^cubes_to_consider); + } + + active_count := 0; + for ^cube_entry: cubes.entries do if cube_entry.value.alive do active_count += 1; + + printf("Active count: %i\n", active_count); +} diff --git a/tests/aoc-2020/day18 b/tests/aoc-2020/day18 new file mode 100644 index 00000000..b9cf36e9 --- /dev/null +++ b/tests/aoc-2020/day18 @@ -0,0 +1 @@ +Total: 283729053022731 diff --git a/tests/aoc-2020/day18.onyx b/tests/aoc-2020/day18.onyx new file mode 100644 index 00000000..e9d9d149 --- /dev/null +++ b/tests/aoc-2020/day18.onyx @@ -0,0 +1,77 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +parse_factor :: proc (file: ^reader.StringReader) -> u64 { + reader.skip_whitespace(file); + + switch *file.data { + // Now may be a good time to add a range based case statement... + case #char "0" .. #char "9" { + return reader.read_u64(file); + } + + case #char "(" { + reader.skip_bytes(file, 1); + + value := parse_expression_mul(file); + + reader.skip_whitespace(file); + reader.skip_bytes(file, 1); + + return value; + } + } + + return 0; +} + +parse_expression_add :: proc (file: ^reader.StringReader) -> u64 { + reader.skip_whitespace(file); + + left := parse_factor(file); + + reader.skip_whitespace(file); + while *file.data == #char "+" { + op := reader.read_byte(file); + right := parse_factor(file); + + left += right; + + reader.skip_whitespace(file); + } + + return left; +} + +parse_expression_mul :: proc (file: ^reader.StringReader) -> u64 { + reader.skip_whitespace(file); + + left := parse_expression_add(file); + + reader.skip_whitespace(file); + while *file.data == #char "*" { + op := reader.read_byte(file); + right := parse_expression_add(file); + + left *= right; + + reader.skip_whitespace(file); + } + + return left; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day18.txt"; + + file := reader.make(contents); + + total: u64 = 0; + while !reader.empty(^file) { + total += parse_expression_mul(^file); + } + + printf("Total: %l\n", total); +} diff --git a/tests/aoc-2020/day19 b/tests/aoc-2020/day19 new file mode 100644 index 00000000..4c73369b --- /dev/null +++ b/tests/aoc-2020/day19 @@ -0,0 +1 @@ +Valid count: 369 diff --git a/tests/aoc-2020/day19.onyx b/tests/aoc-2020/day19.onyx new file mode 100644 index 00000000..76ebe0f8 --- /dev/null +++ b/tests/aoc-2020/day19.onyx @@ -0,0 +1,175 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +// nt -> t +Term :: struct { + nt : u32; + + t : u8; // character +} + +// nt0 -> nt1 +Unit :: struct { + nt0 : u32; + + nt1 : u32; +} + +// nt0 -> nt1 nt2 +Prod :: struct { + nt0 : u32; + + nt1 : u32; + nt2 : u32; +} + +Grammar :: struct { + terminate_rules : [..] Term; + unit_rules : [..] Unit; + production_rules : [..] Prod; + + max_terminal : u32; +} + +grammar_init :: proc (use g: ^Grammar) { + array.init(^terminate_rules); + array.init(^unit_rules); + array.init(^production_rules); + + max_terminal = 0; +} + +grammar_free :: proc (use g: ^Grammar) { + array.free(^terminate_rules); + array.free(^unit_rules); + array.free(^production_rules); +} + +grammar_prepare :: proc (use g: ^Grammar) { + // Not full-proof, but good enough for AOC. + for ^solo: unit_rules { + for ^prod: production_rules { + if prod.nt0 == solo.nt1 { + array.push(^production_rules, Prod.{ solo.nt0, prod.nt1, prod.nt2 }); + } + } + + for ^unit: terminate_rules { + if unit.nt == solo.nt1 { + array.push(^terminate_rules, Term.{ solo.nt0, unit.t }); + } + } + } + + array.sort(^terminate_rules, proc (a: Term, b: Term) -> i32 { + return (cast(i32) a.nt) - (cast(i32) b.nt); + }); + + array.sort(^production_rules, proc (a: Prod, b: Prod) -> i32 { + return (cast(i32) a.nt0) - (cast(i32) b.nt0); + }); + + max_terminal = math.max( + production_rules[production_rules.count - 1].nt0, + terminate_rules[terminate_rules.count - 1].nt) + 1; +} + +cyk_algorithm :: proc (use grammar: ^Grammar, input: str) -> bool { + dim_0 := input.count * max_terminal; + dim_1 := max_terminal; + dim_2 := 1; + + mem_size := sizeof bool * input.count * input.count * max_terminal; + T := cast(^bool) calloc(mem_size); + defer cfree(T); + memory.set(T, mem_size, ~~false); + + for s: 0 .. input.count { + for ^term: terminate_rules { + if term.t == input[s] { + T[0 * dim_0 + s * dim_1 + term.nt * dim_2] = true; + } + } + } + + for l: 1 .. input.count { + for s: 0 .. input.count - l { + for p: 1 .. l + 1 { + for ^prod: production_rules { + if T[(p - 1) * dim_0 + s * dim_1 + prod.nt1 * dim_2] + && T[(l - p) * dim_0 + (s + p) * dim_1 + prod.nt2 * dim_2] { + T[l * dim_0 + s * dim_1 + prod.nt0 * dim_2] = true; + } + } + } + } + } + + return T[(input.count - 1) * dim_0]; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day19.txt"; + + file := reader.make(contents); + + grammar : Grammar; + grammar_init(^grammar); + defer grammar_free(^grammar); + + while *file.data != #char "\n" { + nt0 := reader.read_u32(^file); + + reader.skip_bytes(^file, 2); // ': ' + + if *file.data == #char "\"" { + reader.skip_bytes(^file, 1); // '"' + t := reader.read_byte(^file); + + array.push(^grammar.terminate_rules, Term.{ nt0, t }); + + } else { + while true { + nt1 := reader.read_u32(^file); + + if *file.data == #char "\n" { + array.push(^grammar.unit_rules, Unit.{ nt0, nt1 }); + break; + + } else { + reader.skip_bytes(^file, 1); // ' ' + + if next_ch := *file.data; next_ch >= #char "0" && next_ch <= #char "9" { + nt2 := reader.read_u32(^file); + array.push(^grammar.production_rules, Prod.{ nt0, nt1, nt2 }); + + if *file.data == #char " " do reader.skip_bytes(^file, 1); + } else { + array.push(^grammar.unit_rules, Unit.{ nt0, nt1 }); + } + + if *file.data == #char "|" { + reader.skip_bytes(^file, 1); // ' |' + } else { + break; + } + } + } + } + + reader.advance_line(^file); + } + + grammar_prepare(^grammar); + + valid_count := 0; + reader.advance_line(^file); + while !reader.empty(^file) { + line := reader.read_line(^file); + if cyk_algorithm(^grammar, line) do valid_count += 1; + } + + printf("Valid count: %i\n", valid_count); +} diff --git a/tests/aoc-2020/day2 b/tests/aoc-2020/day2 new file mode 100644 index 00000000..e1218e7f --- /dev/null +++ b/tests/aoc-2020/day2 @@ -0,0 +1 @@ +Number valid: 482 diff --git a/tests/aoc-2020/day2.onyx b/tests/aoc-2020/day2.onyx new file mode 100644 index 00000000..64f54bc1 --- /dev/null +++ b/tests/aoc-2020/day2.onyx @@ -0,0 +1,39 @@ +package main + +#include_file "core/std/js" + +use package core + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day2.txt"; + + valid := 0; + lo : u32; + hi : u32; + ch : u8; + pw : str = ""; + + while true { + string.read_u32(^contents, ^lo); + if lo == 0 do break; + string.discard_chars(^contents); + string.read_u32(^contents, ^hi); + string.discard_chars(^contents); + string.read_char(^contents, ^ch); + string.discard_chars(^contents, 2); + string.read_line(^contents, ^pw); + + // Part 1 + // count := 0; + // for c: pw do if c == ch do count += 1; + // if count >= lo && count <= hi do valid += 1; + + // Part 2 + count := 0; + if pw[lo - 1] == ch do count += 1; + if pw[hi - 1] == ch do count += 1; + if count == 1 do valid += 1; + } + + printf("Number valid: %i\n", valid); +} diff --git a/tests/aoc-2020/day20 b/tests/aoc-2020/day20 new file mode 100644 index 00000000..12f19fb2 --- /dev/null +++ b/tests/aoc-2020/day20 @@ -0,0 +1,2 @@ +Corner product: 104831106565027 +Safe count: 2093 diff --git a/tests/aoc-2020/day20.onyx b/tests/aoc-2020/day20.onyx new file mode 100644 index 00000000..118cc373 --- /dev/null +++ b/tests/aoc-2020/day20.onyx @@ -0,0 +1,380 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +TILE_DATA_WIDTH :: 10 +TILE_DATA_HEIGHT :: 10 + +// Thought about making this dynamic and really fancy... +// and then I remembered this is advent of code so that +// is not necessary. +TileData :: #type [TILE_DATA_WIDTH * TILE_DATA_HEIGHT] bool; + +Tile :: struct { + id : u32; + orientation : TO; + data : [] bool; + edges : [] u32; + + pos_x : u32 = 0; + pos_y : u32 = 0; + + edges_match : Sides = Sides.{}; +} + +Sides :: struct { + top : SideRelation = SideRelation.{}; + right : SideRelation = SideRelation.{}; + bottom : SideRelation = SideRelation.{}; + left : SideRelation = SideRelation.{}; +} + +SideRelation :: struct { + tile : u32 = 0; + ori : TO = TO.N; +} + +TO :: enum (u8) { + N; R90; R180; R270; + F; FR90; FR180; FR270; +} + +// TOT[t0][t1] = t1 * t0; t1 after t0 +tile_orientation_table := (#type [8] TO).[ + // N R90 R180 R270 F FR90 FR180 FR270 + /* N */ TO.[ TO.N, TO.R90, TO.R180, TO.R270, TO.F, TO.FR90, TO.FR180, TO.FR270 ], + /* R90 */ TO.[ TO.R90, TO.R180, TO.R270, TO.N, TO.FR270, TO.F, TO.FR90, TO.FR180,], + /* R180 */ TO.[ TO.R180, TO.R270, TO.N, TO.R90, TO.FR180, TO.FR270, TO.F, TO.FR90, ], + /* R270 */ TO.[ TO.R270, TO.N, TO.R90, TO.R180, TO.FR90, TO.FR180, TO.FR270, TO.F, ], + /* F */ TO.[ TO.F, TO.FR90, TO.FR180, TO.FR270, TO.N, TO.R90, TO.R180, TO.R270, ], + /* FR90 */ TO.[ TO.FR90, TO.FR180, TO.FR270, TO.F, TO.R270, TO.N, TO.R90, TO.R180, ], + /* FR180 */ TO.[ TO.FR180, TO.FR270, TO.F, TO.FR90, TO.R180, TO.R270, TO.N, TO.R90 ], + /* FR270 */ TO.[ TO.FR270, TO.F, TO.FR90, TO.FR180, TO.R90, TO.R180, TO.R270, TO.N ], +]; + +reverse_binary :: proc (n_: u32, digits := TILE_DATA_WIDTH) -> u32 { + res := 0; + n := n_; + for _: 0 .. digits { + res <<= 1; + res |= (n & 1); + n >>= 1; + } + + return res; +} + +build_edges :: proc (tile: [] bool, a := context.allocator) -> [] u32 { + edges : [..] u32; + #context_scope { + context.allocator = a; + array.init(^edges, 8); + } + + for y: u32.[0, 9] { + edge := 0; + for x: 0 .. 10 { + edge <<= 1; + if tile[x + y * TILE_DATA_WIDTH] do edge |= 1; + } + + array.push(^edges, edge); + } + + for x: u32.[0, 9] { + edge := 0; + for y: 0 .. 10 { + edge <<= 1; + if tile[x + y * TILE_DATA_WIDTH] do edge |= 1; + } + + array.push(^edges, edge); + } + + for i: 0 .. 4 do array.push(^edges, reverse_binary(edges[i])); + + return edges.data[0 .. 8]; +} + +// These were not fun to think about by hand... But they make the +// program ridiculously faster so I'm okay with it. +side_relations := (#type [4] TO).[ + TO.[ TO.F, TO.N, TO.R90, TO.FR90, ], + TO.[ TO.N, TO.F, TO.FR90, TO.R90, ], + TO.[ TO.R270, TO.FR90, TO.FR180, TO.N, ], + TO.[ TO.FR90, TO.R270, TO.N, TO.FR180, ], + TO.[ TO.R180, TO.FR180, TO.FR270, TO.R270, ], + TO.[ TO.FR180, TO.R180, TO.R270, TO.FR270, ], + TO.[ TO.FR270, TO.R90, TO.R180, TO.F, ], + TO.[ TO.R90, TO.FR270, TO.F, TO.R180, ], +]; + +has_matching_edges :: proc (t1: ^Tile, t2: ^Tile) -> bool { + match := false; + + for e_idx: 0 .. t1.edges.count / 2 do for e2_idx: 0 .. t2.edges.count { + if t1.edges[e_idx] == t2.edges[e2_idx] { + match = true; + + switch e_idx { + case 0 do t1.edges_match.top = SideRelation.{ t2.id, side_relations[e2_idx][0] }; + case 1 do t1.edges_match.bottom = SideRelation.{ t2.id, side_relations[e2_idx][1] }; + case 2 do t1.edges_match.left = SideRelation.{ t2.id, side_relations[e2_idx][2] }; + case 3 do t1.edges_match.right = SideRelation.{ t2.id, side_relations[e2_idx][3] }; + } + } + } + + return match; +} + +// This assumes the `t` was in NORMAL orientation to begin with. +apply_orientation :: proc (t: ^Tile, ori: TO) { + new_sides := t.edges_match; + + switch ori { + case TO.R90 { + new_sides.top = t.edges_match.left; + new_sides.right = t.edges_match.top; + new_sides.bottom = t.edges_match.right; + new_sides.left = t.edges_match.bottom; + } + case TO.R180 { + new_sides.top = t.edges_match.bottom; + new_sides.right = t.edges_match.left; + new_sides.bottom = t.edges_match.top; + new_sides.left = t.edges_match.right; + } + case TO.R270 { + new_sides.top = t.edges_match.right; + new_sides.right = t.edges_match.bottom; + new_sides.bottom = t.edges_match.left; + new_sides.left = t.edges_match.top; + } + case TO.F { + new_sides.top = t.edges_match.bottom; + new_sides.bottom = t.edges_match.top; + } + case TO.FR90 { + new_sides.top = t.edges_match.left; + new_sides.right = t.edges_match.bottom; + new_sides.bottom = t.edges_match.right; + new_sides.left = t.edges_match.top; + } + case TO.FR180 { + new_sides.right = t.edges_match.left; + new_sides.left = t.edges_match.right; + } + case TO.FR270 { + new_sides.top = t.edges_match.right; + new_sides.right = t.edges_match.top; + new_sides.bottom = t.edges_match.left; + new_sides.left = t.edges_match.bottom; + } + } + + if new_sides.top.tile != 0 do new_sides.top.ori = tile_orientation_table[cast(u32) new_sides.top.ori][cast(u32) ori]; + if new_sides.bottom.tile != 0 do new_sides.bottom.ori = tile_orientation_table[cast(u32) new_sides.bottom.ori][cast(u32) ori]; + if new_sides.left.tile != 0 do new_sides.left.ori = tile_orientation_table[cast(u32) new_sides.left.ori][cast(u32) ori]; + if new_sides.right.tile != 0 do new_sides.right.ori = tile_orientation_table[cast(u32) new_sides.right.ori][cast(u32) ori]; + + t.edges_match = new_sides; + t.orientation = ori; +} + +index_square_with_orientation :: proc (data: ^$T, ori: TO, size: i32, x: i32, y: i32) -> ^T { + switch ori { + case TO.N do return ^data[x + y * size]; + case TO.R90 do return ^data[y + (size - 1 - x) * size]; + case TO.R180 do return ^data[(size - 1 - x) + (size - 1 - y) * size]; + case TO.R270 do return ^data[(size - 1 - y) + x * size]; + case TO.F do return ^data[x + (size - 1 - y) * size]; + case TO.FR90 do return ^data[y + x * size]; + case TO.FR180 do return ^data[(size - 1 - x) + y * size]; + case TO.FR270 do return ^data[(size - 1 - y) + (size - 1 - x) * size]; + } + + return null; +} + +sea_monster_width := 20; +sea_monster_height := 3; +sea_monster := u8.[ + #char" ",#char" ",#char" ",#char" ",#char" ",#char" ",#char" ",#char" ",#char" ",#char" ",#char" ",#char" ",#char" ",#char" ",#char" ",#char" ",#char" ",#char" ",#char"#",#char" ", + #char"#",#char" ",#char" ",#char" ",#char" ",#char"#",#char"#",#char" ",#char" ",#char" ",#char" ",#char"#",#char"#",#char" ",#char" ",#char" ",#char" ",#char"#",#char"#",#char"#", + #char" ",#char"#",#char" ",#char" ",#char"#",#char" ",#char" ",#char"#",#char" ",#char" ",#char"#",#char" ",#char" ",#char"#",#char" ",#char" ",#char"#",#char" ",#char" ",#char" ", +]; + +scan_for_monsters :: proc (forest: ^u8, ori: TO, width: u32, height: u32) -> bool { + found_monsters := false; + + for y: 0 .. height - sea_monster_height { + for x: 0 .. width - sea_monster_width { + is_monster := true; + + for my: 0 .. sea_monster_height { + for mx: 0 .. sea_monster_width { + if sea_monster[mx + my * sea_monster_width] != #char "#" do continue; + if *index_square_with_orientation(forest, ori, width, x + mx, y + my) != #char "." do continue; + + is_monster = false; + break break; + } + } + + if is_monster { + for my: 0 .. sea_monster_height { + for mx: 0 .. sea_monster_width { + if sea_monster[mx + my * sea_monster_width] != #char "#" do continue; + if *index_square_with_orientation(forest, ori, width, x + mx, y + my) != #char "#" do continue; + + *index_square_with_orientation(forest, ori, width, x + mx, y + my) = #char "o"; + } + } + + found_monsters = true; + } + } + } + + return found_monsters; +} + +tile_pos_state :: struct { + match : SideRelation; + pos_x : i32; + pos_y : i32; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day20.txt"; + + file := reader.make(contents); + + tiles : [..] Tile; + array.init(^tiles); + defer array.free(^tiles); + + tile_map : map.Map(u32, ^Tile); + map.init(^tile_map, 67); + defer map.free(^tile_map); + + tile_data := calloc(200 * sizeof TileData); + defer cfree(tile_data); + + // This ring allocator could technically overflow and start + // allocating memory that isn't technically free, but there + // should be more than enough space in the allocator to not + // run into that problem... Hopefully. + tile_data_ring := alloc.ring.make(tile_data, 200 * sizeof TileData); + tile_allocator := alloc.ring.make_allocator(^tile_data_ring); + + while !reader.empty(^file) { + reader.read_word(^file); // 'Tile ' + id := reader.read_u32(^file); + + reader.advance_line(^file); + + td := cast(^bool) raw_alloc(tile_allocator, sizeof TileData); + + for y: 0 .. 10 { + line := reader.read_line(^file); + + for x: 0 .. 10 { + td[x + y * TILE_DATA_WIDTH] = (line[x] == #char "#"); + } + } + + tile_data := td[0 .. TILE_DATA_HEIGHT * TILE_DATA_WIDTH]; + edges := build_edges(tile_data, tile_allocator); + + array.push(^tiles, Tile.{ + id = id, + orientation = TO.N, + data = tile_data, + edges = edges, + }); + + reader.advance_line(^file); + } + + for ^t: tiles do map.put(^tile_map, t.id, t); + + prod: u64 = 1; + top_left_id := 0; + + for i: 0 .. tiles.count - 1 { + matching_count := 0; + + for j: 0 .. tiles.count { + if i == j do continue; + if has_matching_edges(^tiles[i], ^tiles[j]) { + matching_count += 1; + } + } + + if matching_count == 2 { + prod *= ~~tiles[i].id; + + // HACK!!! + if tiles[i].edges_match.top.tile != 0 && tiles[i].edges_match.right.tile != 0 { + if top_left_id == 0 do top_left_id = tiles[i].id; + } + } + } + + printf("Corner product: %l\n", prod); + + grid : [12 * 12] u32; + memory.set(^grid, sizeof [12 * 12] u32, 0); + + to_process : [..] tile_pos_state; + array.init(^to_process); + defer array.free(^to_process); + + array.push(^to_process, tile_pos_state.{ SideRelation.{ top_left_id, TO.F }, 0, 0 }); + while to_process.count > 0 { + tid := to_process[0]; + array.delete(^to_process, 0); + + if grid[tid.pos_x + 12 * tid.pos_y] != 0 do continue; + + tile_ptr := map.get(^tile_map, tid.match.tile); + tile_ptr.pos_x = tid.pos_x; + tile_ptr.pos_y = tid.pos_y; + grid[tid.pos_x + 12 * tid.pos_y] = tid.match.tile; + + apply_orientation(tile_ptr, tid.match.ori); + + if tile_ptr.edges_match.top.tile != 0 do array.push(^to_process, tile_pos_state.{ tile_ptr.edges_match.top, tid.pos_x, tid.pos_y - 1 }); + if tile_ptr.edges_match.bottom.tile != 0 do array.push(^to_process, tile_pos_state.{ tile_ptr.edges_match.bottom, tid.pos_x, tid.pos_y + 1 }); + if tile_ptr.edges_match.left.tile != 0 do array.push(^to_process, tile_pos_state.{ tile_ptr.edges_match.left, tid.pos_x - 1, tid.pos_y }); + if tile_ptr.edges_match.right.tile != 0 do array.push(^to_process, tile_pos_state.{ tile_ptr.edges_match.right, tid.pos_x + 1, tid.pos_y }); + } + + forest : [12 * 8 * 12 * 8] u8; + for y: 0 .. 12 { + for x: 0 .. 12 { + tile := map.get(^tile_map, grid[y * 12 + x]); + + for fy: 0 .. 8 { + for fx: 0 .. 8 { + res := *index_square_with_orientation(cast(^bool) tile.data.data, tile.orientation, 10, fx + 1, fy + 1); + loc := (y * 12 * 8 * 8) + (fy * 12 * 8) + (x * 8) + fx; + if res do forest[loc] = #char "#"; + else do forest[loc] = #char "."; + } + } + } + } + + for ori: TO.[ TO.N, TO.R90, TO.R180, TO.R270, TO.F, TO.FR90, TO.FR180, TO.FR270 ] { + if scan_for_monsters(cast(^u8) forest, ori, 12 * 8, 12 * 8) do break; + } + + safe_count := 0; + for c: forest do if c == #char "#" do safe_count += 1; + + printf("Safe count: %i\n", safe_count); +} diff --git a/tests/aoc-2020/day21 b/tests/aoc-2020/day21 new file mode 100644 index 00000000..8c88f050 --- /dev/null +++ b/tests/aoc-2020/day21 @@ -0,0 +1,11 @@ +Total safe: 2779 +lkv -> dairy +lfcppl -> eggs +jhsrjlj -> nuts +jrhvk -> peanuts +zkls -> sesame +qjltjd -> shellfish +xslr -> soy +rfpbpn -> wheat +lkv,lfcppl,jhsrjlj,jrhvk,zkls,qjltjd,xslr,rfpbpn, +(Don't copy the last ','!) diff --git a/tests/aoc-2020/day21.onyx b/tests/aoc-2020/day21.onyx new file mode 100644 index 00000000..2b1b47f2 --- /dev/null +++ b/tests/aoc-2020/day21.onyx @@ -0,0 +1,182 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +/* + What questions the data layout needs to answer easily: + 1. What are the lists that this item appears on? + 2. What allergens are on each list? + 3. What are the lists that each allergen appears on? +*/ + +Ingredient :: struct { + // This will just be a pointer into the file contents. + name : str = str.{ null, 0 }; + appears_on : [..] u32 = (#type [..] u32).{ null, 0, 0 }; + + allergen : str = str.{ null, 0 }; +} + +Allergen :: struct { + name : str = str.{ null, 0 }; + appears_on : [..] u32 = (#type [..] u32).{ null, 0, 0 }; +} + +Food :: struct { + ingredients : [..] str; + allergens : [..] str; +} + +ingredient_map : map.Map(str, Ingredient); +allergen_map : map.Map(str, Allergen); + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day21.txt"; + + file := reader.make(contents); + + map.init(^ingredient_map, 127); + map.init(^allergen_map); + defer { + map.free(^ingredient_map); + map.free(^allergen_map); + } + + foods : [..] Food; + array.init(^foods); + defer array.free(^foods); + + line_num := 0; + while !reader.empty(^file) { + food : Food; + array.init(^food.ingredients, 16); + array.init(^food.allergens); + + while *file.data != #char "(" { + ingredient_name := reader.read_word(^file); + reader.skip_bytes(^file, 1); // ' ' + + array.push(^food.ingredients, ingredient_name); + + ingredient := map.get(^ingredient_map, ingredient_name, Ingredient.{}); + if ingredient.name.data == null { + ingredient.name = ingredient_name; + array.init(^ingredient.appears_on, 4); + } + + array.push(^ingredient.appears_on, line_num); + + map.put(^ingredient_map, ingredient_name, ingredient); + } + + reader.skip_bytes(^file, 10); // '(contains ' + + while *file.data != #char ")" { + allergen_name := reader.read_word(^file); + if *file.data == #char "," do reader.skip_bytes(^file, 2); // ', ' + + array.push(^food.allergens, allergen_name); + + allergen := map.get(^allergen_map, allergen_name, Allergen.{}); + if allergen.name.data == null { + allergen.name = allergen_name; + array.init(^allergen.appears_on, 4); + } + + array.push(^allergen.appears_on, line_num); + + map.put(^allergen_map, allergen_name, allergen); + } + + array.push(^foods, food); + + reader.advance_line(^file); + line_num += 1; + } + + definitely_safe : [..] str; + array.init(^definitely_safe); + defer array.free(^definitely_safe); + + for ^ingredient_entry: ingredient_map.entries { + potential_allergens : [..] str; + array.init(^potential_allergens); + defer array.free(^potential_allergens); + + for food_num: ingredient_entry.value.appears_on { + for ^allergen_name: foods[food_num].allergens { + array.push(^potential_allergens, *allergen_name); + } + } + + potential_allergen_count := 0; + for ^allergen_name: potential_allergens { + c := array_count_contains(^potential_allergens, *allergen_name, string.equal); + allergen := map.get(^allergen_map, *allergen_name, Allergen.{}); + if c == allergen.appears_on.count { + potential_allergen_count += 1; + } + } + + if potential_allergen_count == 0 { + array.push(^definitely_safe, ingredient_entry.key); + } + } + + total_safe := 0; + for safe: definitely_safe { + ingredient := map.get(^ingredient_map, safe, Ingredient.{}); + total_safe += ingredient.appears_on.count; + + map.delete(^ingredient_map, safe); + } + + printf("Total safe: %i\n", total_safe); + + matched_ingredients : [..] Ingredient; + array.init(^matched_ingredients); + defer array.free(^matched_ingredients); + + while !map.empty(^ingredient_map) { + for ^allergen_entry: allergen_map.entries { + match_count := 0; + matching_ingredient_name := str.{ null, 0 }; + + for ^ingredient_entry: ingredient_map.entries { + matches := true; + + for ap: allergen_entry.value.appears_on { + if !array.contains(^ingredient_entry.value.appears_on, ap) do matches = false; + } + + if matches { + match_count += 1; + matching_ingredient_name = ingredient_entry.key; + } + } + + if match_count == 1 { + ingredient := map.get(^ingredient_map, matching_ingredient_name, Ingredient.{}); + map.delete(^ingredient_map, matching_ingredient_name); + + ingredient.allergen = allergen_entry.key; + array.push(^matched_ingredients, ingredient); + } + } + } + + array.sort(^matched_ingredients, proc (i1: Ingredient, i2: Ingredient) -> i32 { + return string.compare(i1.allergen, i2.allergen); + }); + + for ^mi: matched_ingredients do printf("%s -> %s\n", mi.name, mi.allergen); + for ^mi: matched_ingredients do printf("%s,", mi.name); + println("\n(Don't copy the last ','!)"); +} + +array_count_contains :: proc (arr: ^[..] $T, x: T, equal: proc (T, T) -> bool) -> u32 { + count := 0; + for ^it: *arr do if equal(*it, x) do count += 1; + return count; +} diff --git a/tests/aoc-2020/day22 b/tests/aoc-2020/day22 new file mode 100644 index 00000000..728cef5a --- /dev/null +++ b/tests/aoc-2020/day22 @@ -0,0 +1,2 @@ +Answer: 32598 +Recursive answer: 35836 diff --git a/tests/aoc-2020/day22.onyx b/tests/aoc-2020/day22.onyx new file mode 100644 index 00000000..d7e8c308 --- /dev/null +++ b/tests/aoc-2020/day22.onyx @@ -0,0 +1,160 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +key_arena : alloc.arena.ArenaState; +key_alloc : Allocator; + +score_player :: proc (p: ^[..] u32) -> u32 { + count := 0; + mul := p.count; + for c: *p { + count += c * mul; + mul -= 1; + } + return count; +} + +combat :: proc (player1: ^[..] u32, player2: ^[..] u32) -> u32 { + while player1.count > 0 && player2.count > 0 { + p1 := player1.data[0]; + p2 := player2.data[0]; + array.delete(player1, 0); + array.delete(player2, 0); + + if p1 > p2 { + array.push(player1, p1); + array.push(player1, p2); + } else { + array.push(player2, p2); + array.push(player2, p1); + } + } + + if player1.count > 0 do return score_player(player1); + return score_player(player2); +} + +// Encodes a hand state such as: +// P1: 4 5 2 8 +// P2: 1 3 9 7 +// into: +// 4,5,2,8,|1,3,9,7, +// Larger numbers are encoded in base 64. +encode_hands :: proc (alloc: Allocator, p1: ^[..] u32, p2: ^[..] u32) -> str { + use package core.string.builder as b + + builder := b.make(128, alloc); + for n: *p1 { + b.add_i64(^builder, ~~n, 64); + b.add_str(^builder, ","); + } + b.add_str(^builder, "|"); + for n: *p2 { + b.add_i64(^builder, ~~n, 64); + b.add_str(^builder, ","); + } + + return b.to_str(^builder); +} + +recursive_combat :: proc (player1: ^[..] u32, player2: ^[..] u32) -> u32 { + hand_seen : map.Map(str, bool); + map.init(^hand_seen, 31); + defer map.free(^hand_seen); + + while player1.count > 0 && player2.count > 0 { + enc_hand := encode_hands(key_alloc, player1, player2); + if map.has(^hand_seen, enc_hand) do return 1; + map.put(^hand_seen, enc_hand, true); + + p1 := player1.data[0]; + p2 := player2.data[0]; + array.delete(player1, 0); + array.delete(player2, 0); + + round_win := 0; + + if player1.count >= p1 && player2.count >= p2 { + p1_copy := array.copy_range(player1, 0 .. p1); + p2_copy := array.copy_range(player2, 0 .. p2); + defer array.free(^p1_copy); + defer array.free(^p2_copy); + + round_win = recursive_combat(^p1_copy, ^p2_copy); + } else { + if p1 > p2 do round_win = 1; + else do round_win = 2; + } + + if round_win == 1 { + array.push(player1, p1); + array.push(player1, p2); + } else { + array.push(player2, p2); + array.push(player2, p1); + } + } + + if player1.count == 0 do return 2; + return 1; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day22.txt"; + + file := reader.make(contents); + + player1: [..] u32; + player2: [..] u32; + array.init(^player1); + array.init(^player2); + defer array.free(^player1); + defer array.free(^player2); + + reader.advance_line(^file); // 'Player 1:' + while *file.data != #char "\n" { + card := reader.read_u32(^file); + array.push(^player1, card); + + reader.advance_line(^file); + } + + reader.advance_line(^file); // '\n' + reader.advance_line(^file); // 'Player 2:' + while !reader.empty(^file) { + card := reader.read_u32(^file); + array.push(^player2, card); + + reader.advance_line(^file); + } + + { + player1_copy := array.copy(^player1); + player2_copy := array.copy(^player2); + defer array.free(^player1_copy); + defer array.free(^player2_copy); + + combat_score := combat(^player1_copy, ^player2_copy); + printf("Answer: %i\n", combat_score); + } + + { + key_arena = alloc.arena.make(context.allocator, 1 << 14); + key_alloc = alloc.arena.make_allocator(^key_arena); + + player1_copy := array.copy(^player1); + player2_copy := array.copy(^player2); + defer array.free(^player1_copy); + defer array.free(^player2_copy); + + winner := recursive_combat(^player1_copy, ^player2_copy); + + score : u32; + if winner == 1 do score = score_player(^player1_copy); + if winner == 2 do score = score_player(^player2_copy); + + printf("Recursive answer: %i\n", score); + } +} diff --git a/tests/aoc-2020/day23 b/tests/aoc-2020/day23 new file mode 100644 index 00000000..1f4a78f6 --- /dev/null +++ b/tests/aoc-2020/day23 @@ -0,0 +1 @@ +Cup product: 287230227046 diff --git a/tests/aoc-2020/day23.onyx b/tests/aoc-2020/day23.onyx new file mode 100644 index 00000000..4741d07a --- /dev/null +++ b/tests/aoc-2020/day23.onyx @@ -0,0 +1,94 @@ +#include_file "core/std/js" + +use package core + +cups : [..] i32; + +// Using this as a wrapping function, since the WASM modulus +// operator (%) doesn't appear to do the correct thing. +w :: proc (idx: $T, mod := cups.count) -> T { + res := idx; + while res < 0 do res += ~~mod; + while res >= ~~mod do res -= ~~mod; + return res; +} + +get_idx :: proc (cups: [] i32, cup: i32) -> i32 { + for i: 0 .. cups.count do if cups[i] == cup do return i; + return -1; +} + +range_by :: proc (lo: i32, hi: i32) -> range { + if lo < hi do return range.{ lo, hi, 1 }; + if hi < lo do return range.{ hi, lo, 1 }; + return 0 .. 0; +} + +simulate :: proc (cups: [] i32, moves := 100) { + cw : [] i32; + alloc.alloc_slice(^cw, cups.count); + defer cfree(cw.data); + + for i: 0 .. cups.count do cw[cups[i]] = cups[w(i + 1)]; + + current_cup := cups[0]; + + for move: 0 .. moves { + next_1 := cw[current_cup]; + next_2 := cw[next_1]; + next_3 := cw[next_2]; + + destination_cup := w(current_cup - 1); + while destination_cup == ~~next_1 + || destination_cup == ~~next_2 + || destination_cup == ~~next_3 { + destination_cup = w(destination_cup - 1); + } + + cw[current_cup] = cw[next_3]; + cw[next_3] = cw[destination_cup]; + cw[destination_cup] = next_1; + + current_cup = cw[current_cup]; + } + + cup := 0; + for i: 0 .. cups.count { + cups[i] = cup; + cup = cw[cup]; + } +} + +main :: proc (args: [] cstr) { + cups_data := i32.[ 9, 6, 2, 7, 1, 3, 8, 5, 4 ]; + + // Easier think about in zero-indexed + for ^cup: cups_data do *cup -= 1; + + array.init(^cups, 1000000); + defer array.free(^cups); + + for cup: cups_data do array.push(^cups, cup); + + // Part 1 + // simulate(array.to_slice(^cups)); + + // Part 2 + for i: 9 .. 1000000 do array.push(^cups, i); + simulate(array.to_slice(^cups), 10000000); + + // Undo the zero-indexing + for ^cup: cups do *cup += 1; + + // Part 1 + // one_idx := get_idx(array.to_slice(^cups), 1); + // for i: 1 .. 9 { + // printf("%i", cast(i32) cups[w(one_idx + i)]); + // } + // printf("\n"); + + // Part 2 + one_idx := get_idx(array.to_slice(^cups), 1); + prod: i64 = cast(i64) (cups[w(one_idx + 1)]) * cast(i64) (cups[w(one_idx + 2)]); + printf("Cup product: %l\n", prod); +} diff --git a/tests/aoc-2020/day24 b/tests/aoc-2020/day24 new file mode 100644 index 00000000..899b08a1 --- /dev/null +++ b/tests/aoc-2020/day24 @@ -0,0 +1,2 @@ +Black count: 473 +GOL black count: 4070 diff --git a/tests/aoc-2020/day24.onyx b/tests/aoc-2020/day24.onyx new file mode 100644 index 00000000..8d82cbae --- /dev/null +++ b/tests/aoc-2020/day24.onyx @@ -0,0 +1,136 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +Vec2 :: struct { + x: i32 = 0; + y: i32 = 0; +} + +proc (v: Vec2) -> u32 #add_overload map.hash_function { + return v.x * 11 + v.y * 17; +} + +proc (v1: Vec2, v2: Vec2) -> bool #add_overload map.cmp_function { + return v1.x == v2.x + && v1.y == v2.y; +} + +Hex_Directions := Vec2.[ + Vec2.{ 1, 0 }, Vec2.{ 1, -1 }, Vec2.{ 0, -1 }, + Vec2.{ -1, 0 }, Vec2.{ -1, 1 }, Vec2.{ 0, 1 }, +]; + +Cell :: struct { + alive : bool = false; + next : bool = false; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day24.txt"; + + file := reader.make(contents); + + grid : map.Map(Vec2, Cell); // `true` is black + map.init(^grid, 1021); + defer map.free(^grid); + + while !reader.empty(^file) { + line := reader.read_line(^file); + + loc := Vec2.{ 0, 0 }; + s := 0; + for ch: line do switch s { + case 0 do switch ch { + case #char "e" do loc.x += 1; + case #char "w" do loc.x -= 1; + case #char "n" do s = 1; + case #char "s" do s = 2; + } + + case 1 { + switch ch { + case #char "e" { loc.x += 1; loc.y -= 1; } + case #char "w" { loc.y -= 1; } + } + s = 0; + } + + case 2 { + switch ch { + case #char "e" { loc.y += 1; } + case #char "w" { loc.x -= 1; loc.y += 1; } + } + s = 0; + } + } + + + curr := map.get(^grid, loc, Cell.{}); + map.put(^grid, loc, Cell.{ alive = !curr.alive }); + } + + // Part 1 + black_count := 0; + for ^cell: grid.entries { + if cell.value.alive do black_count += 1; + } + printf("Black count: %i\n", black_count); + + // Part 2 + cells_to_consider : [..] Vec2; + array.init(^cells_to_consider); + defer array.free(^cells_to_consider); + + for i: 0 .. 100 { + for ^cell: grid.entries { + if cell.value.alive { + array.push(^cells_to_consider, cell.key); + + for ^dir: Hex_Directions { + array.push(^cells_to_consider, Vec2.{ + x = cell.key.x + dir.x, + y = cell.key.y + dir.y, + }); + } + } + } + + for ^cell: cells_to_consider { + state := map.get(^grid, *cell, Cell.{}); + ncount := get_neighbor_count(^grid, *cell); + + if state.alive { + state.next = ncount == 1 || ncount == 2; + } else { + state.next = ncount == 2; + } + + map.put(^grid, *cell, state); + } + + for ^cell: cells_to_consider { + map.update(^grid, *cell, proc (state: ^Cell) { state.alive = state.next; }); + } + + array.clear(^cells_to_consider); + } + + black_count = 0; + for ^cell: grid.entries { + if cell.value.alive do black_count += 1; + } + printf("GOL black count: %i\n", black_count); +} + +get_neighbor_count :: proc (grid: ^map.Map(Vec2, Cell), pos: Vec2) -> u32 { + count := 0; + + for ^dir: Hex_Directions { + cell := map.get(grid, Vec2.{ x = pos.x + dir.x, y = pos.y + dir.y }, Cell.{}); + if cell.alive do count += 1; + } + + return count; +} diff --git a/tests/aoc-2020/day25 b/tests/aoc-2020/day25 new file mode 100644 index 00000000..c57c2c66 --- /dev/null +++ b/tests/aoc-2020/day25 @@ -0,0 +1 @@ +18329280 == 18329280 diff --git a/tests/aoc-2020/day25.onyx b/tests/aoc-2020/day25.onyx new file mode 100644 index 00000000..210e5039 --- /dev/null +++ b/tests/aoc-2020/day25.onyx @@ -0,0 +1,73 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +power_mod :: proc (base: u32, exp: u32, mod: u32) -> u32 { + t: u64 = 1; + e: u64 = ~~exp; + b: u64 = ~~base; + m: u64 = ~~mod; + + while e > 0 { + if e % 2 != 0 do t = (t * b) % m; + + b = (b * b) % m; + e /= 2; + } + + return ~~(t % m); +} + +dlp_bsgs :: proc (n: u32, a: u32, b: u32) -> u32 { + use package core.intrinsics.wasm { ceil_f64, sqrt_f64 } + + m := cast(u32) ceil_f64(sqrt_f64(~~n)); + + t : map.Map(u32, u32); + map.init(^t, m / 2); + defer map.free(^t); + + tmp: u64 = 1; + for i: 0 .. m { + map.put(^t, ~~tmp, i); + tmp = (tmp * ~~a) % ~~n; + } + + f := power_mod(a, n - 1 - m, n); + + tmp = ~~b; + for i: 0 .. m { + if map.has(^t, cast(u32) tmp) { + v := map.get(^t, cast(u32) tmp, 0); + return i * m + v; + } + + tmp = (tmp * ~~f) % ~~n; + } + + return 0; +} + +transform_subject :: proc (subject: u32, loop_size: u32) -> u32 { + value: u64 = 1; + for i: 0 .. loop_size do value = (value * ~~subject) % 20201227; + return cast(u32) value; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day25.txt"; + + file := reader.make(contents); + + card_pub_key := reader.read_u32(^file); + door_pub_key := reader.read_u32(^file); + + card_loop_secret := dlp_bsgs(20201227, 7, card_pub_key); + door_loop_secret := dlp_bsgs(20201227, 7, door_pub_key); + + encryption_key_0 := transform_subject(door_pub_key, card_loop_secret); + encryption_key_1 := transform_subject(card_pub_key, door_loop_secret); + + printf("%i == %i\n", encryption_key_0, encryption_key_1); +} diff --git a/tests/aoc-2020/day3 b/tests/aoc-2020/day3 new file mode 100644 index 00000000..32667c4f --- /dev/null +++ b/tests/aoc-2020/day3 @@ -0,0 +1 @@ +Tree product: 7812180000 diff --git a/tests/aoc-2020/day3.onyx b/tests/aoc-2020/day3.onyx new file mode 100644 index 00000000..9ae9c697 --- /dev/null +++ b/tests/aoc-2020/day3.onyx @@ -0,0 +1,66 @@ +#include_file "core/std/js" + +use package core + +Point :: struct { + x : i32; + y : i32; +}; + +LineInterp :: struct { + ox : i32; + oy : i32; + dx : i32; + dy : i32; +} + +line_interp_at :: proc (use li: LineInterp, t: i32) -> Point { + return Point.{ ox + dx * t, oy + dy * t }; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day3.txt"; + + forest: [..] u8; + array.init(^forest, 1024); + defer array.free(^forest); + + width := 0; + height := 0; + while true { + line := ""; + string.read_line(^contents, ^line); + if line.count == 0 do break; + + width = line.count; + height = height + 1; + + for ch: line do array.push(^forest, ch); + } + + lis : [5] LineInterp; + lis[0] = LineInterp.{ 0, 0, 1, 1 }; + lis[1] = LineInterp.{ 0, 0, 3, 1 }; + lis[2] = LineInterp.{ 0, 0, 5, 1 }; + lis[3] = LineInterp.{ 0, 0, 7, 1 }; + lis[4] = LineInterp.{ 0, 0, 1, 2 }; + + tree_prod: u64 = 1; + + for li: lis { + tree_count: u64 = 0; + while i := 0; true { + p := line_interp_at(li, i); + if p.y >= height || p.y < 0 do break; + i += 1; + + p.x %= width; + + if forest[p.x + p.y * width] == #char "#" do tree_count += 1; + } + + tree_prod *= tree_count; + } + + printf("Tree product: %l\n", tree_prod); +} diff --git a/tests/aoc-2020/day4 b/tests/aoc-2020/day4 new file mode 100644 index 00000000..ddf62263 --- /dev/null +++ b/tests/aoc-2020/day4 @@ -0,0 +1 @@ +Valid passports: 206 diff --git a/tests/aoc-2020/day4.onyx b/tests/aoc-2020/day4.onyx new file mode 100644 index 00000000..f53eef82 --- /dev/null +++ b/tests/aoc-2020/day4.onyx @@ -0,0 +1,44 @@ +#include_file "core/std/js" + +use package core + +// Returns the number of fields +process_passport :: proc (contents: ^str) -> u32 { + field_count := 0; + + while true { + line: str; + string.read_line(contents, ^line); + if line.count == 0 do break; + + fields := string.split(line, #char " "); + defer cfree(fields.data); + + for field: fields { + data := string.split(field, #char ":"); + defer cfree(data.data); + + if !string.equal(data[0], "cid") { + field_count += 1; + } + } + } + + return field_count; +} + +// This does not include part 2 because it is gross and +// not worth the effort to implement it. +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day4.txt"; + + valid_passports := 0; + while true { + if contents.count == 0 do break; + + field_count := process_passport(^contents); + if field_count == 7 do valid_passports += 1; + } + + printf("Valid passports: %i\n", valid_passports); +} diff --git a/tests/aoc-2020/day5 b/tests/aoc-2020/day5 new file mode 100644 index 00000000..947b91e4 --- /dev/null +++ b/tests/aoc-2020/day5 @@ -0,0 +1,2 @@ +Max val: 926 +Your seat: 657 diff --git a/tests/aoc-2020/day5.onyx b/tests/aoc-2020/day5.onyx new file mode 100644 index 00000000..4698e85a --- /dev/null +++ b/tests/aoc-2020/day5.onyx @@ -0,0 +1,37 @@ +#include_file "core/std/js" + +use package core + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day5.txt"; + + vals: [..] u32; + array.init(^vals); + defer array.free(^vals); + + max_val := 0; + + while true { + line: str; + string.read_line(^contents, ^line); + if line.count == 0 do break; + + val := 0; + for ch: line { + val *= 2; + if ch == #char "B" || ch == #char "R" do val += 1; + } + + max_val = math.max(max_val, val); + array.push(^vals, val); + } + + missing := 0; + array.sort(^vals, cmp_asc); + for i: 0 .. vals.count - 1 { + if vals[i + 1] - vals[i] != 1 do missing = vals[i] + 1; + } + + printf("Max val: %i\n", max_val); + printf("Your seat: %i\n", missing); +} diff --git a/tests/aoc-2020/day6 b/tests/aoc-2020/day6 new file mode 100644 index 00000000..2f754b5d --- /dev/null +++ b/tests/aoc-2020/day6 @@ -0,0 +1 @@ +Unique sum: 6585 diff --git a/tests/aoc-2020/day6.onyx b/tests/aoc-2020/day6.onyx new file mode 100644 index 00000000..0a6c0347 --- /dev/null +++ b/tests/aoc-2020/day6.onyx @@ -0,0 +1,55 @@ +#include_file "core/std/js" + +use package core + +part_1 :: proc (contents: ^str) -> u32 { + chars : [26] bool; + for ^ch: chars do *ch = false; + + while true { + line: str; + string.read_line(contents, ^line); + if line.count == 0 do break; + + for ch: line do chars[~~ch - cast(u32) #char "a"] = true; + } + + sum := 0; + for ch: chars do if ch do sum += 1; + + return sum; +} + +part_2 :: proc (contents: ^str) -> u32 { + chars : [26] u32; + for ^ch: chars do *ch = 0; + + person_count := 0; + while true { + line: str; + string.read_line(contents, ^line); + if line.count == 0 do break; + person_count += 1; + + for ch: line do chars[~~ch - cast(u32) #char "a"] += 1; + } + + sum := 0; + for ch: chars do if ch == person_count do sum += 1; + + return sum; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day6.txt"; + + unique_sum := 0; + while true { + if contents.count == 0 do break; + + unique := part_1(^contents); + unique_sum += unique; + } + + printf("Unique sum: %i\n", unique_sum); +} diff --git a/tests/aoc-2020/day7 b/tests/aoc-2020/day7 new file mode 100644 index 00000000..1b4b2687 --- /dev/null +++ b/tests/aoc-2020/day7 @@ -0,0 +1 @@ +Count: 30899 diff --git a/tests/aoc-2020/day7.onyx b/tests/aoc-2020/day7.onyx new file mode 100644 index 00000000..4e35231f --- /dev/null +++ b/tests/aoc-2020/day7.onyx @@ -0,0 +1,142 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +BagGraph :: struct { + nodes : [..] ^BagNode; + node_map : map.Map(str, ^BagNode); +} + +BagNode :: struct { + color : str; + // Part 1 + // contained_in : [..] BagContainment; + + // Part 2 + contain : [..] BagContainment; +} + +BagContainment :: struct { + bag : ^BagNode; + count : u32; +} + +bg_init :: proc (use graph: ^BagGraph) { + array.init(^nodes, 16); + map.init(^node_map); +} + +bg_free :: proc (use graph: ^BagGraph) { + array.free(^nodes); + map.free(^node_map); +} + +bg_get_node :: proc (use graph: ^BagGraph, name: str) -> ^BagNode { + node := map.get(^node_map, name); + + if node == null { + node = calloc(sizeof BagNode); + // Part 1 + // array.init(^node.contained_in, 2); + // Part 2 + array.init(^node.contain, 2); + node.color = name; + + array.push(^nodes, node); + map.put(^node_map, node.color, node); + } + + return node; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day7.txt"; + + file := reader.make(contents); + + graph : BagGraph; + bg_init(^graph); + defer bg_free(^graph); + + while true { + name := reader.read_until(^file, 1, #char " "); + if name.count == 0 do break; + + container := bg_get_node(^graph, name); + + reader.read_until(^file, 2, #char " "); + + while true { + if reader.starts_with(^file, " no") do break; + + count := reader.read_u32(^file); + reader.skip_bytes(^file, 1); + + contained_name := reader.read_until(^file, 1, #char " "); + contained := bg_get_node(^graph, contained_name); + + // Part 1 + // array.push(^contained.contained_in, BagContainment.{ + // bag = container, + // count = count + // }); + + // Part 2 + array.push(^container.contain, BagContainment.{ + bag = contained, + count = count + }); + + bag_word := reader.read_until(^file, 1, #char " ", #char "\n"); + if bag_word[bag_word.count - 1] == #char "." do break; + } + + reader.advance_line(^file); + } + + // Part 1 + // to_process_bags : [..] ^BagNode; + // processed_bags: [..] ^BagNode; + + // array.init(^to_process_bags); + // array.init(^processed_bags, 32); + // array.push(^to_process_bags, bg_get_node(^graph, "shiny gold")); + + // while to_process_bags.count > 0 { + // bag := array.pop(^to_process_bags); + // array.push(^processed_bags, bag); + // + // for container: bag.contained_in { + // if !array.contains(^processed_bags, container.bag) && !array.contains(^to_process_bags, container.bag) { + // // printf("Adding %s to process.\n", container.bag.color); + // array.push(^to_process_bags, container.bag); + // } + // } + // } + + // printf("Count: %i\n", processed_bags.count - 1); + + // Part 2 + to_process : [..] ^BagNode; + multiplier : [..] u32; + + array.init(^to_process); + array.init(^multiplier); + array.push(^to_process, bg_get_node(^graph, "shiny gold")); + array.push(^multiplier, 1); + + count := 0; + while to_process.count > 0 { + bag := array.pop(^to_process); + mul := array.pop(^multiplier); + count += mul; + + for bc: bag.contain { + array.push(^to_process, bc.bag); + array.push(^multiplier, bc.count * mul); + } + } + + printf("Count: %i\n", count - 1); +} diff --git a/tests/aoc-2020/day8 b/tests/aoc-2020/day8 new file mode 100644 index 00000000..6e4c594e --- /dev/null +++ b/tests/aoc-2020/day8 @@ -0,0 +1 @@ +Accumulator value: 1033 diff --git a/tests/aoc-2020/day8.onyx b/tests/aoc-2020/day8.onyx new file mode 100644 index 00000000..59b404f3 --- /dev/null +++ b/tests/aoc-2020/day8.onyx @@ -0,0 +1,90 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +OpCode :: enum (u16) { + Nop; Acc; Jmp; +} + +Instruction :: struct { + opcode : OpCode; + operand : i16; +} + +// Returns if the program successfully exited. +get_acc_value :: proc (instrs: [..] Instruction, ret_acc: ^i32) -> bool { + already_been: map.Map(i32, bool); + map.init(^already_been); + defer map.free(^already_been); + + ip := 0; + acc := 0; + succ := false; + while true { + if ip >= instrs.count { + succ = true; + break; + } + + if map.has(^already_been, ip) do break; + map.put(^already_been, ip, true); + + switch instrs[ip].opcode { + case OpCode.Nop do ip += 1; + case OpCode.Acc { + acc += ~~instrs[ip].operand; + ip += 1; + } + case OpCode.Jmp do ip += ~~instrs[ip].operand; + } + } + + *ret_acc = acc; + return succ; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day8.txt"; + + file := reader.make(contents); + + instrs: [..] Instruction; + array.init(^instrs, 32); + defer array.free(^instrs); + + while !reader.empty(^file) { + word := reader.read_bytes(^file, 3); + reader.skip_bytes(^file, 1); + + sign := reader.read_byte(^file); + val := reader.read_u32(^file); + + reader.advance_line(^file); + + if sign == #char "-" do val *= -1; + + opcode : OpCode; + if string.equal(word, "nop") do opcode = OpCode.Nop; + elseif string.equal(word, "acc") do opcode = OpCode.Acc; + elseif string.equal(word, "jmp") do opcode = OpCode.Jmp; + + array.push(^instrs, Instruction.{ + opcode = opcode, + operand = ~~val, + }); + } + + acc: i32; + for ^instr: instrs { + if instr.opcode == OpCode.Nop do instr.opcode = OpCode.Jmp; + elseif instr.opcode == OpCode.Jmp do instr.opcode = OpCode.Nop; + + if get_acc_value(instrs, ^acc) do break; + + if instr.opcode == OpCode.Nop do instr.opcode = OpCode.Jmp; + elseif instr.opcode == OpCode.Jmp do instr.opcode = OpCode.Nop; + } + + printf("Accumulator value: %i\n", acc); +} diff --git a/tests/aoc-2020/day9 b/tests/aoc-2020/day9 new file mode 100644 index 00000000..e8e1f5db --- /dev/null +++ b/tests/aoc-2020/day9 @@ -0,0 +1,2 @@ +Invalid number: 248131121 +Extrema sum: 31580383 diff --git a/tests/aoc-2020/day9.onyx b/tests/aoc-2020/day9.onyx new file mode 100644 index 00000000..fe162d2d --- /dev/null +++ b/tests/aoc-2020/day9.onyx @@ -0,0 +1,74 @@ +#include_file "core/std/js" + +use package core +use package core.string.reader as reader + +StartEnd :: struct { start: i32; end: i32; } + +find_contiguous_subarray_with_sum :: proc (nums: [..] u64, sum: u64) -> StartEnd { + start := 0; + end := 0; + con_sum: u64 = nums[0]; + + for i: 1 .. nums.count { + end += 1; + con_sum += nums[end]; + + if con_sum == sum do break; + + while con_sum > sum && start <= end { + con_sum -= nums[start]; + start += 1; + + if con_sum == sum do break break; + } + } + + return StartEnd.{ start, end }; +} + +main :: proc (args: [] cstr) { + contents := #file_contents "./tests/aoc-2020/input/day9.txt"; + + file := reader.make(contents); + + nums: [..] u64; + array.init(^nums, 32); + defer array.free(^nums); + + while !reader.empty(^file) { + num := reader.read_u64(^file); + array.push(^nums, num); + } + + preamble_length :: 25; + + invalid: u64; + for i: 0 .. nums.count { + if i < preamble_length do continue; + + success := false; + for j: 0 .. preamble_length - 1 { + for k: j + 1 .. preamble_length { + if nums[i - j - 1] + nums[i - k - 1] == nums[i] { + success = true; + break break; + } + } + } + + if !success { + invalid = nums[i]; + break; + } + } + + printf("Invalid number: %l\n", invalid); + + se := find_contiguous_subarray_with_sum(nums, invalid); + + max := array.fold_slice(nums.data[se.start .. se.end + 1], cast(u64) 0, math.max); + min := array.fold_slice(nums.data[se.start .. se.end + 1], cast(u64) max, math.min); + + printf("Extrema sum: %l\n", min + max); +} diff --git a/tests/aoc-2020/input/day1.txt b/tests/aoc-2020/input/day1.txt new file mode 100644 index 00000000..7662181c --- /dev/null +++ b/tests/aoc-2020/input/day1.txt @@ -0,0 +1,200 @@ +1706 +1466 +1427 +1744 +1684 +1386 +2001 +1750 +1753 +1770 +1559 +1616 +1408 +1860 +1940 +2002 +1862 +1918 +1456 +1209 +1840 +1462 +1783 +1644 +1901 +1791 +1506 +2005 +1338 +1383 +1420 +1631 +1784 +1897 +1771 +1588 +1955 +1937 +1392 +1396 +1803 +1429 +1407 +1698 +1562 +1913 +1678 +1198 +1398 +1703 +1831 +1489 +1782 +1864 +1708 +1397 +1915 +1953 +1395 +1610 +1549 +1564 +1973 +1931 +2009 +1980 +1800 +1443 +1993 +1900 +1964 +1581 +1904 +1665 +1567 +1057 +1805 +1402 +1878 +1729 +1825 +1682 +1719 +1469 +1004 +1591 +1594 +811 +1523 +1424 +1756 +373 +1442 +1718 +1411 +1892 +1820 +1977 +1871 +1890 +1653 +1372 +1475 +1476 +1422 +2004 +1755 +1676 +639 +1425 +1853 +1712 +1525 +1514 +1455 +1658 +1963 +1579 +1861 +1458 +1474 +1613 +1681 +1586 +1441 +1499 +1865 +1735 +1989 +1952 +792 +1669 +1509 +1481 +1893 +1445 +1834 +1779 +1732 +1826 +1595 +1829 +449 +1920 +1707 +1780 +1935 +1867 +1769 +1107 +919 +1382 +1604 +1875 +1453 +1496 +1946 +1659 +1570 +1692 +1630 +1638 +1922 +1691 +1580 +1880 +1482 +1762 +1775 +1376 +1434 +1856 +1971 +1646 +1951 +1416 +1889 +1773 +1814 +1471 +1488 +1736 +1743 +1459 +1389 +1498 +1663 +1611 +1727 +1699 +1624 +1511 +1767 +1754 +1785 +1491 +1235 +1510 +1500 +1485 diff --git a/tests/aoc-2020/input/day10.txt b/tests/aoc-2020/input/day10.txt new file mode 100644 index 00000000..ccf88b72 --- /dev/null +++ b/tests/aoc-2020/input/day10.txt @@ -0,0 +1,92 @@ +17 +110 +146 +144 +70 +57 +124 +121 +134 +12 +135 +120 +19 +92 +6 +103 +46 +56 +93 +65 +14 +31 +63 +41 +131 +60 +73 +83 +71 +37 +85 +79 +13 +7 +109 +24 +94 +2 +30 +3 +27 +77 +91 +106 +123 +128 +35 +26 +112 +55 +97 +21 +100 +88 +113 +117 +25 +82 +129 +66 +11 +116 +64 +78 +38 +99 +130 +84 +98 +72 +50 +36 +54 +8 +34 +20 +127 +1 +137 +143 +76 +69 +111 +136 +53 +43 +140 +145 +49 +122 +18 +42 diff --git a/tests/aoc-2020/input/day11.txt b/tests/aoc-2020/input/day11.txt new file mode 100644 index 00000000..977ae5fa --- /dev/null +++ b/tests/aoc-2020/input/day11.txt @@ -0,0 +1,90 @@ +LLLLL.LLLLLL.LLLLLLLLL.LLL.LL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLL.LLLLLLL +LLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLL.LLLLLL.LLLL.LLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLLLLL +LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL +LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLL.L.LLLLLLLLLLLLLLLLLLLLLLLLL.LLL.LLLL +LLLLL.L.LLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLL.L.LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL +LLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +L.LL.L.L.LL.....L.L..L.LL.L.L.L.....L..LLL.L.....L.L...LL..L.....L...L..L.LLLL..L.LL......L.L.L. +LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLL. +LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +......LL..LLLL.L...LL.....L.L.......L..L.LL....L.LLL........L.L.L.LL.....L.........L....L......L +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL..LLLLLLL..LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLL.LLLL.LLLLLLLLLLLLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.L.LLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.L.LLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLL..LLLLL.LLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLL.L.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +LLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +.L...L...L.....L...L....L.LL.LLL.LL...LL.L..L...L......L..LL..L..LL..L.L......L.L.LLL......L.L.. +LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLL.LLLLLLLLLLLLLLLLL.L.LLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLL.L.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLL.LLL.LLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LL.LL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +...........LLL.....LLL.....LL.L..........L..L.L.L...L.L.....L........L......L..L..L...LL....L.L. +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLL.LLLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLL.LLLL.L.LLLL.LLLLLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLL.LLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLL.LLLL.LLLLLLL.L.LLLLLLLL +LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLL +LLLLL.LLLLLL.L.LLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +.LLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLL.LLLL.LLLLLLLLLLLLL +L.......LL...LL...L..L.....L..LL..L.L.LLL.L.L..L.LL.L.........L....LLLL..LL..L.L..L..LLLL..LL.L. +LLLLL.LLLLLL.LLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLL..LLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LL.LLLLLLLL +LLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +....LLL.LL....L.L.........L.L............L..L...L.LLLL......L...L.L..L....L.......L..L.......... +LLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL..LLLLLLLL.LLLLLL.LL.L.LLLLL.LLLLLL.LLLLLL.LLLLLLL.LLLLLLLL +LLLLLLLLLLLL.LL.L.LLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLLLLLLLLL.L..LLL..LLLLLLLLL.LLLLLL.LLLL.L.LLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLL..LLLLL.LLLLLLLLL.LLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +.L..LLLL..L.L.LLL.......LL.LL.LL......L.L....L.LLL.......L...L.L.LL...LL.....L.L....L.L...L.L... +LLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLL +LLLLL.LL.LLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLL..LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLL.LLLLLL..LLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLL.LL +LLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLL +LLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLLLLL +.L..L..LLL....LL......LL.L.L..LL..LL....L...L..L.L.L...L..L..L.LLLL.L....L.....L..L...L...LLL... +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +LLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.L.LLLLLL.LLLL.LLL.LLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LL.LLL.LLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLL +LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLLLLL..LLLLLLLLLLLLLL.LLLLLL.LL.LLLLLLLLLLL.L.LLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +..LL.LL.L.LL.L...L..L..L..L...LL........L......LL.LLLL.......L..LLL.L.L....L.....L..LL..L.LL.LL. +LLLLL.LLLL.L.LLLLL.LLL.LLLLLL.LLLLLLL.LL.LLLLLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL..LLLLL.LLLLLLL.LLLL.LLLLLLLLLLL.LLLL..LLLL.LLLLLLLLLLL.LLLLLLLLLLLLL.LLLL +LLLLL.LLLLLLLLLLLLLLL.L.LLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLL..LLLLLLLLLLLLLLL.L.LLLLLLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLL +LLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LL.LL.LLL.LL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL..LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL..LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL +.LL..LL.L.LL......L.L.LL...L..LL..LL...L..L.L..LL...L.L..L.....L.LLL..L..LL.L..L.......L..LLL... +LLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL +LLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLLL +LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLL..LLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL..LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLL.LLLLLLLLL.LLLL.LLL.L.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLL.LLL.LL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LL.LLL.LLLL.LLLLL.LLLLLL.LL.L.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +.L.L....LLL.L.L........L..L....L..L...LL..L..LLL..L.L....L..L.LL....LL.L.L.....L........L..L.L.. +LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLL.LL.LLLLLLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLL.LLL +LLLLL.LLLLLL.LLLLLLLLLLLLLL.L.LLLLLLL.LLLLLLLL.LLLLLLL.LLLL.LLLLL.LLLLLL.LLLL.LLLLL.LL..LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.L.LLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +LLLLLLLLLLLL.LLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLL +LLLL..L.LLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +LLLLL..LLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLL..LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLL.L.LL..LLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLL diff --git a/tests/aoc-2020/input/day12.txt b/tests/aoc-2020/input/day12.txt new file mode 100644 index 00000000..dc64185a --- /dev/null +++ b/tests/aoc-2020/input/day12.txt @@ -0,0 +1,750 @@ +W1 +F91 +W3 +F82 +N1 +E2 +N4 +R90 +F25 +N2 +F75 +E4 +R90 +F91 +R90 +F64 +L90 +E1 +L90 +S2 +L180 +S2 +E3 +N2 +E5 +L90 +N2 +R90 +F30 +L90 +N1 +F37 +S1 +E5 +F3 +E2 +F59 +W3 +L270 +S5 +W5 +S4 +F84 +N5 +R180 +E4 +F31 +L90 +E2 +F77 +L90 +N5 +F17 +N4 +N4 +W2 +F45 +S1 +F92 +E1 +F33 +L270 +F21 +L90 +E1 +F81 +N5 +F20 +E2 +R90 +N4 +W3 +L180 +S2 +F33 +E5 +F87 +R90 +N2 +F29 +E3 +S4 +L90 +E4 +R90 +S2 +F65 +L90 +F69 +W2 +N4 +F73 +R180 +S3 +R90 +N3 +R90 +W1 +L180 +F96 +N3 +W2 +L180 +S5 +F29 +E3 +S4 +W1 +F53 +E1 +L90 +E5 +F26 +E3 +R270 +E2 +S2 +W2 +F43 +W2 +F53 +F74 +R180 +N5 +W3 +S4 +F70 +R90 +W4 +F56 +L90 +S5 +R180 +E4 +S4 +F80 +S1 +F91 +R90 +S4 +F88 +L90 +S5 +R90 +E2 +S1 +F37 +N1 +R90 +F92 +W5 +F14 +N2 +E5 +S2 +F89 +L180 +N4 +E4 +L90 +F32 +E4 +R90 +F99 +N3 +L180 +F78 +S1 +R270 +W1 +F11 +S4 +F47 +N4 +L90 +F17 +R90 +E4 +S3 +F14 +S1 +R90 +N3 +F52 +W3 +S5 +L180 +F41 +R90 +F62 +W1 +R90 +E4 +F1 +W5 +F86 +W1 +N5 +F5 +S1 +E5 +F67 +W3 +F97 +E1 +L90 +S2 +E1 +R90 +F82 +E3 +N2 +F16 +L90 +W2 +F35 +R180 +N2 +E3 +N4 +W4 +F13 +S5 +E1 +S5 +L90 +E5 +F65 +E5 +L90 +S4 +E3 +W4 +N1 +R90 +N5 +F93 +R90 +S5 +R90 +L90 +F86 +E3 +F90 +E4 +N2 +E4 +R180 +W5 +R90 +E3 +F98 +F56 +L90 +F68 +L90 +N3 +F35 +S1 +W5 +F25 +L180 +F7 +R270 +F84 +R90 +S4 +E5 +S3 +L270 +F33 +W3 +R90 +W5 +N3 +E4 +R90 +W2 +F100 +E5 +S2 +L90 +F6 +E1 +L90 +S1 +F17 +N3 +E1 +S3 +F78 +R90 +W5 +N4 +L90 +F13 +W5 +R90 +F7 +F74 +R90 +E4 +F28 +L90 +S5 +R90 +F77 +S2 +E2 +N3 +F30 +E1 +R90 +W2 +S2 +F62 +E2 +L90 +E2 +F56 +L90 +F61 +S1 +F14 +W3 +F23 +L90 +E3 +S3 +L270 +S5 +F97 +E5 +S1 +F96 +W2 +F61 +L180 +F25 +L90 +W4 +F100 +W4 +F14 +W4 +S5 +R90 +F67 +E1 +R90 +F89 +W5 +S3 +W2 +N2 +F64 +L180 +S4 +R270 +F47 +E1 +S1 +E4 +N1 +R90 +N2 +E5 +F97 +N3 +E5 +S5 +R180 +E5 +F34 +L90 +W1 +W1 +N3 +R90 +F17 +N1 +F75 +S4 +W5 +N2 +W1 +N2 +L90 +W3 +N2 +F1 +N1 +W3 +R90 +F18 +E4 +N4 +F18 +N4 +F73 +W4 +F61 +W3 +R90 +N5 +L90 +N4 +F70 +E4 +F10 +L90 +F33 +N5 +L90 +W4 +L180 +E2 +F41 +E1 +S4 +E4 +L90 +F28 +N2 +W4 +S2 +F86 +R180 +S3 +W3 +S3 +W2 +F55 +W1 +F18 +W2 +F18 +L90 +S4 +W1 +L90 +F47 +L90 +S4 +F39 +N5 +L180 +S3 +W5 +F95 +W1 +R90 +E2 +N3 +L90 +S4 +F77 +S1 +W4 +S5 +E4 +R90 +W1 +R90 +W3 +W2 +N4 +F1 +W1 +N5 +F55 +E4 +N4 +W5 +L90 +F90 +E4 +R90 +E2 +R90 +S5 +F44 +N2 +E3 +R90 +F64 +W1 +L180 +L180 +F55 +L90 +F15 +S2 +E1 +R270 +F10 +R90 +W4 +F43 +E1 +F7 +N2 +W3 +F10 +N1 +L270 +N2 +L90 +E2 +R90 +F28 +W2 +N5 +F70 +R90 +E3 +E3 +F75 +W4 +L90 +S2 +R90 +F83 +L270 +E1 +F87 +R180 +N3 +L90 +F30 +L90 +E1 +N5 +F87 +N4 +R90 +F51 +W5 +N3 +R90 +S5 +F98 +W4 +N2 +E2 +L90 +E4 +S1 +E5 +F60 +N1 +L180 +E1 +F10 +R90 +W5 +F90 +W5 +F9 +S1 +W3 +F9 +E2 +S4 +L180 +F61 +W2 +N3 +F35 +R90 +E4 +N3 +W4 +L90 +E1 +L90 +S1 +F62 +S5 +W1 +N5 +L180 +F76 +W3 +L90 +W4 +L90 +N2 +E3 +N5 +E1 +N2 +F13 +S1 +F20 +W5 +L90 +S1 +F89 +S3 +L90 +W2 +L90 +F48 +W5 +N1 +R90 +F93 +L90 +E4 +L90 +N2 +F100 +W5 +S5 +W1 +S1 +E2 +S1 +W4 +R90 +S2 +F99 +W2 +F80 +L90 +F78 +N4 +L90 +F67 +S1 +L90 +F23 +W3 +N1 +W5 +F76 +R270 +F51 +L90 +W2 +N1 +E3 +S3 +L90 +F83 +L90 +F46 +S5 +L180 +N3 +E3 +F49 +E5 +N4 +W5 +L90 +E3 +R90 +S4 +F54 +E1 +F49 +N4 +L180 +E3 +L90 +R90 +F95 +W2 +N2 +F12 +R180 +E4 +R90 +N5 +L180 +S3 +W3 +S1 +F22 +W1 +F18 +L90 +F35 +R90 +F3 +S4 +L90 +F53 +W5 +F58 +L90 +S2 +F48 +S5 +R180 +F67 +L180 +W1 +S3 +L90 +F33 +F34 +R90 +F54 +W2 +L180 +S5 +W4 +R90 +F80 +W4 +S1 +W4 +F35 +E1 +F48 +N3 +L270 +F78 +N4 +S4 +F11 +S1 +W3 +L90 +W1 +F26 +R180 +E3 +F43 +S4 +R180 +W3 +N2 +F80 +W4 +F29 +W5 +W1 +R270 +N3 +L90 +F17 +W4 +F49 +S4 +S1 +F47 diff --git a/tests/aoc-2020/input/day13.txt b/tests/aoc-2020/input/day13.txt new file mode 100644 index 00000000..266f2202 --- /dev/null +++ b/tests/aoc-2020/input/day13.txt @@ -0,0 +1,2 @@ +1006697 +13,x,x,41,x,x,x,x,x,x,x,x,x,641,x,x,x,x,x,x,x,x,x,x,x,19,x,x,x,x,17,x,x,x,x,x,x,x,x,x,x,x,29,x,661,x,x,x,x,x,37,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,23 diff --git a/tests/aoc-2020/input/day14.txt b/tests/aoc-2020/input/day14.txt new file mode 100644 index 00000000..55183eeb --- /dev/null +++ b/tests/aoc-2020/input/day14.txt @@ -0,0 +1,577 @@ +mask = 0101XX01X00X1X1011X1X000000101X10001 +mem[7625] = 333450 +mem[24015] = 49860 +mem[42377] = 14966 +mem[17961] = 3341 +mem[37065] = 2066541 +mask = 111101XX101X1110110101X01X101X100X0X +mem[17330] = 176272 +mem[20250] = 11696927 +mem[28122] = 103 +mem[23322] = 1224 +mem[20521] = 306265426 +mem[56993] = 5315703 +mask = 0101110101111X0010100000X10X000X1X1X +mem[52304] = 107295284 +mem[48546] = 12756871 +mem[26246] = 794803013 +mem[32041] = 796 +mem[20164] = 6770841 +mem[48951] = 2607 +mask = 110101110110X11X110X100110X110010110 +mem[33686] = 1985 +mem[36236] = 652423 +mem[1772] = 614 +mem[48552] = 61799 +mem[51199] = 1768 +mem[38041] = 13211 +mask = 11XX01011X111110X100X1000X100X0X1001 +mem[10184] = 61765 +mem[17636] = 883 +mem[63317] = 137 +mem[4641] = 602692 +mem[31656] = 7910 +mem[40895] = 3100935 +mask = 1101111100X0X110X0X00X00111000010X01 +mem[12544] = 1947 +mem[10149] = 1246276 +mem[2653] = 116139 +mem[41147] = 5353 +mem[49305] = 186429425 +mem[27914] = 675 +mem[30788] = 2718 +mask = 0101110101110100X010XX11011XX0011101 +mem[45140] = 129899 +mem[54670] = 2700003 +mem[21662] = 5681585 +mem[57364] = 44013091 +mem[11437] = 212 +mem[53267] = 45116 +mask = 11100101101X11101100X010000X10X110X1 +mem[4630] = 919 +mem[14230] = 228044604 +mem[25029] = 189185 +mem[41789] = 497795355 +mem[29298] = 1740608 +mem[55321] = 603 +mask = 00X1111110X010101X0101011X0110100X11 +mem[55427] = 6760330 +mem[16391] = 8497685 +mask = 01110111X010111011001X1101X1001X0011 +mem[59831] = 11449720 +mem[24494] = 21722136 +mask = 1111X011XXX010X0X100010000001001XX10 +mem[10149] = 2044502 +mem[26810] = 1824407 +mem[24894] = 495492533 +mem[13252] = 160075 +mem[23314] = 96205288 +mem[31410] = 123057882 +mask = 1X111011XX1001X011001101101X0X11100X +mem[17518] = 2310 +mem[33686] = 2407271 +mem[55864] = 15074402 +mask = 1101X1X1X011111110001X011010010100X1 +mem[6096] = 54975 +mem[10934] = 358 +mem[57154] = 1490 +mask = 111X0XX10X101110110001X101X0000101X1 +mem[64796] = 210910 +mem[4752] = 3068 +mem[5629] = 1532924 +mem[53057] = 8797918 +mem[16901] = 3392 +mem[971] = 297 +mem[48019] = 80129224 +mask = 11100111001011101100011111X1X0X001X0 +mem[4689] = 6580 +mem[61719] = 506 +mem[3114] = 231484 +mem[26961] = 157879585 +mem[10668] = 8177 +mem[5634] = 2471 +mask = 0101X1011011111X11100001X000010X1X00 +mem[36080] = 46408099 +mem[22073] = 419830102 +mem[35679] = 1702 +mem[53576] = 277386 +mask = 111110010X1001101100X10011XX00000100 +mem[21538] = 12730624 +mem[38041] = 5930570 +mem[41831] = 6150636 +mem[38958] = 152898386 +mem[41147] = 1057472 +mem[13265] = 1434313 +mem[6405] = 841 +mask = 1111X0110110X0101X00X100100101000011 +mem[15676] = 940 +mem[20515] = 97 +mem[23882] = 903041426 +mask = 111110110110011011XX00X11110001X0110 +mem[35745] = 981 +mem[24128] = 11108 +mem[4977] = 1279634 +mask = X1110101011X1110110001010X10X00X0110 +mem[23442] = 1781008 +mem[54225] = 13834 +mem[48910] = 39611 +mem[59114] = 1939 +mem[5139] = 922190 +mask = 1X11X1X1X011X11111011111X011X00010X0 +mem[16307] = 28883 +mem[35549] = 1434246 +mem[63781] = 101884 +mem[56134] = 113928 +mem[24099] = 20077761 +mem[7516] = 5573416 +mem[59069] = 14919 +mask = 11110X010110X11011X011011101X0010101 +mem[43391] = 791798 +mem[2652] = 12659 +mem[4799] = 17430 +mem[62099] = 10386985 +mem[2180] = 55661090 +mask = 1110010XX101XX1011X000100101XX000010 +mem[20835] = 105254603 +mem[39463] = 940293735 +mem[50577] = 2537 +mem[14690] = 130220 +mem[23057] = 121136841 +mask = 1110010101X01110110X01X10110010111X0 +mem[18309] = 297206536 +mem[17182] = 45095 +mem[61572] = 826 +mem[44910] = 2788180 +mem[37318] = 25645 +mem[49915] = 233629 +mask = 1101X010011X1011010001000X000100001X +mem[35857] = 19517506 +mem[5684] = 8268861 +mem[43961] = 777 +mem[65296] = 4313 +mem[11847] = 639775290 +mem[3832] = 5094416 +mask = X101X11100101XXX00100X1X0101X0110X01 +mem[11009] = 156925 +mem[6286] = 290862 +mem[63205] = 985 +mem[26579] = 32557999 +mem[57238] = 5759116 +mem[40172] = 16031 +mask = 011X01X110111110110X1X1XX11000XX10X0 +mem[12977] = 53152 +mem[34861] = 12118 +mem[58473] = 13657 +mem[58199] = 5196811 +mask = 111X0101001X11001X000100X0X11XX1X000 +mem[7162] = 58695 +mem[35819] = 264552401 +mem[41789] = 30314 +mem[49377] = 191785 +mask = 1111001101101XX0X1X00X010001X00XXX10 +mem[2291] = 30592 +mem[63205] = 491496 +mem[38504] = 1049100484 +mem[34919] = 178729 +mem[25424] = 156 +mem[65520] = 58112582 +mem[52035] = 323124091 +mask = X1011101X111X1X01X1001XX01X0000X1111 +mem[33094] = 31397 +mem[51348] = 56754 +mem[14230] = 41266 +mem[20522] = 11648 +mask = 11X101111X1011101X0101X100X1X111X01X +mem[11136] = 3560556 +mem[5587] = 921 +mem[18309] = 67938806 +mask = 11100101X011X1X001001XX000001XX01001 +mem[4833] = 3160 +mem[25408] = 123351536 +mem[25049] = 109348838 +mem[63781] = 390880058 +mem[55179] = 25336 +mem[6968] = 758 +mask = 1X1X010110111X1001001000X0X011001001 +mem[53455] = 9337510 +mem[14234] = 60613906 +mem[27428] = 11014923 +mem[50788] = 476612064 +mem[35743] = 54469469 +mem[1614] = 123865983 +mask = X11110010110011011000X01110000X0X001 +mem[47883] = 31228 +mem[31214] = 64574504 +mem[16405] = 23878 +mem[60239] = 101342 +mem[16684] = 146627857 +mem[16663] = 650 +mask = 1111001100XXX100X10X10001000100X0XX0 +mem[48927] = 5082359 +mem[2881] = 1779 +mem[24736] = 2016486 +mem[39479] = 2018954 +mem[18818] = 225 +mem[31119] = 12745 +mem[63944] = 1033694 +mask = 1110X101101X0X0001000101X01000001X00 +mem[37512] = 43119 +mem[33449] = 14364 +mask = XX01010X1111X1101100X1010011X0111011 +mem[44289] = 10155 +mem[36861] = 484156 +mem[5649] = 6231 +mem[44588] = 13058 +mem[36130] = 117 +mask = 110111X11X111110X11X1010111001X00000 +mem[52268] = 501592648 +mem[5815] = 66091 +mem[41650] = 95926 +mem[59871] = 6758 +mem[51464] = 5743 +mem[60497] = 62281782 +mem[20522] = 93843022 +mask = X0111011001001001100X00110X01X111101 +mem[53275] = 17387 +mem[60055] = 118119 +mem[8006] = 136 +mem[31684] = 438174 +mask = 111100010X1X1110110X01101001X0000000 +mem[7140] = 3017 +mem[29078] = 38418489 +mem[63673] = 171084 +mem[22294] = 3837 +mem[63317] = 313 +mem[27563] = 52466 +mask = 1111X011011X11000100X000011011X10101 +mem[46366] = 3934 +mem[39437] = 100546 +mask = 1111X0X101100110X100X100000XX0X10001 +mem[39576] = 21930920 +mem[65424] = 462 +mem[56340] = 353590342 +mask = 111001X1001111001100XX000XX010010X11 +mem[55316] = 706671322 +mem[25591] = 518584 +mem[50729] = 2900209 +mem[33498] = 11876 +mem[31561] = 259813 +mem[35113] = 147880795 +mask = 110101011X1XX1X0X1001110X0X1110XX000 +mem[29355] = 625 +mem[37409] = 220996783 +mem[37711] = 135727391 +mem[37047] = 3660 +mem[46341] = 426315 +mem[15120] = 1754833 +mask = X110010XXXXX11X01100010X00X100010001 +mem[53073] = 1381843 +mem[13260] = 93739 +mem[37872] = 52 +mem[32740] = 3704961 +mem[59346] = 1171 +mem[29949] = 16961 +mask = 1111X01X01X01X00111X000101XX10100110 +mem[40895] = 8972 +mem[41295] = 54333696 +mem[20850] = 2653 +mem[19282] = 19093 +mem[38608] = 11892 +mem[48832] = 206906 +mem[20432] = 871 +mask = X111001101101010X10X1X0101100X1010X0 +mem[29949] = 23166498 +mem[1906] = 8837 +mem[49790] = 1479345 +mask = 11X10110011X1X110100X0X000100X0100X0 +mem[53057] = 6958067 +mem[56592] = 937 +mem[36056] = 511488563 +mem[59203] = 1751 +mem[37047] = 20461 +mem[46044] = 11961 +mask = 0X011111101X1X10X101X10XX001001X0011 +mem[2180] = 290 +mem[51448] = 1927 +mem[33875] = 617047 +mem[62545] = 38166 +mem[24159] = 769 +mem[56134] = 763869 +mask = 11100X0XXX111110X10011100111000X10X0 +mem[46115] = 74662 +mem[31913] = 7995 +mem[1663] = 3351 +mem[15242] = 7255 +mem[38592] = 1282670 +mem[52969] = 54696 +mem[6096] = 1276 +mask = 1XX101010X111X111X0X0001X01000X100X1 +mem[22073] = 58445318 +mem[24069] = 44324 +mask = 11110011X1101010110X000110X00000011X +mem[16663] = 24384890 +mem[2762] = 37315460 +mem[52499] = 215572 +mem[19346] = 51671 +mask = 1111001100X1010X01X1000X10101X00X0X0 +mem[35139] = 73247 +mem[8006] = 8172 +mem[1578] = 11860073 +mem[45896] = 947482 +mem[58045] = 28856 +mem[8032] = 225912010 +mask = 1X11X0110XXX11X0X1001000X0X111010010 +mem[34167] = 7412 +mem[33617] = 11192 +mem[37247] = 13040665 +mem[64827] = 57758603 +mem[5649] = 520014659 +mem[7105] = 1558987 +mask = 110101XX1010111111000X101111X0000001 +mem[3800] = 328348 +mem[60536] = 66209620 +mem[5063] = 2271 +mem[32395] = 133940 +mem[11737] = 5453 +mem[48512] = 94680 +mask = XX010X10X11110110100X100XX1101010X11 +mem[26620] = 2476136 +mem[33872] = 930 +mem[21275] = 17463 +mem[13265] = 3033 +mem[13058] = 1658898 +mem[40725] = 430 +mask = 110111111X0111101X00100100001001X0XX +mem[18233] = 8421 +mem[17436] = 31387 +mem[53222] = 67556 +mem[20521] = 1141367 +mem[54918] = 2596 +mem[40403] = 1004410657 +mask = 0X1X010110X111X0X11100X001000111101X +mem[17673] = 118390439 +mem[27333] = 7879 +mem[29078] = 15837725 +mask = 01011XX1XX1X10100101010000X101X0000X +mem[59493] = 6025045 +mem[16555] = 21344536 +mask = 110111111X1XXX101010110X001000000101 +mem[39637] = 233 +mem[36506] = 939031780 +mem[47242] = 33211645 +mem[6561] = 217613 +mask = 111101010111X111100X10011X111000X000 +mem[63673] = 3846623 +mem[56658] = 329423 +mem[38481] = 547857 +mask = X1X10X110XX011101100000111011X01000X +mem[48927] = 6384 +mem[43391] = 5514 +mem[21936] = 131847 +mem[43030] = 810434897 +mem[57830] = 35743 +mem[7640] = 305 +mask = 01X11111101110101101001010XXX11XXX1X +mem[60143] = 90582 +mem[32081] = 7673 +mem[14349] = 25972726 +mem[23840] = 86305185 +mem[48353] = 608866275 +mem[62103] = 22452 +mask = 1110XX01X0110100X1001101X01X0110010X +mem[28115] = 27314978 +mem[19040] = 136523686 +mem[62545] = 322784 +mem[35413] = 6136384 +mem[35902] = 77354799 +mem[9741] = 79081 +mem[63898] = 1698818 +mask = XX0X11111X1X10101101XX10111001X0X110 +mem[33891] = 16545 +mem[40774] = 92261 +mem[59203] = 15655 +mem[45590] = 36588183 +mask = 1111010100101110X100X10X1010010X0X00 +mem[48951] = 11761726 +mem[40080] = 61805 +mask = 11111X0100100X1XX10011X101X1X0X11000 +mem[63205] = 2654080 +mem[61251] = 6112 +mem[38917] = 3928 +mem[43961] = 887252 +mask = 1111X0X10X1001101100XX0011000X1X0100 +mem[44267] = 991 +mem[22054] = 129208 +mem[24736] = 2063224 +mask = 000111111011101011X10XX00X0100100111 +mem[35194] = 9210267 +mem[50934] = 1766913 +mem[10934] = 21495328 +mem[610] = 412419 +mem[36953] = 11943 +mask = 1X1X01010010111X11000000X11X00010000 +mem[28679] = 637124 +mem[37318] = 881 +mem[57422] = 2767596 +mask = 1X10X100X1111X1011000X11X1X11110X1X1 +mem[27363] = 25462469 +mem[31504] = 28338 +mem[44316] = 1809290 +mem[15190] = 7443 +mem[50765] = 15365 +mem[40403] = 544499158 +mask = 0110011110XX1110110111X00110X0X1110X +mem[213] = 2945928 +mem[14529] = 34489340 +mem[24633] = 2265142 +mem[14164] = 42798 +mask = X101X1X110X1111011XX10011XX0110100X0 +mem[2881] = 253851450 +mem[38504] = 998965 +mem[49657] = 570454 +mem[971] = 41 +mask = X11101011011X11X110XX1011111X000XX11 +mem[29349] = 1319294 +mem[14166] = 116618287 +mem[53112] = 289785 +mem[55957] = 293394 +mem[4582] = 254866 +mem[18343] = 57127617 +mem[10149] = 15993396 +mask = 1011010X011111X11X01000101100001X001 +mem[21561] = 112597 +mem[13051] = 29108 +mem[12802] = 175602144 +mem[478] = 15086994 +mem[53889] = 55877423 +mem[46492] = 62745 +mem[48353] = 1279694 +mask = 1X1X010X1X110100X1X01101000000X0100X +mem[42565] = 233433 +mem[33409] = 387972295 +mask = 0110010X0110110X1X0X0X10100XX1110001 +mem[20392] = 423739412 +mem[17500] = 362907 +mem[36030] = 53419432 +mem[19860] = 15602203 +mask = 11X10101XX1X111X1X000X00X11000000000 +mem[64796] = 198944 +mem[21525] = 3974377 +mem[11737] = 136209878 +mem[54225] = 444434 +mask = X10111X1XX1XX1101X1010X01000100100X1 +mem[26125] = 490282156 +mem[7498] = 516 +mask = 1111X10X001X11101X00X101X10X1101000X +mem[59368] = 1003333 +mem[5649] = 730126 +mask = 1X0111X1111X01X011100X000X11X1X11X11 +mem[17709] = 6746 +mem[32839] = 3345828 +mask = 11XX0110011X1111010011101101010X0011 +mem[28541] = 60604 +mem[42817] = 1758 +mem[25224] = 902483 +mem[36265] = 120914 +mem[32519] = 5399 +mem[36622] = 834098 +mask = X1X1110101110XX011101110010010011101 +mem[32388] = 1033759874 +mem[63976] = 4606 +mem[64485] = 25543800 +mem[61692] = 64754077 +mem[6489] = 851 +mem[57647] = 8936 +mem[39558] = 10983494 +mask = XXX111111000X010100X0101X100100X0010 +mem[16499] = 450156060 +mem[28412] = 430144217 +mem[6561] = 786352 +mask = 100X0100111111101X001000001XX01X0X01 +mem[32046] = 24306 +mem[48960] = 26990757 +mem[39206] = 4884 +mask = 111X01110X101X101X001100000100011100 +mem[1131] = 1269 +mem[23819] = 14028 +mem[53267] = 104931 +mask = X1010010X1111X1101000X1010010X10XX11 +mem[23882] = 3644 +mem[51931] = 238578 +mem[4752] = 912 +mem[23830] = 1956722 +mem[27068] = 823297352 +mask = 0X0X1101111X0110X1100111010100001100 +mem[37047] = 3669952 +mem[9844] = 63716241 +mem[34635] = 897860 +mem[25683] = 1353 +mem[29342] = 1769 +mem[55576] = 400091397 +mask = X10101011X01XX101XX111011XX011110001 +mem[51710] = 821128099 +mem[33947] = 237866140 +mem[23402] = 1725292 +mem[51603] = 3384 +mem[610] = 21940 +mask = 1111001X01101110010X100101X111X0X000 +mem[62557] = 7498 +mem[1254] = 599 +mem[19803] = 2675 +mask = 110111X11X11111011101X10X1X000X1X0XX +mem[2762] = 258673 +mem[60042] = 20606346 +mem[3212] = 13178507 +mem[8887] = 412915 +mem[18462] = 619 +mem[10311] = 7584 +mem[63816] = 24680261 +mask = 1111011X01101X1XX100000000000X01X000 +mem[29821] = 883 +mem[57154] = 5765093 +mem[35745] = 73 +mask = 101XXX1101011100010010010001010XX111 +mem[4607] = 8269571 +mem[14234] = 6849 +mem[64727] = 3522 +mask = 0X011XX1X01111X0010101X011000110X011 +mem[50853] = 6689303 +mem[26913] = 129493 +mem[8439] = 8784 +mem[42377] = 5663270 +mem[64796] = 175 +mask = 111X001101X01X1011X01111110110110110 +mem[7758] = 28452 +mem[34374] = 559 +mem[3328] = 5312 +mem[46467] = 235850961 +mask = 111101110X1011X0110000010X0XX000100X +mem[17500] = 6530 +mem[16930] = 11847064 +mem[7140] = 188556307 +mem[6232] = 102869047 +mem[39269] = 51308 +mem[28924] = 4828 +mask = 11X10111001011101100X0100000011XX110 +mem[32674] = 684 +mem[12892] = 156288 +mem[21192] = 46944 +mem[48554] = 998041 +mem[18453] = 136061 +mem[22294] = 39009055 +mem[12802] = 63780 +mask = 11110XX1011011101X0X0000001000100X00 +mem[61692] = 1273 +mem[56716] = 12434142 +mem[31684] = 13133132 +mem[16545] = 2489415 +mem[39483] = 1048235210 +mask = 01X1X1X1101X11X011X1010001X101110010 +mem[53092] = 3823 +mem[47384] = 4573 +mem[50275] = 284570347 +mem[1129] = 28366135 +mask = 1X110101X01110111X010X0000000X0XX001 +mem[22024] = 945785 +mem[55321] = 56363 +mem[28412] = 3465 \ No newline at end of file diff --git a/tests/aoc-2020/input/day15.txt b/tests/aoc-2020/input/day15.txt new file mode 100644 index 00000000..408f5266 --- /dev/null +++ b/tests/aoc-2020/input/day15.txt @@ -0,0 +1 @@ +1,20,8,12,0,14 \ No newline at end of file diff --git a/tests/aoc-2020/input/day16.txt b/tests/aoc-2020/input/day16.txt new file mode 100644 index 00000000..c88e3128 --- /dev/null +++ b/tests/aoc-2020/input/day16.txt @@ -0,0 +1,265 @@ +departure location: 25-80 or 90-961 +departure station: 41-133 or 148-968 +departure platform: 48-425 or 451-952 +departure track: 25-371 or 384-966 +departure date: 49-531 or 546-973 +departure time: 45-641 or 656-954 +arrival location: 43-357 or 364-969 +arrival station: 40-669 or 689-954 +arrival platform: 40-550 or 570-956 +arrival track: 49-854 or 863-953 +class: 48-601 or 614-964 +duration: 27-698 or 715-962 +price: 38-781 or 800-970 +route: 47-824 or 842-965 +row: 45-219 or 241-955 +seat: 47-388 or 401-954 +train: 42-906 or 919-965 +type: 40-726 or 733-955 +wagon: 27-161 or 174-974 +zone: 48-103 or 110-954 + +your ticket: +181,131,61,67,151,59,113,101,79,53,71,193,179,103,149,157,127,97,73,191 + +nearby tickets: +522,420,365,200,585,386,904,206,275,61,185,273,550,686,352,338,294,695,503,718 +129,758,494,886,213,178,94,496,423,352,51,863,498,925,653,505,403,314,619,241 +125,766,123,196,205,847,379,480,268,887,546,62,114,209,766,248,501,696,575,76 +183,872,520,282,717,522,776,722,94,717,100,161,208,949,945,255,853,483,117,145 +283,101,290,751,617,334,885,633,767,417,733,887,192,595,62,329,688,187,736,458 +635,466,583,585,733,511,754,106,513,256,347,506,180,403,938,126,886,868,262,481 +895,166,885,272,621,205,739,724,809,777,890,345,303,764,347,253,320,114,750,517 +599,726,584,582,249,347,257,277,320,493,820,147,179,659,271,249,924,615,577,882 +821,422,630,696,938,361,487,895,692,936,160,691,155,332,195,928,357,100,62,122 +770,506,110,123,344,260,114,800,507,889,385,629,884,380,132,328,615,73,245,940 +117,78,800,219,292,527,468,844,872,366,348,410,770,927,314,586,130,621,573,610 +938,123,250,283,724,249,699,939,460,247,334,718,174,483,92,923,417,283,773,195 +698,758,174,364,898,871,74,417,770,203,763,889,510,943,58,425,812,519,63,170 +868,662,900,111,659,455,902,903,803,591,810,173,52,906,215,151,758,503,191,593 +657,161,748,66,331,802,635,411,820,815,746,939,665,923,501,800,53,596,816,680 +585,341,303,495,618,803,420,70,804,550,772,406,255,301,532,282,455,370,76,304 +814,743,411,368,737,868,900,881,418,127,201,407,419,271,321,848,739,24,120,151 +77,338,664,350,181,475,746,639,200,570,619,245,464,908,595,759,663,939,900,151 +639,632,769,8,111,509,155,588,865,324,881,306,587,845,718,205,270,526,265,780 +91,417,286,304,331,628,506,206,492,809,210,747,645,249,809,74,527,577,211,945 +617,739,197,877,774,938,660,747,768,424,695,154,634,324,507,729,503,812,264,895 +50,766,880,571,936,928,80,936,328,178,347,151,922,700,74,617,751,574,628,639 +548,267,850,815,593,627,115,596,764,466,313,68,128,103,263,876,728,282,769,463 +303,906,720,333,348,5,936,191,779,315,216,103,345,411,502,881,311,271,508,62 +895,801,411,804,724,636,118,306,495,632,593,863,729,894,128,270,466,500,510,179 +103,479,250,72,380,824,304,91,184,111,844,62,939,279,209,593,487,492,56,243 +902,617,186,938,483,842,451,213,598,330,241,266,321,854,866,57,695,631,521,545 +745,451,478,634,808,880,784,332,190,586,479,311,472,662,691,813,334,866,264,593 +161,938,725,894,889,285,895,766,78,894,531,780,129,338,987,593,100,813,457,110 +73,317,871,548,760,401,652,352,454,313,418,451,264,71,470,371,323,803,198,899 +417,749,550,177,771,944,813,520,153,760,486,518,488,992,151,753,298,261,280,191 +620,174,771,213,286,121,125,518,616,369,423,243,295,429,268,600,905,266,656,739 +252,93,948,658,473,312,757,314,364,311,882,247,761,500,914,772,690,101,694,875 +458,193,481,309,665,640,491,170,871,470,944,601,198,417,249,620,921,123,666,897 +516,932,506,619,433,726,863,103,762,459,843,194,690,53,573,77,69,158,823,505 +420,773,72,144,928,894,811,333,663,501,694,268,54,413,357,346,868,780,124,261 +488,739,348,635,516,4,269,297,91,201,882,470,460,920,875,418,91,250,277,501 +297,659,824,367,667,457,859,693,198,193,206,292,422,314,514,498,425,127,669,345 +472,466,246,201,755,85,848,804,873,357,800,598,763,592,884,201,496,574,573,264 +92,64,813,65,474,573,505,722,771,188,419,126,867,771,438,720,321,466,588,408 +900,816,866,636,814,317,316,846,9,205,252,54,334,275,181,288,252,691,667,286 +452,253,247,371,469,73,591,51,95,275,50,209,578,725,268,94,192,193,620,383 +948,941,695,939,787,923,869,805,206,267,273,197,820,925,263,101,697,76,219,870 +873,615,477,202,167,202,766,744,823,342,263,94,199,303,804,775,812,174,813,454 +98,319,284,485,209,457,251,866,549,643,183,178,582,866,278,189,592,694,320,943 +218,156,244,468,850,148,344,311,978,116,576,112,849,507,332,752,581,627,405,213 +484,96,517,74,104,253,326,886,628,882,116,526,803,667,770,80,324,306,471,289 +853,61,845,594,302,351,278,819,194,640,306,574,626,247,361,641,504,571,889,801 +405,809,293,243,879,819,215,73,184,695,462,127,198,102,860,813,204,615,245,804 +773,900,854,290,99,773,68,352,150,103,929,614,420,938,585,79,264,676,317,202 +636,666,721,446,67,571,119,97,927,742,262,411,155,591,658,636,747,53,348,201 +478,274,625,58,743,702,206,324,420,762,774,387,890,308,765,597,626,354,867,593 +357,356,290,771,944,758,581,638,701,781,461,131,406,571,482,764,158,187,121,411 +256,463,720,474,753,370,262,261,634,503,474,708,94,421,848,752,341,574,601,818 +202,922,550,670,155,100,275,57,418,769,115,807,768,523,664,579,343,299,407,151 +619,744,477,991,349,179,113,572,583,522,64,938,821,864,410,735,416,879,850,198 +95,728,725,928,588,531,129,578,451,520,722,177,769,206,97,197,660,507,945,127 +344,212,417,890,204,576,298,633,308,524,895,599,246,766,252,638,426,815,519,114 +461,477,130,369,202,520,298,920,505,542,892,203,890,176,487,813,767,640,387,115 +65,73,99,691,773,815,882,243,904,325,719,818,102,369,768,293,407,272,660,9 +204,524,290,761,484,504,351,571,419,778,632,926,577,266,351,735,715,139,808,807 +523,455,721,637,64,848,474,294,716,586,505,274,357,308,456,441,269,724,628,347 +178,666,880,151,94,842,891,591,753,404,885,618,720,86,195,65,281,110,949,851 +121,56,421,856,261,844,638,196,767,847,481,633,751,943,596,385,924,947,810,269 +318,205,415,334,118,571,133,277,323,935,321,278,209,874,184,173,323,176,461,365 +345,735,496,716,54,594,581,736,885,186,897,505,512,159,823,935,13,298,93,472 +724,366,640,207,316,383,632,656,930,493,153,474,905,65,923,765,207,520,339,177 +386,992,925,733,695,287,198,355,66,157,949,775,899,209,200,758,303,94,365,195 +323,186,282,352,638,448,940,181,50,60,473,71,259,308,191,870,293,854,320,739 +90,807,76,998,744,297,315,287,183,281,623,156,275,452,776,657,294,241,589,133 +475,401,508,924,615,206,195,727,616,500,845,131,180,742,577,657,275,118,600,615 +484,890,62,723,477,333,286,668,51,658,62,536,296,807,755,821,931,804,869,639 +351,411,745,355,253,522,944,719,301,813,510,330,69,513,171,101,929,469,347,477 +721,269,206,807,453,897,823,150,200,547,280,70,853,179,839,124,806,586,256,272 +186,942,18,531,587,119,722,906,93,876,353,210,344,496,364,847,150,750,946,802 +630,424,129,808,102,290,742,417,110,580,301,212,804,527,345,94,711,148,633,197 +641,666,640,110,508,351,110,100,345,263,80,77,204,537,751,902,876,691,455,201 +800,939,498,271,122,736,147,615,78,325,300,156,851,242,599,845,946,481,131,717 +118,188,882,349,531,341,200,279,63,776,724,174,7,628,245,574,150,864,148,750 +245,461,210,366,364,461,368,75,669,341,595,127,633,729,619,580,755,938,416,573 +779,191,659,628,259,525,488,735,883,85,185,506,640,371,735,201,354,627,494,846 +616,194,482,589,249,630,278,781,404,470,660,127,403,751,894,740,308,539,739,488 +823,645,507,371,54,733,60,590,271,662,657,508,187,716,301,131,454,272,214,65 +751,522,321,526,85,423,871,656,806,876,190,591,352,211,150,506,816,248,150,522 +821,177,689,490,656,850,390,279,194,127,302,824,412,690,75,186,817,284,661,279 +154,243,126,735,180,926,823,622,692,741,940,778,620,984,328,499,281,779,531,743 +458,276,193,508,206,414,60,770,183,150,893,813,475,121,605,66,485,99,800,885 +621,919,59,65,360,182,717,371,824,919,764,931,341,757,58,639,263,91,205,632 +325,59,161,515,125,508,571,760,351,127,20,317,666,943,804,493,816,177,482,929 +723,476,740,844,701,622,736,806,193,658,119,290,292,54,346,851,756,473,818,51 +693,527,6,932,413,694,103,282,291,809,887,721,665,894,863,306,129,587,338,157 +873,872,474,404,716,289,322,939,474,371,601,199,776,66,919,499,597,879,342,426 +870,570,79,607,411,405,627,757,863,515,892,944,193,339,202,872,926,288,178,596 +79,288,801,942,859,657,801,902,333,186,600,875,497,476,365,878,487,578,344,289 +751,723,919,209,185,586,758,534,310,631,211,810,57,940,158,157,159,254,150,71 +516,823,185,526,75,60,949,295,580,505,254,128,504,104,617,923,694,949,308,334 +758,574,495,868,338,588,342,491,355,601,323,500,497,337,791,802,519,204,745,905 +175,623,271,744,419,306,575,501,720,868,20,202,464,52,197,737,627,199,423,824 +634,100,948,656,244,407,905,178,579,292,800,177,191,315,728,723,621,71,596,889 +621,422,274,770,637,648,601,80,484,53,216,332,659,318,455,98,919,211,694,215 +583,156,348,935,511,773,193,69,112,383,719,94,407,299,179,716,853,354,370,504 +486,761,597,531,763,845,581,97,406,849,526,257,8,516,370,849,410,884,628,265 +723,176,895,457,596,525,366,743,897,371,496,188,320,364,302,57,807,296,986,883 +937,750,75,110,195,904,275,668,805,388,419,468,576,806,476,637,208,115,61,911 +893,672,306,178,898,697,330,407,663,937,296,770,762,364,905,322,204,114,252,250 +732,402,298,210,277,920,343,577,388,598,591,55,343,310,116,153,265,482,212,512 +351,937,889,70,491,269,321,693,594,256,366,331,219,250,196,487,876,632,732,940 +270,301,334,618,948,763,363,317,571,632,474,944,621,50,810,692,843,179,334,472 +822,498,933,599,292,407,873,692,617,404,692,697,882,718,926,770,592,413,980,693 +388,746,726,404,767,268,849,458,13,348,451,364,596,882,188,352,581,497,347,935 +846,521,193,813,158,519,840,386,277,735,253,179,116,599,388,850,812,628,599,940 +814,159,524,241,767,453,472,113,133,150,178,175,591,214,52,648,621,78,406,64 +508,890,843,269,697,508,604,905,666,516,947,929,891,926,283,68,806,406,494,454 +177,590,53,846,79,915,320,313,579,194,75,506,452,190,896,71,69,776,885,201 +756,713,402,103,467,409,421,424,933,921,55,345,418,753,454,148,121,735,206,402 +185,470,762,215,624,212,742,206,734,508,22,52,499,471,348,513,821,801,410,599 +522,874,750,368,588,767,308,486,256,75,510,720,275,794,324,345,178,500,656,71 +123,364,124,276,549,937,194,131,877,175,623,981,251,404,657,181,745,738,779,507 +734,813,388,872,887,461,78,469,411,878,209,445,460,320,847,851,809,261,522,274 +526,181,582,788,216,582,726,619,129,183,254,59,779,58,307,522,253,350,689,101 +985,367,318,290,937,500,509,115,91,310,326,663,251,415,255,881,368,54,284,778 +621,874,520,886,366,493,337,768,863,452,490,297,504,520,683,748,299,588,53,451 +774,854,633,131,780,55,285,419,322,91,618,178,550,596,501,690,698,666,149,783 +693,148,346,527,521,619,718,413,322,305,717,633,900,499,595,9,326,313,320,102 +809,497,771,94,192,494,809,9,601,92,925,638,695,311,258,411,133,629,940,572 +317,293,949,816,740,727,738,755,927,90,285,824,290,188,898,218,810,583,261,206 +500,333,294,501,620,253,212,774,266,156,528,812,178,339,312,884,383,264,638,401 +871,199,734,387,406,77,817,195,124,258,621,571,299,202,622,250,761,712,198,207 +260,313,205,383,218,460,124,812,843,626,921,193,531,495,254,157,927,351,491,388 +213,943,410,666,925,939,370,150,404,443,324,878,55,876,930,887,940,742,306,510 +529,333,892,801,598,294,777,323,200,263,934,219,189,697,288,51,742,996,212,637 +658,417,922,899,891,119,458,121,492,142,263,76,813,91,477,811,56,528,773,823 +805,630,201,465,599,345,513,256,921,267,63,410,631,866,382,498,926,499,465,634 +274,768,414,457,156,516,898,273,579,490,929,744,932,141,251,697,587,130,933,933 +182,410,530,516,366,329,273,280,696,736,277,478,719,62,258,637,620,280,130,862 +271,272,505,148,764,163,512,128,871,112,921,745,112,817,622,291,759,129,195,314 +349,345,901,365,283,621,53,897,67,345,287,985,740,822,898,274,80,583,116,894 +615,503,847,204,309,637,467,943,891,491,879,408,781,77,414,98,331,162,598,760 +321,332,601,244,920,765,523,891,469,471,263,183,119,521,212,854,600,817,9,750 +719,773,473,201,71,341,411,824,479,715,453,766,188,507,582,175,982,264,300,737 +745,899,734,922,526,514,453,433,863,695,364,490,661,766,820,194,187,403,547,460 +455,93,595,53,467,885,213,948,287,744,931,632,134,92,405,634,192,264,313,641 +669,816,895,217,335,149,665,260,842,69,872,328,123,347,115,863,285,316,978,370 +304,813,758,890,666,587,557,208,546,716,259,325,894,201,287,68,258,627,497,723 +69,411,686,252,368,630,319,744,459,482,425,932,624,638,206,261,813,528,691,466 +258,279,169,128,110,263,496,617,264,842,531,852,256,332,625,481,596,331,867,114 +757,669,729,669,341,277,586,122,668,98,349,384,476,767,752,571,573,510,338,665 +112,630,387,904,134,96,494,302,504,750,366,276,512,484,334,120,630,582,809,615 +756,411,470,474,755,573,583,517,599,739,206,589,818,811,564,531,337,854,937,585 +521,68,848,466,312,877,91,467,753,594,201,514,846,575,458,282,173,694,96,901 +736,344,884,844,385,214,906,355,635,900,656,872,324,550,106,470,906,948,60,503 +570,691,699,748,342,462,193,308,290,632,55,716,472,847,865,415,759,503,69,367 +77,279,295,455,726,519,727,740,524,627,734,94,579,589,752,324,904,274,570,772 +571,79,156,764,505,946,150,358,416,920,867,284,939,725,204,121,249,190,265,349 +811,921,924,749,668,534,205,631,548,889,745,280,853,546,948,158,477,578,823,341 +521,631,929,772,495,742,266,710,864,218,770,176,66,94,635,875,767,199,510,949 +578,121,469,875,132,422,614,495,246,593,460,548,745,338,919,709,817,817,334,774 +125,124,546,493,746,91,105,929,769,101,848,800,475,716,521,849,626,243,301,53 +402,341,254,361,76,365,255,345,877,635,741,156,940,755,470,513,472,263,150,883 +595,122,202,107,242,129,755,120,354,767,251,740,334,749,212,820,823,822,504,284 +66,196,876,451,634,288,257,83,498,75,738,848,300,637,721,403,121,364,213,906 +770,314,890,591,865,456,661,250,306,328,211,640,111,74,601,989,531,625,726,903 +768,883,524,578,493,866,987,845,945,595,266,292,479,366,633,724,640,876,697,903 +52,413,423,319,510,503,423,742,481,627,895,197,169,251,193,454,893,174,150,822 +599,425,51,648,364,752,246,204,194,735,937,746,353,500,55,656,518,598,476,592 +637,722,845,634,309,656,818,151,620,251,477,698,530,73,771,721,667,646,275,304 +201,218,473,760,723,178,580,373,512,755,410,348,473,69,906,753,343,847,618,813 +596,582,504,592,949,269,77,809,274,56,308,478,865,358,386,486,62,286,76,323 +347,874,498,355,816,881,738,276,987,386,248,927,516,800,661,583,412,132,262,337 +314,384,474,464,55,881,527,601,749,928,405,695,672,484,631,250,207,272,244,218 +625,119,769,461,280,109,477,297,738,203,342,495,314,150,496,401,889,697,481,180 +79,323,404,470,596,196,473,403,627,454,323,348,689,736,767,749,810,117,660,654 +522,407,814,81,408,735,454,495,182,471,691,126,949,868,597,342,853,408,733,350 +663,980,894,64,62,808,719,112,352,326,69,311,660,303,657,246,901,348,324,530 +947,267,153,893,186,418,415,524,211,102,668,595,774,343,887,94,666,427,187,490 +183,802,205,154,18,926,626,158,771,629,624,270,849,408,589,577,344,332,317,733 +875,95,423,853,588,466,58,570,120,630,599,687,484,53,930,110,96,749,748,657 +257,420,266,501,659,662,641,401,464,884,69,697,269,124,87,808,291,814,160,666 +320,942,186,942,420,76,627,319,289,634,183,132,56,52,990,201,923,266,276,549 +478,310,453,486,496,210,667,983,451,202,523,742,336,581,267,735,56,501,925,313 +487,733,289,334,672,456,570,67,385,402,853,528,501,656,454,809,200,412,760,761 +619,161,582,407,485,487,925,846,128,113,590,600,159,878,925,203,594,728,387,733 +177,492,111,97,541,111,721,414,696,96,187,198,875,636,413,496,90,506,634,622 +661,584,123,187,297,718,263,340,421,297,364,580,735,642,737,477,920,491,297,726 +509,310,781,717,285,182,773,320,595,619,723,583,718,998,295,905,184,188,118,760 +277,247,897,120,365,219,252,269,464,54,291,628,270,887,926,315,0,318,196,753 +325,664,63,526,283,632,761,326,185,54,252,584,810,60,501,180,775,505,201,104 +203,585,76,889,351,53,672,123,750,884,452,871,262,526,344,368,864,252,483,174 +204,496,202,186,276,850,130,148,730,60,722,364,852,823,131,692,185,519,528,927 +473,845,807,904,330,944,172,294,425,203,760,494,754,371,371,756,385,158,203,815 +886,261,804,457,876,680,903,323,386,79,357,505,689,192,889,546,293,462,458,697 +490,122,336,628,462,717,271,749,128,873,947,219,51,180,368,928,647,622,809,758 +209,301,693,268,402,205,850,511,156,641,251,343,328,757,850,179,669,592,125,727 +765,581,663,218,634,689,663,209,898,527,151,86,508,852,843,571,630,345,824,284 +156,660,219,880,516,529,487,128,284,630,211,729,314,589,621,886,114,254,502,98 +756,634,149,120,739,975,131,479,300,515,615,129,192,762,130,767,474,371,216,175 +129,251,219,853,214,580,210,137,325,770,305,669,627,58,496,295,324,524,311,112 +490,466,479,664,593,176,808,587,876,731,866,623,350,333,298,284,585,932,258,657 +206,488,461,162,457,124,212,853,802,743,126,342,583,313,576,339,870,478,940,80 +906,640,942,330,90,159,317,424,329,801,482,153,697,525,891,697,73,724,191,359 +401,313,878,294,384,531,917,506,156,369,622,766,54,329,280,850,71,341,938,668 +326,495,321,669,756,882,775,664,849,932,387,354,823,515,817,132,15,776,64,942 +474,404,659,250,496,614,631,528,639,820,847,259,930,93,661,136,581,582,689,884 +97,413,460,570,151,113,942,465,576,846,574,301,101,300,133,255,744,347,477,706 +423,530,500,251,600,504,899,767,751,735,425,407,747,292,135,322,843,424,819,757 +286,499,269,402,495,405,451,690,69,92,156,261,709,110,349,616,550,347,276,667 +157,717,150,880,805,484,178,615,949,872,622,653,59,870,473,657,694,696,818,298 +663,341,366,811,71,627,211,459,633,578,501,920,658,893,249,525,996,812,76,888 +413,863,278,717,728,369,800,626,871,402,842,75,175,501,724,641,774,206,756,882 +129,112,343,574,667,484,889,681,875,588,938,285,470,337,885,160,849,309,310,549 +760,300,802,284,624,847,266,760,499,95,98,106,212,480,667,260,409,325,744,503 +344,851,928,694,482,218,439,263,890,810,482,341,771,570,949,938,773,268,885,547 +246,512,591,190,740,357,545,904,851,65,581,507,574,803,336,326,346,803,249,475 +588,816,178,885,253,757,334,158,686,810,527,200,314,451,97,126,493,583,668,935 +355,589,498,126,182,264,734,304,890,487,919,999,297,346,928,876,531,948,633,420 +818,930,402,526,854,271,408,948,748,473,759,297,722,715,290,56,627,382,330,419 +128,822,619,196,869,802,697,183,405,384,202,470,209,341,712,57,322,346,846,285 +97,844,819,150,495,270,904,508,218,573,458,120,823,167,658,406,938,772,772,208 +578,350,932,936,268,464,807,258,598,706,766,66,250,265,878,319,741,388,365,574 +600,478,897,475,473,899,586,822,738,720,202,598,156,522,325,683,769,254,124,112 +519,843,850,384,177,146,157,122,64,124,871,514,895,779,157,808,346,286,244,124 +498,775,75,852,571,249,467,249,692,816,621,620,276,184,423,369,848,547,747,85 +124,938,457,773,644,854,256,822,60,480,317,76,504,751,751,530,781,285,764,323 +801,781,110,354,918,411,633,752,583,335,668,504,803,118,482,199,58,498,756,456 +294,820,600,545,257,176,186,262,482,125,893,241,662,747,352,853,324,250,592,253 +698,307,745,303,411,249,356,154,737,282,736,374,124,751,667,808,665,195,625,299 +696,60,778,736,617,817,871,981,578,384,202,270,70,295,351,852,346,248,318,339 +204,499,635,287,125,308,75,863,189,675,155,417,353,547,319,219,769,111,468,292 +249,624,59,701,283,256,280,280,293,217,414,407,419,262,127,516,872,866,667,620 +570,735,944,728,615,467,546,122,763,356,50,214,515,265,530,748,596,256,66,635 +98,161,525,69,583,663,112,653,599,423,527,817,741,778,454,664,284,664,872,525 +803,781,760,259,56,520,666,244,724,821,719,9,721,719,813,618,816,744,941,248 +869,923,312,388,937,213,86,319,770,743,693,847,283,469,806,419,947,186,279,513 +453,340,342,746,245,284,339,847,214,597,692,845,598,244,452,114,139,854,752,62 +757,186,207,250,510,151,928,256,419,757,690,321,824,127,306,823,199,630,874,828 +270,127,339,311,70,349,513,458,286,996,305,721,152,473,570,161,460,299,356,261 +411,286,852,916,763,854,412,312,842,113,345,258,289,346,869,256,453,929,468,161 +462,120,847,638,868,316,583,404,403,168,193,175,213,721,184,349,364,217,775,880 +933,266,195,584,902,322,338,930,987,494,306,309,182,150,421,870,307,100,761,304 +744,515,822,903,633,639,883,257,945,943,666,156,353,878,155,198,518,930,707,753 \ No newline at end of file diff --git a/tests/aoc-2020/input/day17.txt b/tests/aoc-2020/input/day17.txt new file mode 100644 index 00000000..f215d035 --- /dev/null +++ b/tests/aoc-2020/input/day17.txt @@ -0,0 +1,8 @@ +.#.#.#.. +..#....# +#####..# +#####..# +#####..# +###..#.# +#..##.## +#.#.#### \ No newline at end of file diff --git a/tests/aoc-2020/input/day18.txt b/tests/aoc-2020/input/day18.txt new file mode 100644 index 00000000..9ed1b8c1 --- /dev/null +++ b/tests/aoc-2020/input/day18.txt @@ -0,0 +1,374 @@ +(8 * (6 * 8 + 3) * 9 * 9 * 8) * 2 +4 + (9 * (8 + 9 + 7 + 5 + 2) * (4 + 3 + 2 + 9 + 5 * 7)) * 2 +(7 * 8 + 6 * 3) * 3 * 2 * ((5 + 7 * 8 * 8) * (9 + 6 * 9 * 7 + 6 * 7) + 8 + (7 + 2 + 3 + 7 * 5 * 5) * (5 + 8) + 5) * 6 +4 * 9 * (6 + 7 + 6 + 5 + 7 + (4 * 6 + 5)) + 9 + (4 * 2 * 6) + 2 +5 * ((3 * 2 + 2 * 7) + 9 * 6) + (6 * (5 * 4 + 4 * 2 * 3 + 9) + 8 * (4 * 4) * 7 * 2) + (9 * 7 + 5 * 4) +4 + (8 + 9 * 5) + 5 + 9 + 6 + 2 +(4 + 4 * 2 + 2 + 3) + (9 * 7 * 9) + 2 * 9 + 9 * 5 +6 + (9 + 4) + 4 + 6 * 7 * 5 +4 * (8 * (4 + 4 + 8 * 7 * 6 + 8) * 8 * 9 + 7 * 7) * 8 + 2 * 9 + (5 * 7 + 3 + (8 * 8 * 3 + 3 + 4) * (8 * 5 + 4)) +(7 + 4 + 6) * 6 * 3 * 6 * 8 + 4 +3 + (7 * (4 * 3 + 7 * 8 + 3 + 3) * 8) + (7 + 9 + 4 + 3 + (4 * 7) * 5) + (3 + 8) + 2 + 3 +4 + (9 + (8 * 3 * 8 * 6 * 4 * 9) + (5 * 4 + 5 + 8 + 5) + (7 * 8 + 3 * 4 + 8)) * 9 + 7 * 9 +7 + (2 + 8 + (7 * 6 * 8 + 6) * 8) * 9 + (5 * (9 * 6)) +(9 * (6 + 2 * 3 * 9 + 7 + 5) * 9 + (6 + 6 * 9 * 6)) * 6 + 8 * 8 + 2 * 4 +(5 * (7 * 9 + 8 * 2 + 5 * 4) + (6 + 7 + 6 + 9) + (5 + 3 + 6 + 9 * 7) + 7 + (4 + 9 + 2 * 3 * 4 + 5)) * 2 * 8 * (2 * 9 * (8 * 5 + 3 * 8 + 5)) + (5 + 4 * 4 * 2) * 2 +9 * (9 * 2 * 3) +(7 * 8 * (6 * 4) + 8) * 4 + (3 * (9 * 4 + 7 * 6 * 3 + 9)) + 2 + 5 +(6 + (4 * 6 + 8 * 9)) * 6 +9 + 5 * (9 + 6 + (9 + 7 * 8 + 2 * 9) * (4 + 6 * 5 * 8 * 2) + 2 * 8) * 8 * (9 + 5 * (4 * 9) * 3 + 3 + (4 * 2)) +2 + (6 * 8 + 6) * 8 * (5 + 2) +6 + 8 + 8 + (9 * 8 + 2 * 4 + 4 + 2) * 2 * 3 +((5 + 5) + 2 + (7 * 2)) + 8 * 5 +((8 * 9 * 5 * 7 + 3) * 8 + 4 * 5) * 2 + 7 + 9 + (6 * 5 + 7 + 2 * 6 * (4 * 9 + 5 + 2)) + (7 + 2 * 4 + (9 * 3 + 6 + 6 * 7 + 6) + (9 * 6 * 2 + 3 + 5) * 4) +3 + (2 + 7 * (5 + 2 + 8 * 5) * 7 * 7 * 3) * 9 * 4 + 3 * 8 +(6 * 3) * (2 + 4 * 5 + 5 * 3) +5 * (2 * 2 + 6 * 2 * 2) + 5 * 6 * 4 + (9 * 5 * (5 * 4)) +3 + 6 * 2 * 6 + 8 * 9 +5 + 4 * (2 + (7 + 2 * 8 + 5 + 9 * 7)) * 8 + (2 * (6 * 3 * 3) + (6 * 5) * 8 * 9) +7 + (2 + 9 * 2 + (2 + 4 + 8 * 4)) * 4 * 3 * (8 * 4 * (4 + 5 + 8) * 5 + 3) +8 + ((8 * 3) + 3 * 7 + 6 + 8) * 4 + 6 * 6 +2 * (4 + 9 * 8 * 8 * 3 + 9) + 9 * (8 + 9 * (5 * 4 * 4 + 9) + (6 * 2 * 6 * 3 + 9 + 5) + 3 + 3) +((7 * 5 + 3) + 7 * 5) + 4 * 2 * 7 + 5 + 6 +4 + 9 * (6 * 6 * 4) + (7 + 6) * (3 * 8 + 3 * 6) +(7 + 5 * 6 * 8 * (7 + 4 * 5)) + 9 * 6 + 2 + 7 +4 * 3 * 4 * (2 + 6 + 6 + 2 + 6) + 8 * (6 + 6 * 3 * 2 * 6) +4 * 6 * 2 * (9 + 4) +4 * 3 * 6 + 9 + (3 + 5 * 9 * 3 + 3) * (8 * 3 * 7) +((6 * 7 * 9) + 2 * 5 * 4 * 8) * ((3 + 4 + 6) * 3 * 3) * 8 + ((3 * 8 + 9 * 5 + 6 + 8) * 2) +4 * 6 + 3 * 6 + 6 * (4 + 7 + (8 + 4 * 5 + 4) * 6) +2 + (6 + (5 + 8 + 4 * 5 * 6 + 6) + 4 + 2 * 2 * 8) * 9 * (6 * 6 + 9 + 7 * 8) +3 * 6 +(9 + 8 * 9) * 4 * (3 + 5 * 3 + 5) * (6 * 3 + 6 + 9) * (6 * 9 * 3 * 3 * 4 + 9) * (6 + 9 + 2 + 8) +4 * (8 + 9 * 6) * 7 * 3 * (9 + 6 * 2) +(7 + 3) * (3 + 8 + 3 * 8 + (4 * 9 * 9 + 5)) + 4 * ((2 + 2 * 2 + 7 + 4 + 9) + 5 * (2 * 6 + 8 + 2) + 4 * (7 + 7 + 7 * 8 * 8 + 3) + 7) + 2 +(7 + 4 + 5 * (3 + 5 * 2 + 3)) * 3 * (7 * 3 + 9 * (3 * 2 + 4 * 7 + 3 + 2) + 4) + (5 + 3 + (9 * 5 + 6 + 5 + 4 * 8) * 4 + 4) +4 * 6 + 7 + (3 * (4 + 2 + 4)) * 4 + (7 + (6 + 7) * 3 + 2 + 6) +6 + 3 * 5 * 2 * (4 * 9 + 6 + 5 * 8) +(6 * (3 + 2)) + (8 + (3 * 8 + 7 * 7) * 5) * (3 * (6 + 3 * 5 * 2 * 7 + 4) + 5 + 5 * (5 + 6 + 5 * 3 * 2 + 6)) + 6 +(4 * 2 * 4 + 7 + 2) * 7 * (6 + 7 + (5 * 5 + 3) * (5 * 2)) + 5 + 2 +9 * ((5 + 3) * 5 + 6 * 5) +((7 + 9 * 9 + 8 * 8) * 4 + 6 * 5 * 6 + 9) + (9 + 5 * 3 + 5 * 8 * 2) + 8 + 2 +(7 * 4 * 6 + 5 + (9 + 5 * 5 + 5) + 3) + 5 * (3 * 4 * 6 * 5) +2 + (8 + 9 * (8 + 3)) * 2 +(9 + 9 * 5 + 5) * 2 * 6 * (5 + (9 * 4 + 7 + 6 * 2) + 3 + 3) + (7 + 4 + 3 * 4 + (4 + 8 + 5 * 2)) +(4 + (7 + 3) + (4 + 5 + 7 * 9 * 8) + 5) + (6 + 5) * (2 * 2 * 9) * 7 * 9 + 4 +5 + 9 + (2 * (6 + 9 + 9 + 2 * 3 * 3) * 8 + 8 + 4) * (9 + 9 * 4 + 3 * 9 * (5 + 9 + 7 + 4 + 7)) +2 + 4 + 2 * (5 + 9) + (3 + 2 * 8 * (9 * 5 * 3 * 6 + 6 + 5) + 7 + 9) + 5 +6 + ((2 + 2 * 3 * 9) * (4 + 6)) + 2 + 3 + 2 +2 + (2 + 5) * (3 * 8 * 5 + 6 + 7) * 6 +2 + 2 + (7 * (4 + 4 * 7 + 3) + 2) * ((2 * 8 * 5 + 2 * 4 * 5) * 2 * 9 + (8 + 5 * 4)) + 9 +9 * 9 + 7 + (9 + 3 * (9 + 2 + 4) + 3 * 4 + 9) +5 + (7 + 8 * (7 + 2 * 5 * 7)) * 8 + 6 +(2 * (2 + 5) * 2 + 2 + 8 * (4 + 3 * 8 + 8 + 2 * 9)) * 9 + 9 * 7 * 2 * 9 +4 * (7 * (8 + 6 * 2 * 6 + 2 + 7) * (5 * 7 + 5 * 2) + 5 + 5 + (3 + 8 + 2 + 5 * 8)) + 7 +5 + ((4 + 5 * 6 * 5) * (6 * 2 + 2) * 8) * (9 + 9 + 9 * 3 * 4 + 2) * 3 + 2 * 4 +7 + 7 + 3 + 9 + ((6 + 5) * 8 * 2) * 6 +5 * 7 * 5 + (5 + (8 * 6) + (5 * 2) * 6) +(9 * 5 + 7 * 5 * 3 + 2) * 5 +(5 * 2 * 2 * (4 * 8 * 6 + 7 + 3) * 7) * 8 * 3 +(5 + 4 + 9 + (4 * 7 + 5 + 8) + 9) * 7 * (8 * 7 + 6 + 4 * 2) * 8 +3 * 9 * 7 + 7 +2 + 5 + 3 * (6 * 8 + 3 + 5 + (9 + 8 * 7)) +2 * 3 + 5 * 3 * (9 + 2 * 9 * 9 * 9 + 2) * 9 +8 * ((9 + 7) + 9 + 6 * 7 * (7 * 9 * 6 + 6 + 4)) + 3 +4 + 5 * 7 + (8 + (7 * 6 + 5 + 5) + 7) + 2 * 5 +2 + ((3 + 7) * 4 + (9 * 7 + 5) + 4) * 2 +5 + 2 + 4 +3 + ((5 + 9 + 8) * (5 * 2 * 9 * 6) + 6) + 9 * 2 +4 * (3 * 3 + 2 * 2) * (5 * 8 + 6 * 2 * 5 + 4) +5 + 8 * 2 + (8 + 3 + 4 * 2 + 2 + 5) + (4 + 8) * ((7 + 8 * 3 * 9 + 5 * 5) + 7 + 7) +5 + ((9 * 8 + 2 * 8 + 3 + 4) + 6 * 5) + 4 * 8 +2 + (8 + 4 + 6 + 2 + 6) * 5 * (5 + 7 * 7 * 6 * 5 + 4) + 9 * 8 +3 * (9 * 9 * 4) + 3 +4 * 9 * ((7 * 9 + 2 * 2 * 6 * 7) * 6 * 6 + 4) * 5 + 6 + 8 +2 + 6 + 7 + 5 + (4 + 2 + 2 + (9 * 2 + 8 * 7) + 9) + 9 +3 * (3 * 5 + 2 * (5 * 9 * 8)) * 8 +((3 + 7 + 7 * 5) * 3) * 8 + 6 + 5 + 2 * 9 +4 * 4 + (7 + (4 * 3 + 2 * 5 + 3) * 7 + 6 * (8 + 2 * 5 + 4 * 7)) + 4 * 7 * 8 +7 * (2 + (4 + 6 * 4 * 8 * 7 * 6) + 5 + 8) * 5 + 2 + ((6 * 5 + 8 * 7 * 9 + 2) + 8 * 7 + 2 + 4) * (3 + 5 + (5 + 4) + 3 * 7 + 7) +9 + ((4 * 2 + 7 + 8) + 7) + 9 +(6 * 7 * (5 + 9 * 9 + 9) + (5 * 9 * 8 + 5 + 2 * 2) * 5) * 2 * (6 * (7 * 3 + 5 * 7 * 9) * 2 * 5) + 5 * 2 + 8 +7 * ((4 + 8) + 7) + 5 + 6 +(8 * 4 + (5 + 4 + 7 + 3 * 4 + 5) * 9 + 9) * 2 * (3 * 3 + 5 + 4 * (5 * 5 * 5 * 9)) * 7 +9 * 8 + 8 + (4 * 5 + 3) * 8 +3 + 9 + (5 + 7 + 7) * 2 + 6 +4 + 8 + (9 * 2) * ((5 * 5) + 5 + 8 * (6 * 3)) +3 * 7 * 5 + 4 + (8 * 7) +(3 + 5) * 9 * 6 * (9 * 4 * 8) * 5 +(9 + 8) * 3 * 9 + 3 +9 + 6 + 9 +(7 + 6 * (8 + 5 + 2) * 6 + 7 + 7) * 4 * (3 * 5) * 5 * 7 * 4 +(9 + 3 * (4 * 2 * 3 * 9 * 7)) + 7 + ((9 * 8 * 4 + 2 + 4 * 7) * 7) + 2 +2 + (6 + 9 * 3 + 6 + 5 + 4) + 8 +4 * 7 + 5 + (7 + 8 * 7 * 4 * 7 + (6 + 9 + 3 * 6 * 9 * 8)) +9 + 9 * 4 + 3 * 5 +4 + (3 * 7 + 4 + (7 + 6 * 4 * 8 + 9 + 7) * 9 * 9) +(8 * (2 * 6) + 9 + 7 + 3) * 9 + 8 * (5 * 5 + 5) * (6 + 7 + 6) +(2 * 3 * (6 + 3) * 5 * 6) + 7 + 8 +9 + 2 + 5 + (3 * (9 + 3 + 2 + 7 * 6) + (6 * 6 * 2 * 3 * 2 * 2) + 3 * 9 + 2) + (3 + 4 + 3 * 8 * 7) * 5 +4 * 7 + 4 + 5 * (9 + 7 + 7 * (6 * 8) * 7) +(4 + 9 + (2 + 8 * 2 + 4) + 4) * 2 * 4 + 8 +(7 * 8 * 7 + 7 + 5 + (6 + 7)) * 8 + 8 * 6 +5 + 6 * 3 + 6 * (5 * 8 + 2 * 4 + 5) * 9 +5 + (5 * 8 + 7 * 7 * (7 * 4 * 9 + 4 + 8 * 5)) * 9 + 8 + 5 +5 * 6 + (2 + (3 + 3 * 6 * 4 + 5 * 2) * 7 * 7) + 8 +8 + 6 * (6 * (9 * 5 + 9 * 9) + 6 + (4 * 2) + 6 + 9) + 9 +8 + (3 + (6 * 2)) + 8 +6 * (5 * 2 * 8 * 5) +4 * 2 * 7 + 7 + (3 + 2 + (4 * 6) + 5) * (2 * 6 + 5 + 7 * 2) +9 * 7 + 4 * 3 +9 + (9 + (3 + 2) * (4 + 6 + 2 + 9 + 2) * 4 * 9 * 7) * 8 +7 * 5 + (4 * 4) + 8 +2 * 9 * 7 + (4 + 5 * 3 + 9 * 9 + 6) +8 * 4 + 7 * (5 + 3 + 3 + (2 * 5 * 2 + 6) + 7 + 3) * (5 * 9 + 2 + 5) * 3 +((7 * 8 * 6 * 3 * 9 * 5) + (6 + 5 * 7 + 8) * 5 * 7 * 9 * 2) + 8 * ((2 + 6 * 9 + 8 * 8 + 3) + 8 + 5 * 4 + 8) + 7 * 8 +6 + 3 * 2 +(8 + (8 * 4 + 3 * 2 + 3)) + 2 * 4 * 3 + 3 +(4 + 4) * (2 + 8 * 3 + (8 + 5 * 6 + 3) + 8 * 5) +8 + ((4 * 5 + 7) + 9 * 2 * 2 + (2 * 7 + 3 * 6)) + 4 + 2 * 4 +6 * 8 + 9 + (3 + 2 + 4 + (2 * 2 + 7 * 5) + 3) * 3 +7 * ((3 * 6 * 3) * (3 + 4 * 5 * 4 + 8) + 5 + (7 + 3 * 2 * 9) + 7 * 4) +6 * ((6 + 5 * 7 + 6 * 8) * 5 * 3) + 5 * 8 + 6 +(4 * 7) + (2 + 8) + ((3 + 4 + 4 * 8 * 3) * 2 * 2 + 7) + 5 +((2 * 5 * 9) + 8 + 4 * 7) * 3 + 8 * (6 * 4 * 3 * 2) +((2 * 4 + 2) * 2 * 4) * 9 + 5 * 6 +3 * (8 * 3 + (6 + 3 + 4 + 6 * 6) * 7 + 8) * (7 * 2 + (9 + 4 + 3 * 7) + 3 * 7 + (4 * 5 + 3)) + (8 + 3 * 4 * 5 + (7 + 7 + 7) + 3) * 9 + 9 +(8 + 9 + 5 + 3 + 3) + 6 + 6 + 9 +7 + (6 * 2 * 3) + 8 * 8 +2 * 7 + 4 +(3 * (6 + 4) + (5 + 6 * 5 + 4) * 8 * 9 * 6) * 6 +2 * (7 + 4) * (6 + (3 * 2 + 9 + 2 + 2 + 7) + 4) +5 * 8 * 4 + 5 + (6 * 7 + 3 * 2) + 2 +(9 + 8 + 5) * 2 + 2 + 6 +3 * 9 * (2 + 4 * 4 + 3 + 2 * 3) +6 + ((9 * 6 * 3 + 8) * 4 * 8 + 7) * 3 + 2 + 8 +7 * 8 + (3 + 6 + 3) + 7 +7 * (8 + 2 * 5 + 3 * 5 * 3) +2 + 2 + (3 + (7 * 7) + (7 + 3 + 4 + 3 + 3 * 5) * 4 * 7) + 5 +(3 * 8 + 4) + 4 * (5 + 5 * 2) * 4 * 2 +6 + 9 + (6 + 5) + 6 * (6 + 4 * 3 + 7 * 3 + 6) +2 + ((6 + 6 * 2) * 5 * 2 * (4 * 7 + 3 * 9 * 4)) + (3 * (2 * 8 + 6 * 4 + 9 + 2) * 2) +4 * ((5 * 9 * 2 + 3 + 3) * (5 * 8 + 9 + 8 * 5 + 7)) * (6 * 6 * 2 * 9 + 6 + 4) + 9 +(4 * 9) + (2 + 8 + 7 * 6) + 7 + 7 * 7 + 8 +8 + (9 + 5 + (5 * 2 * 6 * 2) * 4 * 9 + 7) + 8 * 3 + 4 * (5 + 4 * (2 + 2 + 6 * 8 + 9 * 7) + 2 + 3) +(3 * 6) * 2 + 3 + 3 * 3 + ((2 + 5 + 2 + 4 * 4) + 7 * 9 * 2 + 7 * 4) +(8 * 9 + 6) + 3 * 2 + (5 * 5 * (2 * 4 * 8 * 3) * (2 * 5)) +9 * (6 * 6) * 2 +8 + 6 * 4 * (9 * (8 + 7 * 6 + 8 + 5 + 8)) + 9 +8 + 8 * 7 + (8 * 7) + 8 +7 * ((6 * 5 * 5 + 9 * 6) * 4 + 3) +6 + 3 + 8 * 9 * 4 * (8 + 7 * 4 * 6 * 2 + 5) +(2 + 2 * 3 * 4 * (9 + 8 * 4) * 7) + 3 +3 * ((5 * 6 * 9 * 2 * 6 + 4) + 3 * 2 + 7 + 5) + 5 * 2 +9 * (4 + 8) + (6 * 5) * 4 * ((7 + 2 + 5 + 7) + 2 * 5 * 4) * (9 + 3 * (6 * 7 * 5 * 4 + 6) + (5 * 8 * 3 * 4 * 6) * 5 + (2 * 2 + 7 + 3)) +4 + ((8 * 3) * 4 * 7 + 2 + 8) + (4 + 8 + 6 + 2) * 5 * 2 +4 * (2 * 5 * 8 * 2 + 7 * (9 * 7 * 6 + 3 * 2 + 9)) +3 + ((4 * 6 + 3 + 6 * 5 + 3) * 3) + 2 + 7 * (3 + 2) + 7 +(9 + (4 + 8 * 4 + 6 * 4) + 4 * 9) + (4 * 6) * 6 + 3 +(4 + 5) * 8 * 2 + 3 + 5 +3 + (6 + (6 + 7) * 8 + (4 * 8 * 6 + 4) * (6 + 2 * 7)) +8 + 8 * (9 + 8 + (4 * 6 * 6 + 2 * 3 * 4) + (8 + 2 + 3 * 7 + 4) * 9) * (2 + 9) * (9 * 7 * (6 + 4 + 5 + 3 + 8 * 5) * 9 * 7) +7 * 6 * (8 * 2 + 8 * 8 * (9 * 5) * 5) * 3 + 6 +5 * (2 * (5 + 6 + 3) * (9 * 6 + 6 * 2 * 7) + 6) * 5 * 4 + 2 + (6 * (3 + 9 * 8)) +(3 + 6 * 8 * 9) + 8 + 3 * 2 + 2 + 2 +4 * 7 * (3 * 5 * 5 + 8 + 5) +(5 + 2) * 6 + ((9 + 3 * 7 * 5) * 6) + 8 * 9 +7 + 5 + 8 + 8 * (9 + 4 * 5 + 4 * 4 * 9) +5 + 7 * 2 + 8 + 2 +9 + ((2 + 9 * 6) * 8 * 9 + 2 + 2) + (6 * (7 + 3) + 3 + 3 * 7) * 3 * 3 + 9 +8 * (5 + 8 + 2 * 4 * 2) + ((2 + 4 * 7) * 8 * (4 * 8 + 2 + 2 * 6 + 8) + 2) + ((8 + 3 * 6 + 9) + (5 * 3) * 8 * 7 * 8) +9 + 4 + (4 + 9 + 7 * 6) + 3 * 6 + 9 +9 + (2 * 5 + 7 + 5 * (6 * 2 + 5 + 2 + 3 * 5) + 3) + 2 * (3 + 9 * 4 * 8) + 3 + ((9 + 3 + 7 * 2 + 7 * 5) + 7 * 5) +7 * 4 * 6 * ((9 + 9 * 2 * 4 + 2 * 2) * 7 + 9) * 8 +6 * 5 + 4 * ((4 * 9 * 7) * 8 + 6 + 7) * 7 + 3 +9 + 9 * 9 * 4 +8 * 6 + 7 * ((9 * 4 * 2 + 9) + (6 * 9 * 2 + 2 + 5) + 8 * 6 * 6) +3 * (6 + 9 * (9 * 3)) + ((5 * 6 + 7 * 5 + 4 * 3) + 5 * 6 * 9) * 5 * ((8 * 2 * 6 * 5) + 5 * 8 + 5 + 9) +4 * (6 + 6 * 7 * 5 + 8) * 6 + 2 +((9 * 8 * 3 * 6 + 2) * 4 + 7 * (5 * 8 * 2 + 4 + 9)) * 2 + ((7 + 3 * 3) * (7 + 3) * 3) + 7 +8 * 4 * 9 + 8 * (8 + (6 + 6 * 2 + 4 * 4) * 3) + 8 +(9 + (8 * 8 + 9 * 6) * 7) + 7 * 9 + 6 * 4 +3 * 7 + (6 * (5 * 5 + 2 * 8 + 7 * 2) + (2 + 2 + 5 + 4 + 9) + (4 + 5 * 3 + 8 * 7) + 9 + 9) + 2 * 4 +9 + (3 + 9 * (9 + 9 * 4) + 5) * 8 * ((6 * 8 * 4 * 9 + 9) * 5 + 2 * 9) +7 + ((5 + 6 + 5) * 8) * 5 + 9 + 5 +2 + 2 + 9 + ((2 * 8 + 3) + 9 + 7) + ((6 + 3 + 2 + 8) + (4 * 7 * 6 + 2)) +3 * 6 + ((6 * 6 + 7) + (2 + 3 * 7 + 4) + 4 * 2) * 2 +9 * 3 + (9 * (6 * 5 + 6 * 2 + 7) + (5 * 7) + 3) * 6 * 9 + 3 +5 + 9 + (9 * (4 + 5)) + (9 * 2 * (3 + 7 + 2 + 6 + 8) + 6 + 2) * 7 +4 * 3 + ((7 * 4) * 3 * 4 + 7 + 9 + 7) +2 * ((3 * 6 + 3 + 3 + 9 + 2) * 4 + (5 * 8 + 4 + 6 + 5 + 8) * 5) + 9 * 5 +4 + 9 * 3 * ((2 + 2 + 5 + 2 * 3 * 4) * 6 * 8 * (5 + 3 + 7 * 9 + 4) * (2 * 4) + (4 * 2 * 2)) +5 + 7 + ((4 + 5 + 5 + 6) * 5 + 9 + 6) * 9 * 7 +((6 * 8 + 5) + 8 + 3 + (4 * 5 * 9 * 2 * 9 + 6) + 7) * 9 + (6 * (8 + 6 + 4) * (6 * 9) + (9 * 2 + 8 * 4 * 8 + 5) * 9 * 5) + (5 * (7 + 5 + 3) * 5) +((4 * 6 + 4 * 2 * 4) * 9 + 5 * 9 + 5 * 9) + (3 * 7 * 9) * 7 +2 * 2 +(3 + (5 + 6) + 3 * 4 * 5 + 3) * 7 +5 + 7 + 2 + 3 +(8 * 7 + 9 * 9 + (3 + 9 * 7 * 7 * 9) * 6) * 4 +8 * (9 + (3 + 4 + 7 * 5 * 9) + (8 * 4) * 4 * 7) * (8 + 3 + 5 * 9 + 8) + 2 +9 + 2 + (3 + 3 + 8) * 2 * 3 + (3 * 9 * 5) +4 * 9 + 5 + (8 * 8 * 4) * 8 + 3 +6 * 5 * ((9 + 9 * 9) * (3 * 5) * 3 + 6 + 8) * 2 +4 * ((2 + 2 * 8 * 6 + 5 + 7) + 6 * 8 * 7 * 6) +(9 + 3 * (4 + 5 * 8) * 5 + 9) + (9 * 4) * (3 * 3) * 8 +(2 * 3 * (6 * 5 + 8)) + 7 + ((5 * 7 * 5 + 9) + 9 * 3 + 2 * 2) + (3 * 5 * 8) * 2 * 4 +3 * (8 + (6 * 3 + 9 * 7 + 2 * 5) * 2) * 3 +7 * (3 + (8 * 9 + 9 * 6 * 4) * 8 + 4 + 6 + 7) + 7 + (9 + 5) +8 + 4 + 7 +((2 * 8 * 5 + 3 + 9) * (9 + 6 * 8 * 3 * 5) * 2 + 7 + (2 + 2 * 4 + 5) + 9) + 8 * 7 * 6 * (4 * 8 * 3 + 7 * 7 * 9) + 4 +(2 + 3) + 8 +5 * 7 * ((6 + 6 + 8 * 2 + 4 * 5) + (6 + 9 + 8 + 8 * 6)) * 8 + 3 + 2 +(3 + 9 + 7 + 5) + 6 + 3 +7 + ((2 * 5 + 8 + 7 * 3 * 2) * 9 + 5) + 9 +4 + 2 * 4 * (5 + 8 * 8 * 5 + 6) +5 * 9 * (6 * 3 * 7 * 7 + 9 + 6) * 7 * (6 + 2 + 7 + 9) + 5 +4 + (5 * 2 + (5 + 4) * (2 * 3 + 4 * 5 + 4) * 3 * 2) * ((9 * 6 * 5 + 7 + 7) + 7) +(7 + (5 * 9 * 3 * 8) * 4 + 2 * 7 + 2) * 5 +((4 * 8 + 9) + (3 * 7 * 7 * 7) * (9 * 3 * 2) * (8 + 4 * 6 * 9)) * 7 + 3 * 7 + 2 +(8 * 3 + 8 + 2 * 3 + 3) + 2 * 3 +5 * (5 * 8 + 3 * 4 * 3 + 6) + 7 + 7 +5 * (7 + (4 * 9)) * 3 + 7 +8 * 9 + (9 + (2 * 2 * 8 + 6)) * 6 +4 + ((9 * 6 * 7 * 6 + 8) * 6 * 2 + (9 + 7 + 2 * 7 + 4) + 6) + 5 * 4 + 7 +(5 + 3 * 9 + (4 + 7 + 5) * 2 * (8 * 4)) * 5 + 3 + 6 +9 * 4 +2 * (3 + (9 + 6 * 4 + 7 * 5 + 4) + 7) * 6 * 4 + 8 + 7 +(2 * 9 + 3 * 2 + 8) * 5 * 8 + (9 * 3 * 2 + (9 + 4 * 8) * 6) + 7 + (8 + 7 + 8 * 2 * 2) +(9 + 7 + 5 * (6 * 4 * 7 + 9 * 9 + 2) * 2) + 7 * (6 * (2 + 7 * 3 * 8 * 3 + 3) * 7 + (4 * 4 + 5 + 6 * 9)) +(2 + (6 + 8) * 6 + 9 * 4 * 2) * 9 * 6 + 8 +6 * (5 * 8 + 7) * (4 * 3 * 6 + 4 * 4 * 5) * 6 * (7 * 4 + 5) +2 + (8 * (7 * 7 * 2) * 2) + 3 + (4 + 5 * (8 * 4 + 2 * 3) + 7 + 8) * 4 +3 + ((7 + 5 + 3) * 7) +(5 + 6 + 7) * 3 + ((9 + 2) + 8 + (9 + 5 + 8 + 4 + 7 * 4) + 4) +((4 * 2 * 5 * 6 + 6) + 2 * 9 + 6 + 3) + 6 * (8 * 8 + 5 + (9 + 4 * 2 + 2 * 7 * 7) * 6) * 8 +(5 * 9 * 8 * 7 * 5 + 4) + 6 * 4 * 5 * 9 + 5 +5 * 5 + 5 + (9 * 3 + 3 + 7 * 4) + 6 + (7 + 2 + 5 * 6 * 4 + 4) +(5 * 2 * 7 + 9 + (6 * 9 + 2 * 3)) * 3 * 7 * 6 + 5 * 9 +5 * (6 * 5 + 9 + 5) * 9 + (5 + 6 + (4 * 3 * 9 + 4 + 4 * 4) + 3) +((2 * 2) * 7 * 9 * 2 * 5) + 3 + (8 + 9) + 7 +7 * (3 + (8 * 9 + 3 + 8 + 2) + 8 * 9 + 5 + 7) +8 * (4 + (6 * 3 + 6 * 5 * 6 + 5) * 9 * (4 + 3 + 5) + (7 + 4 * 6 * 3)) * 2 + 7 * 2 +(8 + 9 * 7 * 8) + 7 * 3 * 9 * 3 +7 + 6 * 4 * (9 * 8 + 6 + 7) * ((2 * 8) * 4 + (6 * 8) * (7 * 6 + 8 * 3) + 5 * 7) * 7 +(4 + 9 + (3 + 2) + (5 + 3)) * 9 * 7 + 3 * 4 + 4 +8 * (3 + (9 + 5 + 9 * 3) * 9 * 7 + 3 * 9) + 6 + 6 +2 + 3 + (4 * 6) * (5 * 9 * (2 + 3 + 7 * 8 * 4) * 8 * 3) +3 + 8 * (2 * (7 + 8 + 6 + 7 + 7)) +((8 + 7 * 7 + 6) + 5) + 3 +7 * 3 + (2 * 5 * 9 + 8) + 8 +2 * 5 * (7 + (6 + 9 * 5 * 2 * 6 * 6) * 8) + 6 +((4 * 3 + 3 + 3 + 6 + 9) * (9 + 2) * (5 * 8 * 9 + 6 * 4) + (9 * 8)) + 6 + 8 +((7 + 9 + 2 + 7 + 4) * 8 + (4 * 7 * 4) * 4) + (5 + 8 + 6) + 5 * 9 +(8 * 6 * 7 * 7 + 7) + 2 + 5 +2 + ((8 + 3 * 7 + 7 * 7) * 2 + 8 + (4 * 8 * 5 + 4)) +9 + 2 +4 * 7 * (3 * (9 + 8) * 8 + 2 * 8) * (8 + 2 + 6 + 3) * 8 +6 + 3 * 7 * (2 + 5 + (3 + 8 + 9 * 2 * 3 * 4) + (7 * 9 + 6 + 4) * 2 * 6) +(5 * 2) + 3 + (4 * 8 * 9) * 7 * 7 + ((7 * 3) + 9) +8 * (3 * 4 * 5 + 8) * 7 + 3 +5 + (6 + (7 * 8 + 2 * 4) + 2 + (4 + 2 + 9 * 7 + 4 + 6) + 5 + 5) + ((5 + 9 + 3) * 6 * (9 * 7 + 4 * 5 + 8) * 3 * 8) * 6 +(9 + 6 * (7 * 4 + 3 + 7 + 9 + 5)) * 5 * ((7 + 7) * 4 * 7) + 6 +5 + (9 + 3 * 6 + 2 * 9) + 5 * 3 * 5 + 6 +9 * ((7 + 5 + 2) + (4 * 8 + 7 + 9 * 5) * (8 + 9) + 8) + 5 +3 * (4 * 8) + 2 * 4 + (6 + (9 * 3 * 9) * (3 + 3 + 6 + 2 + 8)) * ((5 * 4 * 9 + 2 + 4) + 7 + 8 * 2) +(2 * 3) * 4 * (4 + 6 * 3) +5 + (4 * 4) + 2 * 8 +(4 * 5 * 5 + (6 * 9 + 9 * 6) + 2 * 7) * (4 + (5 * 6 + 5 * 8)) +5 + ((3 + 5) + 5) + 5 + 6 + 5 +6 * (4 * 3 + 6 + 3 + 9 + 5) * (7 + 6) * 2 * 7 +5 + 5 * 5 + 2 * (2 + (7 + 8 * 9 * 6 + 4) + 4 + 2) +9 + ((8 + 6 + 4 + 4) + 5 * (5 + 3 * 6 + 2 + 2 + 8) + (3 + 9 * 5) + 4) + 4 +5 + 3 * 9 * (8 + 3 + 9 + 2) * 7 +(5 * (3 + 5 * 2 * 3)) * 9 + 5 * 4 +9 * 6 * 8 + (4 + (5 + 6 * 9 * 5 + 7) * 6) * 2 * 2 +8 + 2 * 4 * (5 * 3 * 2 + (7 + 3)) * 9 + 3 +2 + 3 * 9 * (4 * 4 + 3) + 2 + (7 * 2 + (2 + 6 + 8 * 7 + 6 * 2) + (4 + 3 + 3 + 3 * 5 * 5)) +2 * 2 + (9 + 6) + 5 + 5 + 8 +6 + 5 * (6 * 2 + (2 + 2) + 7) +5 + 7 + (7 * (3 + 7 + 7) * 9 * 2 + 8 + (6 + 7 * 8 * 3)) +(6 * 5 + 7 + 5 + 7) * (4 + (5 + 6 + 4 * 7 + 4 + 4) + 6 * 9 * (5 * 7 + 9 * 5 * 6) + (2 + 8 * 4 * 6)) + (4 * 5 + 7 * 9 * 3) * 4 * ((2 + 8 + 9 + 2 * 8 + 3) * (4 + 3 + 2 + 7 + 7 * 6)) +2 * 6 * 4 * ((5 + 9) * 5 * (6 * 7) * 4 * 8) +(7 + 4 + 8 + 2 + 5) * 2 + 3 * 6 + 7 +6 + 3 * (6 * (2 * 4 + 7 + 3) * 6 * 9 + 4 * 3) + (5 * (4 + 9 * 5 * 5 * 2 + 2)) + 2 +9 * 9 * 9 * 3 * ((9 * 9 + 6 * 2 + 6 * 5) + 7) * 6 +(3 + 8 * 8 + 8 * 8) + (5 + 3 * 5 + 4 + 6) + 9 +6 * 8 * 4 + (8 + 5 * 2 * 7) +4 * (2 + (8 + 3 * 9) * 3) + 2 +(2 * 9) * 8 + 4 * (4 + (7 * 6 * 9) + 4 + (5 * 5 + 7 * 7 * 9) * 2) + 3 * 9 +((4 + 7 * 3 + 4 * 2 + 3) + (9 * 3 * 9 + 6 * 8) + 9) * 3 * 5 + (5 + 4 * 5 * 6) +(8 * 2 * 9 * 6 * 3 * (5 + 6 * 2 + 9 * 4)) + 3 +3 + 3 * 7 + 3 * 4 + 5 +8 + (7 + 5) * 8 + 3 + ((8 * 7 + 8 + 6 + 6 * 3) + 7 + 2) +3 * 4 * (4 + 3 * 6) +3 + (8 * 4 + 8 + 9 + 6) +6 * 9 * 6 * 2 * (7 * 6 * 2 + 3 * (8 + 6)) + (5 + 7) +6 * 7 * 6 * 7 * 8 +6 + 9 * (2 * (2 + 2 * 9 + 4) * 2 + 6 * (5 * 8 * 5 + 3 * 5)) + 4 +8 * 3 * 3 * 3 * 8 + (3 + (3 * 8 + 7) + 5 + 2) +7 * 2 * ((8 * 7 + 3) + 3) +2 * 9 + (7 * 6) + (5 + 8) + 7 + 9 +9 + 4 + (6 + (7 * 3 * 9 + 3 + 7) * 4 + (2 * 9 + 3 * 2 * 6) * 3 + 6) * 2 + (5 + (6 + 2 * 4 * 5 * 3 + 7) + 5 * 3 + 7 + 6) + 3 +2 + 2 + 4 * 5 * 9 * 2 +7 * 2 * 3 + 8 * 6 * 5 +5 + 6 +(3 + (6 + 7 * 2) + 8 * (2 + 4 + 4 + 5 + 6)) * 6 +(4 * (2 + 3)) + (8 * 3) + (7 * 8 * 8 + 3 + 9 * 4) +8 + (8 * (2 * 5) * 8 * 7 * 2) + 7 +6 * (6 * 8 + (9 * 5 + 2 + 9 + 3 * 6) * 8) + 7 + 6 * 6 + 2 +2 * 7 * ((7 * 3) * 7 * 2) +2 * (9 + 8) * 3 + 8 + 7 +(6 + (2 * 2 * 2) + 9 * 6) * 6 + 9 + (7 * 4 + 8) +4 * 7 + 7 * (3 + 2 * 4 * 8 + 6) + 9 +8 + ((6 * 4 * 6 * 3 * 2) * (9 + 5 + 4 * 4 + 5 + 9) * 3 * 3 * (4 + 5 * 8 + 5 + 6) + (9 + 8 * 9 + 6 + 8 * 7)) * (9 * 9 * 2) * 5 * 3 + 2 +5 + ((3 + 7 * 9 * 6 * 6) + 8 + 3 * 3 + 8 + 4) + (4 * 8 * (4 * 9 + 8)) +((6 * 4 + 2 + 7 * 4) * 2) + (8 + 9) * (8 * (2 + 7 * 7 * 4 * 9 * 3) * 7 * 7 + 4) * 3 * 4 * 7 +(8 + (9 * 6 + 5) + (4 + 5 * 4)) + 9 + (3 * 8) + 6 +((3 + 7 + 9) + 3 + 3) * 4 + 2 + (6 * (8 + 4 + 3 + 4) + 3) * 7 +((7 + 9) * 4 + (7 + 8 * 6 * 5 + 8) + 2) * ((3 + 4 + 7) + 2 * 3 * (5 * 6 + 6 * 4 * 4) * (5 + 2) + (3 * 4 * 4)) +5 * (8 * 6 * 3 + (2 * 8)) + 2 + 5 * 2 + 6 +4 * 5 + (8 * 4) +(4 * 5 + (8 + 7 + 5 * 8 * 5 * 8) + (2 + 7)) * 2 * ((8 * 3 + 5 + 9 + 3 + 5) + 3 + 5 + 8) * (3 + 8 * 6) +(7 * 6) * (2 + 8 + 6 + 3 * 5) * 2 +3 * 7 + 5 * 2 * ((9 + 8 * 7 * 4 * 2) * 5 + 4 + 9 * 4 * 5) +9 + 7 * 3 * ((7 + 3 + 2) + 8 * 4 * 4 * (7 + 5 * 6)) + 4 +((2 + 9) * 4 * 7) * (8 + 9 + 4 * 8 + 6 + 2) + (9 * 4 * 9 * 6 * 6 * (6 * 4 + 6 * 4 * 7 + 3)) * 6 * 3 +(4 * 4) + 6 + 4 * 7 * (4 + 8 + 9 + 9 + 3) + 3 +6 + 3 * (7 * 3) * 8 + 9 +6 * 3 * 2 * 3 * 4 +9 * (5 + 6 + (2 * 9 + 6 + 8 * 7) + (2 * 5 + 7) + (5 * 2 + 9 * 3 + 7 + 7)) * 6 * 5 * (9 + 6 * (5 + 2 * 8 * 9 * 5 * 9) * 3 + 6) +8 + 4 + 2 + (3 * 3 * 2 * (9 * 7 * 8 * 2)) + 4 + 7 +(3 * 6 + 9 + 8 * (6 * 4)) * 7 * ((5 * 9 * 2 * 2) + 3 + 4 + 8 + 5) + 3 * 7 +(2 * 4 + 4 + (8 * 2 + 8 + 6 + 2) + 4 + 9) + 9 * (2 * 6 * (4 * 3 + 7 + 6 * 4 * 7) + 3 * 2) + 3 + 8 * 7 +7 + 7 + 8 + (9 * 7 * (6 * 8 * 2 + 7 * 4)) * 5 + 9 +(9 + (8 + 8 * 7) + 2 * 3) + 3 + 5 * 2 * (5 + 4 + 2 + 6 * 8 + 5) + 8 +4 * 4 * 4 * (2 + 6 * 7) * (5 + 4) +7 + 7 * 8 + 4 + (6 + 4 + 4 + 5) +((3 + 6) * 6 * 7 * (5 * 6 + 5)) + 2 +((9 + 9 + 4) * 7) * 7 * 7 * 3 + 6 + 4 +9 + 2 * 9 * 5 * 8 +3 * (7 * 7) +6 * 2 + 3 + 2 * ((6 * 6) * 3) +2 + 6 * ((9 + 7 * 3) * 7 + 8 + (3 + 9) * 7) + 5 * 3 +6 + 6 * (8 * 5) * (2 * 3 + 5 * 8 * 5 + 2) +(5 + 5 * 4) * 2 + 3 * ((4 * 6 + 2 + 9) * 9 + 7) + 8 * (7 * 8 * 5 * 7 + 4 * 9) +5 + 8 + (4 + (5 * 6 * 6 * 5 + 4)) * 4 + 2 +6 + 2 + (4 * 7 * 7 * 2 * 8 + 8) + 7 +8 + ((5 * 9) + (8 + 8 + 6 + 7 + 6 + 3) * 9) + 7 + 7 +5 + 5 * 3 + 8 +(6 + 4 + (8 * 2) * 5) * 3 * 6 * 8 + 3 +(4 * 2) * 2 + 2 + 5 + (7 * (6 * 5 * 6 + 4) * 8 * (8 * 2) * (9 * 5 + 4 * 3 + 6 * 4) * 3) +8 * (3 + 7 * 5 * 4) + 4 + 4 + 6 * 8 +(5 * 7) * 5 + 9 + (4 + 8 * 9 * 5) +3 * ((5 + 9) * 4 + 6 * 7) * 2 * 3 * 8 +7 * (6 * 9 * (6 * 9 + 3 + 6 * 4) * 5) + ((8 + 5 + 2 + 4 + 8) + 4 + 9) + 8 +7 + (3 * 5 * 7 + (4 + 9 + 3 + 6 + 7)) + (5 + 8 * (7 + 5 + 7)) + (7 * 4) +(4 + 7 + 2) * 2 + 9 +6 * 4 + 9 + 6 * 6 + 7 +6 * ((7 * 6) * 7 + 4 * 5 * 6 + 4) * (9 * (9 + 3) * 7) +(4 * 5 + 4 * 2 + 3 + 3) + 8 * 6 * ((3 * 4 + 5) + 2 + 3 * 8 + 6 + 9) * 8 +((5 * 2 * 6 + 3) + (7 + 3 + 3) * (5 + 9)) * 7 * 6 +5 + 6 * 4 + (7 + (3 + 3)) * (9 * 9 + (2 * 4 * 4 + 3) * 5 + 5 * 4) + 5 +3 + 5 * (6 + 9 + (7 + 3 + 3 + 7) * 4 + 2 + 8) +5 * 5 + (5 * 6 * 5) * 5 * 2 + (3 * 5 + 9 + 6) +6 * (8 * 7 * 2 + 6) * 3 \ No newline at end of file diff --git a/tests/aoc-2020/input/day19.txt b/tests/aoc-2020/input/day19.txt new file mode 100644 index 00000000..ac5c9b48 --- /dev/null +++ b/tests/aoc-2020/input/day19.txt @@ -0,0 +1,585 @@ +50: 15 65 | 60 74 +102: 33 65 | 68 74 +69: 65 74 | 74 65 +110: 45 74 | 102 65 +71: 65 23 | 74 68 +67: 74 55 | 65 23 +55: 95 95 +10: 104 74 | 30 65 +100: 65 77 | 74 109 +4: 82 74 | 43 65 +120: 115 65 | 32 74 +124: 74 13 | 65 22 +105: 74 81 | 65 57 +46: 94 65 | 73 74 +24: 18 65 | 73 74 +28: 53 65 | 94 74 +41: 65 107 | 74 67 +66: 65 23 | 74 23 +0: 8 11 +57: 102 65 | 22 74 +15: 74 112 | 65 71 +47: 84 65 | 105 74 +1: 74 50 | 65 121 +88: 65 73 | 74 55 +81: 74 91 | 65 7 +82: 74 69 | 65 55 +42: 74 123 | 65 79 +89: 128 74 | 40 65 +18: 65 74 | 95 65 +51: 56 65 | 86 74 +65: "b" +94: 65 74 +2: 65 94 | 74 55 +5: 68 65 | 33 74 +93: 65 20 | 74 78 +77: 18 74 | 68 65 +16: 65 12 | 74 55 +79: 47 65 | 3 74 +9: 65 100 | 74 49 +78: 53 74 | 23 65 +21: 74 12 | 65 23 +6: 65 68 | 74 33 +70: 112 74 | 77 65 +115: 73 65 | 53 74 +86: 20 74 | 67 65 +60: 62 74 | 34 65 +44: 103 65 | 120 74 +76: 65 68 | 74 18 +14: 117 74 | 98 65 +119: 69 65 | 73 74 +83: 17 74 | 73 65 +52: 125 74 | 48 65 +8: 42 | 42 8 +73: 74 74 | 65 95 +117: 74 110 | 65 54 +49: 37 65 | 115 74 +92: 75 74 | 4 65 +87: 65 94 | 74 53 +64: 74 73 | 65 69 +118: 65 14 | 74 126 +91: 19 65 | 23 74 +75: 65 102 | 74 85 +108: 65 76 | 74 115 +122: 74 88 | 65 66 +33: 65 74 | 65 65 +45: 23 65 | 94 74 +3: 26 74 | 90 65 +97: 73 74 | 12 65 +31: 74 118 | 65 29 +127: 74 28 | 65 106 +104: 59 74 | 94 65 +37: 23 65 | 111 74 +53: 74 74 | 65 74 +106: 65 94 | 74 33 +62: 65 59 +38: 16 74 | 64 65 +61: 122 74 | 116 65 +99: 115 74 | 24 65 +11: 42 31 | 42 129 +129: 11 31 +112: 95 12 +72: 65 107 | 74 5 +22: 53 74 | 68 65 +84: 65 108 | 74 70 +59: 74 65 | 65 65 +12: 65 65 | 74 95 +20: 74 18 | 65 69 +74: "a" +7: 95 55 +98: 99 65 | 38 74 +58: 27 74 | 51 65 +121: 65 36 | 74 72 +128: 41 65 | 101 74 +103: 71 65 +26: 74 39 | 65 10 +43: 65 17 | 74 59 +63: 74 92 | 65 44 +32: 33 65 | 94 74 +111: 74 65 | 74 74 +56: 65 46 | 74 106 +27: 113 74 | 124 65 +34: 33 65 | 18 74 +126: 65 9 | 74 61 +113: 74 25 | 65 83 +19: 74 65 +125: 68 74 +80: 74 18 | 65 53 +85: 65 12 | 74 69 +13: 65 18 | 74 33 +107: 65 12 | 74 59 +96: 55 74 | 53 65 +54: 6 74 | 87 65 +23: 74 74 +95: 65 | 74 +29: 74 63 | 65 58 +109: 68 65 | 94 74 +116: 5 65 | 107 74 +39: 74 119 | 65 2 +40: 52 74 | 114 65 +30: 74 59 | 65 19 +25: 53 65 | 12 74 +123: 65 89 | 74 1 +90: 65 93 | 74 127 +35: 19 74 | 23 65 +101: 97 74 | 80 65 +114: 35 65 | 106 74 +36: 21 74 | 96 65 +68: 65 65 +48: 94 74 | 17 65 +17: 65 65 | 74 74 + +bbaaabbbabaaaababaababbaaabbababbaabaababbbbaabb +baaaababaaaaabaaabbababbbbabbababbbbaabaaaaabaaa +abbbabbabaabaaaabababbabaabbbbaaabbabaab +bbbaabaaabaabbbbbbaabaaabbbabaabaaabbbab +abbbabbabbbabbbaaaaaabab +bbbbbbbbababbaaaaaabbbbabbababaa +abbbabaabaaaaabbaaaababbabbabbbb +babaabbbaabbabbaabababbbbaababaabaaabaabbbabbbba +babaabbaabbabbaabbbabbabbaabbbbbbababaabaaaabbbbbaaaabaaaabaaaaa +bbaaaabbbabbababaaaaaaababbabababbbaabbaabaabbaabbaaaabbbababaaa +abbaaaaaaababbaaaababbabababbabaabaabaab +aaaaaaabaaababbbabaababb +bbbabbbaaababbbbaabaabbababbbbababbbabbaaaaabaaabbababaaabbbbabaaaaabaaa +baababbbaababbaabbaabbbb +baaaabbaaaabbababaaaabaaabbbaabbabaaaaaaabbbbbabaaaabbbb +abbbabaabbbbbbabbbbabbaaaaabbbab +abaaabbaabaabbabbabbbbaa +babaaaaaaaabbbbabbaabbabbabbaaba +abbaabaabaaabbaaabaaabaa +aaabbbbababbbbabbaabbbba +abbaababbabbaaabbaaaaaabbbbabbbbabbabbaa +bababbbaabaaabbabbbaabab +aaabbbaabababaabbaabbaaabbbaabbaabbbabab +babbbbabaabbbaabababaabaabbbabab +bbbbbbabaaaaaabbbabbbaabaaaababaabbbabaabaaabbbbbaaabbbaaaaabbab +babaaaaabbbababbababaabbaaabaaaaaabbbbaa +aaababbbbababababaaabaab +aaabbbaaabaababaaababbbbababbaaaaaaaabbb +abaabababababaabaaabbbbabbbbaabaaaabaaab +abaabbbabaaaaabbaaaababababaaaabaaaaabaaabaaababbbaabaab +bbbbbaabaabbbaababababba +bbaaaabbabaabbbaabbbaaaaaabbbabaabbaaaabaabaaaaa +abbabbbaabaaaababbababab +baaaaaaaaabbbbaaabaaaabbbbaaabaaaaaabbbbaaaabaabababbbbbbabbbabbabbbbbba +aababaabbbabaaaaaababbbbabbbbaab +aaababbbbabaabbbababbbbb +bbaaabbbaabababbbbabbaaa +aabbabbabbbabbbbaaabbbbb +bbaabbaabbbbbbabaabaaaba +bababababbbaaaabbbabbbbbbbabbabb +abaababaabaabbbbbaaabaaa +bbbbbbbbbababbaaababbaaaaaababbbaabbbbbbbbababbaaaaaaaaa +abbaababbaababbabaabbbaa +ababaaabaaabbaabaabaababaaaaaaaa +babaabbbbaabaaaaababaabaabbbbbbb +baaababbabaaaaaaabbbabab +aabbaabbbaababbbbababbbaabbbbbaabbbbbabb +baaababbabbbbbabbbbbbbba +babababbabbbbaaabaaaabaa +bbbbbababbbbabbaababaababbbaabbaaabbbbaa +abaabababaabbaaabbaababb +bbabaabbaaabbbaaaabaaaba +aababbbbbabaabaabaaabbabbbbabaabbababbbb +babaabaaabbbaaaaabaaaabaaabbabaa +abbaabbaababaabbbbbaaaaa +baababbaaaababaaaabbbbaa +abababaabbbbbbbbababbbba +abbaabaababaabbbabaabbbabbbaababbaaabbbb +bbaaaabbbbbaaaabaaaaaaababbbbbbababaabbbbaababbbabbabaab +aabbabababbbbaaabaaabbaabaaabbaa +bbbabaaabaaabbabbababbabaaaaaabbaaaabbbaabbabbab +bbbabaaabbaaabbabbbaaabb +aabbbabbaababaababaababb +abbabbbaaababaabaaababbababbbbba +abbaabbbbaaaaabbbbbaababbbbabbbabbabbbaabaaaabaaaaabbbabbbbbbabbbababbab +bbababbbbbaaabbaabbbabbb +aaabaabaaababbabbbbbaaab +aabbabaabbabbaababaaababbbababaa +aaaaaaabbaababbbaababbbbbabbaababbaabaaa +aabbaaabaaaaaabbbbaaaabaababaaab +aabbaabababaabababbbbaab +abaaabbbaabbabbabaabbaabbaabbabaababbbaaabbbbaab +babbbaabaabbbabbabbaaaab +baabbaaabaabaababbaaaabaaababaaabbbbabaabaaabbbaaabbbbba +aaaaaaaabbabaaabbabbaaabaaaaabbbbaaaabbaabaaabbb +abbaabaabbbbaaaaaabaabbbaabbaaabbabababbbaaaabab +bbbbaaaabaabbbbabaababaabbbabbbabaaaabaaaababbbaaaaabbab +baabbaaaabaabaaaaaabbaaaabbbbbaabbaababaaabbbbbaababababbbbaaaba +bbbbabbabbaaabbbaabbaabaaabbabaa +aaaaaaabbbbbbababbababab +bababaaaabbbbbbaabbbabbabababaaaababbabaabbabaaa +bbabaaaabbbbbaabbbabaaab +ababbbaababbbabaabbbbaba +aaaabbbbbababbbabaababab +abbbaababaabaababbbaabaa +bababbaabaaaaaaaaaaaaabbaabaaaba +aabbaabaaaabbbbaaaababbbbababbbbaaaabbbabbbaaaaabaaaaababbabbbababbaaaab +aaaaaabbaabbabbababababbbaaaaabbababbabababbabba +aabbababbbaaabbaaaaabbaa +aabbaaaaaaaaaabbaabaaaaa +aababbaababbbbbbabbabbbababaabbabbaabbba +bbabaabbaaababaabbbabaaaaaaabbaaaaaaabaa +babaabbbaaaabaabbbababaa +bbabbbaabbbbabbaabbbabbabbaaabab +bbbbbbababababaaabababaabbbbabbabbaabbaabaaababaabbbbaababbbbababaaabbbb +aaabbbbaaaababbbbbababba +aaabbaabbabbabababaababaaaabaaaa +aaabbbaaababbabbaabbababbaabbabaaababaaa +ababaababaaabbabaabbaaaaababaabbaababaabbbbbabbaabbaaaba +ababaabababbbbabbbaaabab +aabbabaabbabaaabbaabaaaaabababbabbbaaabbaaababaaabbaabbaabbabaabbabaabaa +abbabaaaabbbaababaabaaabaaaabaabbbaabaaaababbaabbbabbbaabbbbaaaabbbababaababaaab +abbbaaababbbbaaaabbbbbbb +abbabbaaabbaaabbbbbbbbba +aaaababaaaabbaabbbbbababbbbbabbaabababba +aaabaabaabaaabbaabaaaaab +ababbbaabaaababbabbaabbaaabbabbb +bbbabaaaabaabaaabaabbbab +abaabbaabaaaaaabbababbababaababaaaaaabab +aababbabbaaaaaaaabaabaab +aababbbbbabbabbbabaababaaaaababbbbaaaabbbbabbaab +abbaabaaaaaaaaabaabbbabbaabbaabbaababaabbbaaaababbbabaab +bbaaaabbbbbabbbababaabbbbaababaaabbaaaba +baaabbabbabaababbaabaaba +abbaababababbabbbabbbbbbaabaaabbaaaaaaba +bbbbbbbbaaabbbaabaaababa +aaaaaaaabbbbbbaababbbbabaababbbbbbaaabbbbabbaabbbbabaaababaabaaa +aabbaabbbbbaabbbbabaabaaabaabaaabbabbbbabaababab +baabaaaaababbaaaaaaababbabaaabbb +aaaababbabaabbbbbabbbaba +bbbbbabaabbbabaaabaaabab +abababbbabbbabaaabbabaab +aaaaaaabaaabbababbbaabbbabbbbbbaababbbbb +bbabbbbabbaaaaaabbaabbabababaaabbbbaaaabbbaabbaabbabbaaa +aaaaabbbbbaaabbaaaabbbaaababaabbbaaaabaa +aababaabaabaabbaabbabbaa +aabbbababaaababbabbaaabaaaaaabababbbaabbaaabaaaaabaaabaabbaabbaabaababab +baaaaaaabbbabaaaaaabaaaa +baabababbbbbaababaababababbabaab +bbbbbababaaabbaaaabaabab +bbbabbaaabaabaaaabbaaaba +abaabbbabaaaaaaabaabbbbb +aabbbbabbaabaababaabbabbbbabaaaaaabbbbba +bbbaaaabaabbaabbabaabbbaaabbaabbaabbbbbb +babababbbaaababbbbbaaaabaabbbaba +aabbbaabbabababbbbababbbabbaaaba +aaaaabbbaabbaabababbbabbbaaaabbb +abbbbaaaabbbabbabbaababbbbbbaaaaaaabbaaa +abaabbbaaabbbaaaaabbababbaaaaaabbbbaaababbbabaabaaaabbaa +aabbbaaabababbabbabbababbaaababbabbaaaba +aabbabbabbaaabbbabbbaabbaabbaabaaaababbabbbabaabbbaabbbb +abbbaabbbabbbabaababbaab +babaaabbbbbabababbababbbbaabaaababbaabbabbaaabaaaaaabaab +babaabbbbbbbaaaabaaabaab +baaabbabbbabbbaaaaabbbbaaaabbbbabaaaabbbbabbaaaa +bababbbabababbbabababaabaabbabbaabaaabbb +aabbbaaaaaaabbbbbbabaaab +aababaabaabbbaaaabbbbabb +bbbaabbbbabaaabbbabababaababbaab +bbbabbaaabaabbbaaaaaaaba +bbbabbaabbbabaaabaababbabaaabaabbbbbaaba +aaababaaaaabbabaabbabbabbabbabbbbbbaaaabbaababbaabbabbaaabaaabaaababaaabbbbbabab +baabaababaaaabbbaaaabaabbabbababbabbaaabbbbbbabbbbaabbbb +babbbaabbaaaaabbaaabbababaabbbbaabbaaaba +bababbbaabaaaabaaaabbbbb +aaaabaabbaaababbbaababab +bbaaaababaaaaabbaababbabbaaabaaa +aabbbbabaabbaaabaabaaaba +aabaabbabbbbbaabbaaabbabbabaabababbbaaabbaaabbbb +bababbaabbbbbaabaaabaaaa +baababbbabbbabaaaabbaaaabababaabbbbaaaba +abbaabaaabbbbbbabaaabbaaaabbabababaabaabbbaababb +babaaaabbabbbaabbaabaabb +abbbaabbaaabbbaaababbaab +abbababababbaabbabbabbabbaabbabaaaaabaaa +aabaabbbbabbbbbbbbbbbaabababbbbbabbababb +bbbaaaabaabbbbabaabaaaaa +ababaabbbbbabbbbbabbabbbbbaabaaa +abaabbbaabaabbbbbbbbaabb +aabbabbaaaababaabaaabbaababaaaaabaaababa +abaaaaabaaabbbbbabbaabaabbbaaababaaaaaaaabaabbbbbbbbabbbabbabbba +bbaaaaababaabaaaaabbaabbbabbabaaabaabaab +abaaaaaabbabaabaaabbbbbabbbbbbaa +aaabbabaabbaaaaaabbbabbaaabbbbaa +aabbabbabbaaaababbbabaaabbaaaabbabbaabaababbbbbabbabbbba +baababbbabbbbbbaababbabaaabaabbabbbaabbbbabbaabbbbbbbbabaabbabab +abbaaaaaababbbaaabababba +bbaaaaabaabaabaaabbabaab +baaabbaaaabaabbaababbaaaaabbbaabababaabaabbbbbbabbaababbaaabababababaaababababababbabaab +bababbabbabababaaaabaaabbabaaabbbbbaaababababaaaabbbbabb +baababaaaababbbbbaababab +babaaaaabababaaabbbbbbaa +baaaaaaababbbbabaaaaabba +babaabbbbbbaabbaaabbaabababaaaaabaaaabbabababbbabaabbbaa +abaabaaaaabbaaaabaaabbbb +abaaaaaaaaaabaabbabbabba +ababaabababbabbbabbabbab +babbaabaaaabbaaababbbabbbbbbbabbbababbaaaaaabbab +aabbbbabbabbabbbbabaaaabbbabaaaaaaabbbaabbababaaabbbbabbaaaaaaba +aaaaaabbbabbbabbaabbabbbbaaaaaba +aaaabababaaabbaabbaaabbaaaabbabbbbbbaaba +abbaabaaaababbabbaabaabb +bbbbaaaabaababbbbabbaabb +aaaabaabbbabaaaaabaabbabaaaabaaaaaabbbab +aaaaaaabbbbbaaaabaaaaabbaababaabaababbaababbbabaaaaabbba +aaababbbabbbaabaababaabbaabbaabbaabbbbbabbabbaaaaaabbbab +babaababbbbbbbbbabbbbaab +bababaabaabbababaabbababaabaabbabbbbbaabaabbabbaabbaaabaaaabbbab +baababbababbaaabbbbbbbba +aaaabababbbbababbaaaabab +abaabbabbabbaaabbaabaaaaaaaaaabbbababaabaabbbbbbbbbbbbaaaaaaabaa +bbabaaaababaabababababba +babaabbbabaaabbabaaaaaabaaaaaabbaabbabbabbabbababbabbaaa +babababbbaabbabbabbbbaaabbbbbbaaaaabbbbb +abbbabbaaabababbaabaaabb +abaabbbbaababaabbaabbabbbaaababbabababab +aababbabbabbaaabbaaaaaba +bbbbbbabbbbbababbaaaaaabbaabababbbbaababaaabbbbbabbbbabb +bbaaaabbabbaaaaabbaaabab +aababbabaabaabbaabaabbaabaaababbbbaaaaaabaabbbaa +bbaabbaaaabbaaaaabaabbbbabbaabbabaaabbbb +babbbaaabbbabbaaaaaaaaba +aababaaabaabaabaaaaabaaa +baabaaaaaaaaaaababbbbabbaabbbaabbaaaaaabbaaabbabbbbabbaabbaaabbabbaabaaa +bbabaabaabbbaaaaabbaaaba +bbbaabbbbaabaaaaabaaabaa +aabbbbabbbbbbabaabbbaabaaaaaababababbbab +babbbabaaaaaaaabaaababab +aaaabaabbaaaabbababbabbabababaabbaababaaabbabbaabbaababb +bbaaaaabbbabaababbaaabbaabaaaabaaaaababbaaabbbaaabbabaaabbaaabaaabaaabbbbabaaababaabaabb +babababaabbabbbabbbbbaabbbaabababaabbabaaababbbaaaaabbbabaaaabbb +baaaaaabbbbaabbaababbaba +abbabaaababbaaababbbaabaaaaabbaabaaaaaaaabbbbaab +aabaabbabbaaabbaabbaaaba +aaaabaabbbaaabbaaabbaaaaaabbaaabbaababaaabaaabaabbaabababbbbaaab +abaabaaaababaabaabbbbaab +baaabbabbababaaaaabbabaa +abbbaabababababaabbabaab +aaaababaabaabbaaaabaabab +bbaaaababaabbaaabbaaabbaabaababb +aaaaaaaababbaaababaabbbbbabababbbaabbbabbbbaababbbbbaaaa +abaaaaaaaaaaaaabaababbaababababaaaabbaaa +bbabbbbbababaabbbabbabbb +bbababbbbaaaaaaaabbaabaa +abababaaabaabbbbabbaababaaaabbbb +aababbaabbababbbbbbabbbbaababbbbbbbababbbbaabaababbbabbb +baabaababbbabaaabbbbaaaabaaaaababbaababa +aaaaabbbbabaaabbabbabbaa +bbbaabbababaabaaababbaab +babbbaababbbbaaabaaaabab +abbaabaababaaabbbaaababbabbabaaa +aaabaabaabbababbabbbbbbbbabbbbab +aabbbabbaabbaaabbbabababaaaabbba +babaaaaabbaaabbaabbbbbbababbaaba +abbbaabbbaababbbbbabbbba +aabbababbabbbabaabbabbbb +aaaaabbbabababaabaabaaab +bbbabbaaaabbaababbabbaab +ababbaaabaaababbababbbab +bbbabbbbbababaababbbabbb +abaaaaaabaaabbabbbabbbba +aaabababbbaabababaaaababaababbabbabbaababbbbabbbaabbbbabbaabaaaa +babbbbbabababbbbaababbabbbaabbaaabaaabbbbabaabbabbbabbbbbbbaababbbbabbaaabaaabbbabbbaabbabbabbab +babaabaaabbbaabaabababaaabaaaabbababbbbb +babaaaaabbbabbbbbbbbbabababaabaababbaabbaabaaaba +baababaaabababaabbaaaabbbaabaaab +abaaabbababaabaabbbbababbababbabababbbab +abababbbabbbaabbbbbbaaaaaabbbababbabbabb +aaaabbbbaabbbaabbaaababbaababbabbbbbaaab +babaababbbbbbbabaaaabbbbbbbaaaabbbababab +aaaabbbbabaaaaaabbaaabab +bbbaabbaaaaababbbabbbabb +bbabbbaababbbaaabbbbaabb +bbabaabbbababbbabababbbabababbbabbbaabbabbabbaaabbbbbabb +bababbabbbbabababbbbaaaaabaabbaababbaaaa +aaababbaababaabbbabaaaaababbabaa +aaabbababaabbabbbbbabaab +bbbabbbaaaaaaabbaaabbaabbaabaabaabaaaabb +bbbababbabbbbbabbabbbbbbbababbaaaaaabbba +babaabaabbbaabbbabbaabababbbbaab +abaaaababbbbbbbbbbbaaaba +bbabaaaabaabbbaabaaaababbabaaaba +abaabbabbbaabbaaabbaaabb +baababbabaababaaabbaaabb +bbbbbaabbabbabbbbababaaaaaaabbabbaabbbab +aabbbbbbaaaabbbaaabaaaaaabaaaabb +abbaabbabaaaaaababbaabaababaaaabbaabaaaababaaabaaaaabbaaaabaaabb +ababbaaaaabbaaabbbabaaab +bbaaabbabbabaaaaababbbaaabbbaababbbabbaaaaaabbaaaaabbabbbaaabaab +bbaaaabbbabbbabbaabbbbbb +ababbabbaabababbaaabbbbabbbbabbaababbbab +abbbbbbaaabaabbbaababaabbaabbabbaaaaaaaaaaaabbbaabbaaaab +aaaaaabbbaabbaaaabbbaaaabaabbbab +babaabababababbbabaabbaaabaabbbbbaaaaaaababbabaa +babaaaaababaabbbababbbaaabaabaaababaaabbabaaabbbbbbaaabbbaabbbab +bbbaaaabbbbbababbababbaababbbbbb +aabbbaaababbaaababaabbbbababbbabbbababab +abbbbbbabbbabbbbbaaababa +baabbaaaaaaababbbabbabba +aabaabbabababaabbbaabbab +bbbbabbaabaabbbbbbaabaaa +bbababaabbabbabaaaaaabaaaabaaabbbbaaaabaaabbabab +aaaaabaaaabaabbbabbbbaaaabaaababaaabbbabbaaabaaababbbabbbbaababbbbbbbaabbaabbbabaababaaa +babababbabaaababaaaaaaaaaaababaabbbaabbbbbbaaaaaaaabbabaababababaaabbbabbbbaaaaa +bbbabbaabababbbabaaabbabbaabaabb +babbbabbbabbbbabbbaabaab +aaababbbabbbaaaabaabbaababaaabaa +bbbbababaabbaaaabbbbbaababbbaababbaabbab +abaabbbbbabbbababbaababb +baababbbababaababbbaabaa +abbbbbabababbbaaaabababa +bbbabbaaaababbabbabaaaaaaaaabaaabbabbaba +aaabbbaaabaabababbbabbbaaaabbbbabaababaabbaababb +aaaabaababbbababbabbabaa +babaaaababbaababbaaaabab +abababbbabaaabbabbaabbba +aabaabbababababaabaabbabbababbabbbbbaaab +aaabbababbbbbaabbbbabbbabbaabbbaaabaaabb +babbbbbbaaaabaabbbaaaabaaabbbbabbabaabbbbabbabbbaaabbabb +babbabbbabababbbbaabbbbb +bbaabbaabbbbababbbbbbbba +baabaabaaaababbbbbbbaaaaaaaaaaabbbababba +aabbaabaaaabaabaabaaaaaababbbaaabaaaaabbabbbbaba +baaaabbaababbaababbababa +babaaabbabbaabbaaaaabaabbbaabbaaabbaabaabababbbbbabbaabb +bbaaaabbaaabbaabbaabaabbababaaaaabbababbababbbbabaaabbba +abaabababbbaabbabbbbaaba +bbbbabababbaababbbabbbab +bbbbababaabbbabbaabbbabbbbbaaaabbababbbbaaaaaabaabbababb +aabbbbabbbbabbbbbabaaabbbabaaaabababbbab +babaaabbbbbbbbababbabbbb +baaaaaaabbbababaaabbbabbbbaabbabaaabbabb +aabbabbabbbbbbbbbaaabbabbaabaaabbbbabaab +bababbabbaababbabaaaaaabbaaaabbaaaabaabaaaaaaaababbabaaabbaaaaaaaabbbabbbbbabbbaaabbbbaa +aababbaabaaaaabbbbbbbbba +bbabbbaaabaabababbabbbbbaabaabaabaabbabbaaaabaababbababbbaaaabbb +bbbbbabaabaabbbbabababab +baaaaaaabbbbbaabaabbaaaaaaaabbbbaabaabaabbbbaaba +aabaabaaabaabababbbbbaaa +bbbbbababaabbaaaabbabaaa +abaababaababbbaababbaaba +babbbaaabbaaaabbababbaaaaabababbaaabaababbabababbaaabaaa +bbbbbbabbbaaaababaaaaabbababaabbbbababbbaabaaaba +bbabaaaaabaabbababababbbbabbaaabaaaabaaabaabbbaabbabaaab +abaabaaaabbbaaabbabbabbbaabaabaaabaabaab +aababbabaabaabaaabababba +aaaaaabbbababababbaabbaabbaabaaaaaababab +bababaabbabbbbaaaaaaabbaaababaaaabaababb +babbabbbbaaabbabbbbabbabaaaaaaba +bbaaaabababbbabbbabaaaba +abababaababaaaabaababbabaaabaabb +abaaaababaaaabbaaabbabbb +bbaaaaabaabaabbbbababaaababbbaabbabaaaabbbbabbbaabbbabab +baaaabbabbbabbaabbabbabb +bbbabaaaabababaaaaaaaaabaaabbbaabbaaabbbababbaaababbaabaabbbbbbb +abbaaaaaaabbbaababbabbbb +aababaabbabaababbbbabbbabbbababaabbbabaabaaabbbaabbbbaab +bbaaabbaaaabaabaaabbababaaaaaaba +aaaabbbbaabbaabbbabababbbbaababbabbbabab +babaaaaabababaabbbababab +aabbaaaaaaaaaabbbbaabaaa +abbbbbbabbaaaaabbaaaaabbaabababaaabbbbaa +bbbababbabbaababbbaabbab +babaababbbaaabbabbabbbaaabbbaabaaaaaaaaaaabaaaaa +abababbbbabbbaababbaababbaaaaaba +abbbabbabaababbaabaaaabb +aababbaaaaabbabaaababbabaaabbaaaabbabbaa +bbbabaaaaabaabbababbbbbbbbbabaab +abbbbbabbbbbbbababbbbbabbaabaaab +bbbaabbbaaaabaababbbaaaaababaaba +baaaaaaabbbbababbaaaabbabaabbabbbaabbbaabbaabbab +bbbbbaabaabbbabbbaababab +aababbabaaaabbbbbbbbabababaabbbaaaababbaabbaabbb +babaaabbbabbbabaabbbaaaaaaaabbab +abbbaabaabbaababbbbababbbbbbbaaa +aaaaaabbaaabaababbbababaaaababbbabbbbbbaaaabbbab +bbabbbabaababbaabababbbaabbaababbbabaabababaabab +babaabbbbbaaabbbbbaababa +aaababaabbbaaaabbaaabbba +abbaaaaaababbaaabbaabaaa +abbbbbbaaaababbbaaaabbbbabaababb +bbbbbababababbabbbababbbabaabbaa +bbaaabbbabbbaaabaaaabbaa +bbabaabbbaaabbabbbbabbabbbbabaaabaabaaaaabaababbbbabbbab +aabbaababaaabbabbabbbaabababbabbbaababaaabababbbabaaabbbabbabbaa +bababaababbbabbaaaababab +abaabbabbbabbbabbaaababa +abbbaabaabbbaabbaabbbaba +aababbbabaabaaabbbbabbbbbbbaaabbabaabaaaaaaabaababaaaabaabababbbabaaaaba +abaabbbabbbbabbaaabbbbba +abbbbaaaabbbbbababbbaabaabbbaabbabbabbaa +aababaabbabbbabbbaababab +bababbaaabaabbbaabaabbbabaabbaba +bbbabbaabaababaabaaaabababababaabbaaabbaaaaababbbbababab +baaaabbaaaaabababbaaabaa +abbaaaaaaababbaababbababbbabbbabaabaaaba +aabbbbabbabbbababaabaabaaababbba +baababaababaaaaaabbaaaba +babaaaabaabaabbababaabaabbbaaaaa +babbbbbbbbbabababbbaaaabaabaabbbbbbaaabb +aabaabbaabaabbaaabaabaab +aabbaaaaabbbbbbabbaaabbababbabbabbaabbbb +babbbabbaaabbababbaabbba +abababaaabbbaaabaaaababbbbbaabaaaaaaabab +bababbababaabaabbabaaabaaaaabbba +bbaabbaaaabbabbabaaabbbb +abaabaaabbababaaaaaaabaabaabaabb +bbababbbbaababaaaabaabaaababbaaababbaabbababaaaaaabbabaa +bbbababbaaabbbaababbbbabbababbbabbababab +abababaabbabaaaabaabbbab +abababbabbaabaaaabbabaaabaaaabbb +bbbaabbbbabbabababbbaaaabaabbbba +babaabbbabbbaaabababaaababbabbbabaaaabbaababaaab +bbbbbababaabbaaabbbaaaaa +aabbaabaabbbaababaaabaaababbabaaabbabbbbbababaabbabaaabbbbabaaabaabaaaaa +babaababbabaabababbaabbaaaaababbbbaaabaaabbbababaabbabaa +aabbbaaaaaababaaabbabaaa +babbbabbababbaaabaabbaaabbbabababbbabbbabbababba +abbaabbabababaaababbbbbbabbababaabaababb +ababbbaaabaabbbbabaaaaab +abaabaaaaabaabaabbaababb +abababbbbbaaabbaaababbbbabaababb +abbbabbaabaaabbaabbbaabaaabaaaaabbbaabab +ababbabbbbbabbbbaaaaaaabbbbabaab +abaabbbaabbaababbbbbbaabbabababaaabbbbbb +baaabbabbababaaaaaabaabaabaabaaabbbabbabababbbabbabaaaba +baababbbaaabbbaaaaaaaabbabbaaaaaaaaabaabbbabbbba +aabaabababbbabbbabbababbabbbbababbbaaabaabaabbbabaabbaabbaaabaab +bbbaabbbbabaaaabbaabaaab +abbaabababaaaababaaabbaaaaabaaabababbbbb +aabbabbaaabbababbbaababb +bbaaaaaabbbabbaabbabbabbbaaaababbbbaaaab +abaabaaaababbbaaaaabbbab +babaaababaaabbaabbbbabaababaabbabaaabaaaaabbbaaa +baabaababbabbbaaababaabaabbaaaba +aaaaaabbabababbbabbababb +babbaaabbabbbbbbbbaaaaabbbaaaaabbbbbaaaaabaabbaabaabbbaa +abbaabaaabaaaababaaababa +aaaabbbbabbabbbaabbbaaaaaabaaabb +bbbabbbbbaababbababbbbba +aababbbbbabaabaaaaaabaabbaaaabbb +aaabbaabaababaabbbabaabbbabaababbababaabaababaababbbbaba +aaaababaabaabbbababbbbba +babaaaaaabaabbabbbbabbaabaaaaaabbaaabaab +abbbaabaaababbbbbbbbaaab +baaabbaaabaabbbbaaaaaaabbbbababaabbbbababbbaaababbabbbab +babbabbbaabbabbaaaabbabaaabaaaaaaaaabbba +bbbabaaabbbbaaaaaabbaaabaaabbbbbbbbaaabb +aabbbbababaabbbaabbaabababaabbabbaaabbaaabbabbab +bbaaaabbbbbbbaabbababbaabaaabbbb +bbabbbabaabaabababaabbbaabbabbaaabbbabaababbaababbaabbaabaababaababaabaaaaabaaabaaaaabbbbaaaabbb +baaabbaabbabaaaaabababbabbbbabbb +aabbabbabbbbbbbabaabbabbababbaabbbbaaaaabaaabbaaabbbbaba +bbaaabbbbbabaabbaaababaabbbabbaabbabaaaabaabbaab +aabbabbbbaaaaaabbabaaaababaaaabaaabaaaabbabaaaab +bbabaaaabaabaababbababba +babbbaabbaaabbababbabbaa +aababaabbbaaaabbabbbaaabbbababbbbabbbabbbbbaaabb +babbbabbbbbababbbbbaaaababababbbabababaababbbbabbbabbabb +aaabbbaabbaabbaabaabbbba +abbbbbabbabaabaaaaaabbaa +bbbabababbbaaababbbabbbabaabaaabbbbbbabbaabbbbbbaabababaaabbabba +abababaaaabbababbabaabbbaabbaaabababaababbbaabaabbbaabaa +abbbaabbababaababbbaaabb diff --git a/tests/aoc-2020/input/day2.txt b/tests/aoc-2020/input/day2.txt new file mode 100644 index 00000000..1c12bdc1 --- /dev/null +++ b/tests/aoc-2020/input/day2.txt @@ -0,0 +1,1000 @@ +3-4 j: tjjj +7-10 h: nhhhhhgghphhh +7-13 j: tpscbbstbdjsjbtcpj +4-13 l: ckllmqzlvcsxpplqg +3-11 n: nnrhnnnnnnnwsdnnnm +5-6 d: ddddddb +7-10 z: szfwzrbzzz +1-10 w: wwwwwcwwwrpnwzwxww +5-6 w: cgwppfwlwrwtnw +12-13 m: bmmthmmhmmmbmmmmm +1-4 b: gbbj +10-14 k: kkkkkkkkkfkkkzk +1-3 n: nndn +3-4 w: wwpf +15-16 q: qqqqqqqqqqqqrqqqq +3-4 w: wwcg +10-12 r: rrrrrrrrrcrrrr +10-11 v: fvlvrvcxvvp +4-11 l: qdklwltggdcqn +2-4 p: ppskptpp +3-8 r: rjrrgrrk +5-9 g: mgglggggrggggggxkggw +9-16 n: njnnnnsnrnnnnnnhnnnn +4-5 v: fgjvvxtqdmtqhnd +2-11 r: rrfbltcxmqm +4-7 q: hdkqfsq +2-4 s: smshsswsztsmgssssss +8-9 m: mmmmmmmlwm +2-9 x: xxxxxxxxpxxxxxx +3-4 d: zdgddd +16-18 q: qqqqqqqqqqqqqqqbqj +2-12 s: ssssmssssssssss +8-9 q: dnztqqjqq +1-3 d: ddddddddd +2-10 h: hhhhhnhhvhhbhhhhhh +8-11 l: wpjmvxqlmqllprw +3-14 w: wwwwwwhwwwwwwpwwwwwf +2-3 m: dlggmnlr +1-6 b: bbbbblbbbbb +1-10 c: ccbhdccdhltc +2-11 g: cgrggfsgggggj +10-15 t: ksnnwcqxcpzsvtcvtwm +6-7 s: ssssssps +17-18 j: wpjjjjjjjmjjjjcjjj +7-8 m: cmqmmmlz +3-4 m: mqmm +3-10 h: dfhkkztbmhvcjvh +7-16 x: rqwfvspqcxmpxnwxbd +2-4 b: wfbbbfnj +1-3 j: jjjj +7-8 m: mmmmmmtw +14-15 p: kpppwppppppppdppqp +7-19 d: dddqrdkcgxxxdddddrdc +1-6 l: cnlgtlc +2-6 f: nfffffvfffqfrf +11-15 s: sssssswsscsqbjdss +6-14 s: sssfsssmsssssbsrnsh +6-7 c: fcnppcc +4-14 n: rshnnldbsnwvnwnnqnwn +2-4 c: lcccrghcqwvc +9-15 b: bgvjbclttvbqprb +5-10 l: hlllqldgllnpttxqllrl +8-18 h: hbhjknpnhvhpsbvsrdmh +5-9 d: dddddddddd +6-7 x: xxxxxxqd +6-17 x: xntqxxxxxxxxxnwqnn +10-19 f: fffjfffzfflhnfrsffq +5-8 b: bbjfzdbhbb +2-3 j: jljl +16-17 s: swvsvsszsshssksssrn +3-8 t: vtmhjrbx +7-11 p: kpppppppppppppp +3-4 j: wjjjk +9-10 b: lbbpbbbbvb +4-9 l: jrlbmrthlbjlmpgf +5-7 g: vggggbwxgslgj +11-17 f: gfmjfffdzfmvffpqff +6-11 t: nbbbttmhbtwt +6-7 p: jpprgnspppf +6-7 w: wwwwwjwq +8-11 g: zggggggchglqgggg +15-16 x: xcxxxxbbxxxxxxxb +2-16 d: xmnpfhvqnxcqdrgcw +8-9 d: fdskddfwlddb +3-9 x: xxxxxxxxs +2-6 p: pppppbppps +3-6 t: bjtptj +18-19 w: qwwwwwwwwwwwwwwwwwww +6-15 n: nkfndnxwzfjsvhnp +3-4 v: lnvv +7-13 v: mvvvvvbbvvvvmvv +4-6 d: ddddds +4-8 b: ftpbnfbsblvbvhlhtlb +3-4 g: fnkf +1-4 x: xxxw +1-8 r: rrrbxnsrqrrrrqrr +13-14 z: zzzzcvzzzzzzzzzz +4-9 x: zhtvxfbzxdvkn +1-9 d: zdddddddddd +10-12 g: lhhddwgnjjwz +6-12 p: ptpwlppsrzphlppqpd +11-16 f: pfnxnbsfbsfdbzrx +11-14 r: mccfwbcpbhrrlnvn +10-14 w: wnwwwswtwwkwnw +14-17 k: kkkkkkkkkkkwkwkkk +7-9 g: kgkjktghg +1-4 x: mxpxbjxxtvmw +2-6 z: zzsswzr +2-8 g: mcktgkkgqmcn +8-19 n: znjnwhhnnwfdnhncwjdw +3-4 k: pkgljmkdfhsxhpvwc +7-13 m: mkpmmmqnmkmjrmcmm +2-3 w: wvwcwxr +19-20 q: qqqqqqqqqqqdqqqqqqmq +5-6 r: rkqcrhs +4-6 b: bbbbbq +3-11 d: ddgddddddddd +15-20 m: mmmmxmmbmrmmmfmmmmmm +3-4 q: qhwq +15-16 n: plzwngnnvzcnwknn +4-11 l: ghlswpdrqvlsfj +3-13 m: xdmvpmhktsmfm +4-7 b: bbbbbbbbb +4-10 w: mwwwgmgtwnwpbnw +7-9 l: llllllpvlll +3-11 z: zzdzzzzzzzzz +3-4 h: hpnkhtz +18-19 b: bbbbbbbbbbbbbbbbbbdb +5-11 q: tqqqqbcqqqqdhq +4-8 g: sgtgglgpgwjjj +10-12 d: ddddddtkdcdr +7-8 h: hhmhhhhh +2-9 h: hrhvhhxhxghghh +5-6 x: vxxxrh +3-5 n: cgnfn +17-18 z: bzzzzxtzcxzjvzzlzbn +10-13 f: nfxwjfffffpfvffbvff +1-3 p: pxpppp +1-3 g: gqgbg +9-10 v: vhfpwvvbvvfvvv +3-7 r: rrsjrffrvwrrrr +3-10 g: qlrrgglblwpjqccmw +13-14 x: xxxxxxxxxxqxxx +4-12 h: xrbkrnxjghkp +13-14 s: xhsssswkssrsls +6-8 r: rrrpgrrgrzr +12-15 m: cmmmmmmmmmmmpmx +2-8 l: wccfwrxl +1-13 f: ffdfpdffffffffff +10-12 d: dxdddddddddj +9-18 b: ltnbbbmrfqbbbfbbgnd +2-4 k: kbkklk +7-8 n: nqmdncklnqnftjpvrcj +6-7 s: ssssszshsss +5-8 t: tttttsttttt +11-19 k: hkvrktkkkkthrkvkkkkf +3-5 x: qrxxbx +11-12 d: ddddddddddzgd +7-18 d: ndszddkddsdbdcqdddp +7-8 t: ttttttttt +2-4 s: gsksqskhjb +9-13 d: dlqxsdddjdddg +2-6 n: fgndtf +6-11 s: sssssssnbsvss +4-10 p: kjtpbjwpmb +12-13 s: wssssssplsstscsszsds +2-4 h: jthg +1-2 z: zzzszhzzrvqz +8-9 j: jjjjbjjncjj +3-11 q: qvlqqqqqqqfqqqqqqqq +8-15 w: pfqmwwwwqsccwgllm +1-4 q: nqqhq +7-16 k: kkkbktkkkjzhlkkkf +4-11 s: kzjssthfsbtndfsd +1-13 g: gbggljgggggggngggk +1-9 q: qqqxlqvsmqg +17-18 g: ggggggggggggggggfgg +6-8 n: nnnnfsnrzksn +2-4 k: zkhk +10-12 n: gnfnnkknnnmnp +1-3 j: jxnxw +5-6 n: nbnknsjkmnh +3-4 f: mkhf +11-14 f: ptnpgkfzgzgxpk +3-4 g: gwdj +2-4 h: hhkh +4-5 b: fvbzqx +1-4 x: fxxp +4-13 c: cccckcmtcccdccrcccc +1-7 r: rrrrrrnrr +9-12 g: rdhzhbspgxgccmmggg +4-6 f: smfndrpscf +2-6 j: jjjjjjj +4-5 d: dddnzdd +2-5 b: rbwgd +4-6 s: sssssss +3-6 d: dvnmjd +10-14 x: xxxxxxxxxsxxxxx +3-5 t: swttxctxf +3-20 m: pxmlmzwzmjmnmnmcmmmr +3-4 l: gdll +9-13 h: kmhhhnznshhhhhsmhfx +6-9 d: ghdlqfdmthdsjdcjht +9-10 j: jdbqjjjjjjdjj +4-7 q: qqvhbnqzxt +5-18 b: mblpnblwlxjbxhqcmbl +6-9 j: hjcwsvdgq +9-16 t: kbtdksjcmmqpngdm +6-9 z: zzzzzzzzzgzzzkzz +18-19 x: xxfrxrgbbxpxxxxxxxqx +4-5 b: nhbbz +9-11 w: whwwwwhwwhwwww +2-3 w: whww +3-4 s: bsfsdgs +5-7 k: kkkkhkwk +5-9 f: ffxfffffqf +4-5 z: bzzzggzjr +14-17 n: nhjnxnnwxwvxnnlnv +6-7 p: xpsklmg +1-6 b: rbvblrkcblbbbb +3-10 k: kkxkkkkkkck +2-7 x: wxxdxgxtxqxxqxxxxx +3-6 k: kwkfkznkkkq +10-14 k: klqkksvskjkzmkkk +2-6 p: wprgppgppszh +4-5 b: bbbgbk +8-16 b: kblbbbpvmjpbbfhhgbb +6-7 g: hgdglzg +3-7 g: lcgtgvl +1-4 s: cssxs +11-14 m: mhdpbnxqtpvfck +11-20 b: bbbbbbbbkbnbbbwrbbbb +1-3 l: lpcthzrgmmplrlxnbnw +2-4 l: lbls +11-12 h: thhhwhhhhhbf +1-8 h: hhnlnhrc +2-3 r: frpl +8-12 p: ppppppkppnfpnspp +6-14 f: fffffffcgrffffffk +11-13 n: knnkrnkhvnvhsnhjmfb +1-3 m: jmhjkk +3-10 g: ggggggggggggggggggg +6-8 m: mmhmmrtzrbgs +14-15 c: nnvzfcvcrqcxbcw +1-5 j: jjjjz +1-15 r: rzjdmjjlfrbrmrrwlrr +4-11 j: jjzfjjljnjjjjpj +2-3 h: hhdh +4-10 p: rppwqpppppp +2-6 q: qqmwmqq +10-19 t: dhjttjkspttxzbtxjmx +10-11 r: rrhtjkdrrjl +3-4 w: wwxwf +4-17 n: ncsnlnnnnqnnnjnnqbc +3-10 b: bnknbwbbbbb +10-13 v: vvsfvjltvbwvvvnzv +12-18 w: wwwwwwwnwwwfwwwwwww +2-14 w: dwbmkgmqbqlcpwv +1-9 r: rrrrrrrrkr +1-5 f: ffflffffffff +11-13 f: ftffffffffffgfff +1-7 r: rwrrrrrrrr +7-13 x: jthgxdmdxrbmvf +5-6 r: wqdtqzrt +4-13 d: kccfgmvknwbddrxmx +9-18 x: xxxxxxxxcxxxxxxxxxx +9-10 h: hhhhhhhvhhh +8-16 v: gpblbxmvzhdrnjbrv +6-10 t: ttttttttttttttttt +5-9 k: slkkdtvhk +4-5 f: ffpjq +7-16 t: tktttttttttgtttttt +4-7 k: kkkjkkdb +3-4 q: qmvq +2-7 b: whmfplbb +16-17 p: pppppppppppppppppp +5-7 h: hwphhngh +4-5 w: kfjwlwcbhgz +5-6 p: pxhppps +17-18 k: pkmgdkdkckkvlrtnzj +12-14 z: dkzzzzzztkmjzh +6-9 d: ddddddddddjddddd +1-6 v: vvvmvznvvbv +1-8 b: bltbdzjb +8-9 v: vvxvhvbvl +8-15 m: mmmmmmmmmmmmmmvmm +12-14 k: kkkkzkkkkkkkkk +13-15 j: jjjjjjjjjjjjjsnj +3-6 r: rrmrrrrr +4-13 q: pqdrqqqqfhcqq +2-7 b: lbzbkpbgvb +5-9 h: hhmhrhhhhhhh +4-5 h: hhfhb +1-2 f: rfcjf +4-12 f: gcffrbpvcnhvcrrj +5-6 q: qcqrgs +10-14 l: xcflwdwgbrqjwl +13-16 v: qkvxzcltfsvmzgxqvt +7-9 g: gggggggggg +17-18 c: ccbqmccwcccfccgccc +2-6 k: lkkkkwkk +3-12 v: rqvqkhwxsrvv +9-10 s: ssssqsksssss +5-6 j: jjjjzj +6-7 m: jnvpssgqtczz +2-15 d: hdjhrksnlsbxdjdwvf +11-18 m: mmmmmmmmmmzmmmmmmmmm +5-6 m: mrdjgl +3-10 h: xthspkwhjhltlcrds +2-15 p: pbpppppdpppppppppkpp +1-5 n: nznwn +8-14 h: zghhhhghkzhllj +15-19 v: vvvvvvvvhvvvxvvvvvg +3-5 p: ppzpsbpp +2-5 b: bwkdrdpkrtjdv +8-12 x: qlxxxxvxxxsxgx +2-10 z: zzzzzzzzzz +2-13 w: bfvwhwwwpwbwwm +8-10 p: pppppxpppc +13-14 h: hthhhhhhthhhhzh +5-7 l: llllccw +3-4 w: wwww +2-14 m: mnmmmmmmmmmmmgm +2-5 j: jjjzbjj +1-4 r: xrrwr +6-12 f: fphbffwmffnzf +1-5 z: pzkszsjzkdqxgzknrd +5-10 b: bbbbbkbbkb +9-11 d: dxrpkjhrddl +5-11 n: bnlnnhqjbbn +10-15 g: gggggggggwggggbggg +4-9 q: jqqmqdqxfq +6-9 q: lfcbxpqgqc +7-13 j: jdcjjmjwfrjnnr +1-13 g: xgggggggggggcggg +10-11 d: ddvdxdmdddk +4-6 n: nnnxnt +5-7 n: hnjnnfnfpnrdntrh +3-8 b: bgbrffxlbrbbb +9-13 z: fdhdzzznzxzgj +2-7 r: rqrgblk +10-14 j: jxkjpjbjjjjjjsggjpp +3-4 m: mmmm +5-6 m: mmmmmmmm +3-8 k: lvkvqcgkzkdcptc +7-13 g: glbnggkbzkghgmg +5-8 d: dddddddcd +4-5 l: llllh +5-15 w: wrwwwwwwwwwwwwwwqwww +14-16 p: ppzppppptdpppsppppp +8-12 p: ppxpppvppppkk +15-17 x: xxkxxrkxxxxfpxxxx +12-15 s: ssssscsssvssssgcs +4-6 p: pppppp +3-4 j: gjjjjwwj +3-5 f: mfwhfpk +16-18 p: pppppppppppppppxpmp +1-2 m: mnmcrmq +10-19 t: bttttttbtttttttttttt +1-13 z: qzzzzzzzzzzzzz +11-17 w: zpdsdfmhgmvcvzkdwpw +5-7 z: zzzlfzgzz +8-15 d: dddddddpddrdqgt +2-3 k: nkjkk +11-12 q: qmqqqqqqqgnnfqkqc +1-2 p: pgpp +5-6 b: fnbzbb +11-12 z: zpzzczkzzrpszzzzt +13-14 t: ttttttttttwttqtt +4-6 p: phpfpp +2-3 f: fvfws +6-7 f: fffflfdff +8-9 q: cwpqcqzqpf +5-7 p: spppjpkpc +4-11 s: sgsssdbbhpkssd +1-6 s: wsssspsfsss +1-3 m: mdmmmmmm +4-6 d: dtdtmdg +1-3 w: wwzwpww +10-11 l: tlmhlllnqllb +12-17 m: mmmmmmmmzmmtwmmmg +3-4 c: cctkcc +13-14 b: bsbbbbbbbbbbglb +6-7 w: wwwwwxd +1-11 j: kjjjxkjjrqj +5-8 z: zbvjzzzz +1-5 k: gkbktk +11-13 k: kkkkkzpmkkkkm +10-11 z: wtpfvmmpqhg +2-3 s: bssc +8-17 h: hhhhhhhxhhhhhhhjhh +6-9 l: lllllmllll +5-9 l: llllllglll +2-7 q: qkqdsqm +6-8 s: ssssssjtds +7-8 c: ctfdfmccjhvrc +4-5 w: gqcdwcwktmm +4-13 b: wwjbnmghbjkwzbbj +1-9 r: qbprwrrmsrr +3-4 c: kcscl +3-4 d: jdqd +2-7 p: xpzmbfpvpjg +2-4 f: fnfq +7-8 b: wjdqkbbb +13-15 m: mmmmmmpmmfmmgmxmmmm +4-5 c: mpclj +9-10 x: txxxxdpxql +1-5 c: gccjcc +2-8 k: xzkqkhvk +9-11 k: kkkkckkkgkkpkvk +10-14 x: mxzxrkdxgpxcxhxl +5-6 z: hzzztz +10-13 g: wzgggggvgggkl +2-5 p: mmpvk +2-4 b: stbsbbbbbb +9-10 r: rrrgrrrrwqr +1-6 z: xzzfzzv +3-5 l: ljvlw +2-8 f: lfqvjghd +4-5 n: nnznn +5-16 r: csmxrkrqnwnzzpprvr +2-15 h: qhtmxhbgzzsbnjwwsqfl +4-5 s: sfqps +4-5 c: cqcgc +12-13 d: dmcddddddddcdd +3-4 s: xsqs +14-15 j: jjjjjjjhjjjjjjj +12-13 r: rcrsrrrrrrrrrrrr +9-10 h: hhhfxjzvhxhbf +3-5 w: qwvww +4-9 b: bbbfbbbblbb +15-17 b: kdlqpsrbrbbmbbbzbtz +9-10 p: ppqppjppwjpp +11-14 x: mbchwxxxxxxxxf +2-3 t: stdnsv +2-4 s: sbss +7-9 k: kvkfkkqjk +5-6 d: ddddldd +1-12 g: cggggggggggqgggg +8-10 b: bcvxgdzbbbbclbddmcpq +1-3 p: qpppp +3-10 g: mbggbzlwjgrqncddkbjz +3-6 n: nnnnnnnnnnnn +5-14 t: fdtqxdpztgrtzl +7-9 p: ndppppzpppnb +6-9 l: llxlmlldltllll +2-8 p: pwvmbccpvhbqg +2-5 q: bqccqlpj +1-12 j: jjpddhjrjkjb +2-16 j: hnmrxjcspnnrqhcj +2-4 s: scrb +3-11 j: jjjjjjjwjjc +6-9 h: bhlsnhkfhnqhprpdm +2-4 k: skcn +10-15 r: prrbrrnrrrrrrvlrhr +1-2 p: pppp +3-5 t: ttqtttc +1-2 k: kwkp +6-7 g: gggggggfxgmgggggwg +6-17 g: lvgggggnrwqnsggrgg +2-8 v: qvmnvvvzn +5-6 r: rrcmgrvrhrf +6-7 w: cwwhwwq +1-16 l: rllllllllllllllll +14-16 v: vvvvvvvmvvvvvqvvvhv +13-16 m: qmmmmmmmmmdmmmghmmmm +10-13 x: xgxxbtbxgxxxdx +6-7 k: kkvkqkwkkkkvkkkh +16-18 g: ggggggggggggggggggg +1-12 f: ffffffffffsmffn +11-14 c: kmltgplwdccvzchtfs +1-2 l: whll +3-10 r: tchrjqrwnrnhlrzssdr +1-4 b: jbxbrb +9-10 d: dddddddddldd +4-6 r: rwrrrrrlrchnqxv +1-5 z: sjznb +3-4 p: wqtp +3-13 n: zncsfbdxpnpzn +6-8 b: ppbzbvjhmfnq +2-4 h: hhhr +5-6 w: lwrgll +10-15 l: lllllllllllllllll +5-6 l: hltlllbwlr +8-9 q: tpzqmqqssqqqqq +12-17 v: bmxhqtvmrgvvgqzvp +7-8 t: ttttttvtt +11-12 r: rrbrrvrrnsrr +2-5 f: wzrnlcxfhnchsrzjxl +12-17 l: lllllllllrllllldl +9-10 h: phhhhhhhrzhq +5-17 q: chqkqpjqnqjlcvbxlqkq +1-2 m: hbmm +4-10 f: vtfffsbvsff +5-10 h: hhhhhhhphnhhh +2-3 x: xlxxxnxltdxbxdbxpg +4-12 x: nlxxtcbbbknh +2-3 l: llfll +6-9 p: ppppppppp +2-4 v: grwdv +5-8 c: fkpkccdcvdvck +2-8 l: khzlpwdcddk +2-7 v: vlbvvbl +7-8 h: zhhhhhnh +12-14 p: phpxppkprhbpvpp +5-6 j: jjjjcsj +5-12 m: srctztgnwtrmmmwkjk +5-6 s: ssslss +2-3 m: mxmm +10-13 c: ccccdcdcccchzlcw +11-12 k: kkkwkkkkkkkkkk +9-11 g: rfggsgphdhg +8-13 w: wwxwwwzwfwwwtlww +5-6 f: qvpfmt +12-13 n: mlnntnnzblnnvnd +7-8 q: qqqqqqbqqq +4-7 p: hpnvfpmpgqp +14-16 b: bbbxbbbbbbbbbtbdbvb +16-19 g: gwgggcsgggpggjgjggj +3-6 k: kkkptkkdrk +1-7 l: slsrxllllw +3-12 d: dddddddddddqdd +5-6 m: vcwtmdmmmmxzm +4-6 r: rtcfcz +7-12 x: xxswxxhjxnxxxx +6-7 t: ttswtkztt +15-18 g: nggckgdmsvdrqlgcqz +6-9 t: tttttstttlt +16-20 f: fffffffffffffffffffl +7-10 l: bcbdhwlslwlqx +8-11 k: kkkmkkvksmktkskkxkmk +9-15 h: rptgwtvxjgzqjrtqqc +4-6 j: jjjjjjjjjj +12-15 w: wwwwwwxwwwfwwxrw +13-15 d: ddddddddmdcdcddddd +13-14 v: vvvvvvvvvvvtxv +10-12 f: fffffffffffvf +7-10 j: jjlftzjmjz +9-10 w: cwwzwwllwfwktqkwxr +1-8 b: bbbbbbbvb +11-14 d: dlsmbgcdxhxfnqdhzd +17-18 k: kkkkkkkkkkkkktkkbq +7-8 k: kfkpkkkkkk +4-9 w: zbwwwrckwntbdqfd +7-8 m: mmmwmmgm +7-11 v: cvxllpvgdnh +5-13 c: cmccqccjcccjc +12-14 m: mmmmmmmmmmmmmvmmmp +4-11 x: dgvxxptdgkxpxl +4-5 f: pfclfffk +7-14 l: lllwlwlqqsnmllllll +10-11 l: pcqllllvlqlll +2-5 k: kkbkk +3-6 d: ddddddd +8-9 d: dddddddld +1-11 d: tddddddcddmdddd +5-8 b: pljtbkwkxb +11-12 t: tttttttktttgttt +6-7 q: qtqqqqgq +7-8 v: vvvbvpxp +4-13 v: vvvpvrzvvvvvvvvvv +8-11 r: rrrrrrrnrrr +14-15 b: bbbbbbbbbbbbbzr +13-16 p: ppppppppppppfpppp +7-10 g: gfgqgglggg +4-7 s: ssdsshc +8-11 t: zttctgtvttfttcrxd +11-12 j: jjjjjjjjjqwx +1-6 w: wwwwwl +4-7 l: zlbmrll +2-10 k: kkkkkkkkkm +8-10 x: xxxxxxxjxfx +4-13 r: blrrkqjczlbnrfbbkd +8-10 z: zzzzlzzzhj +9-11 s: vsmsszsssvsqss +3-6 m: mvkrmmwpzbtmmm +1-5 r: smlrbr +5-6 k: rlkklkkkkh +2-5 d: dkddddddpd +13-14 g: ggxtggfvgggdgggggcgg +7-9 x: xxxxxxbxgxxx +3-16 x: xxxxxxxxxxxxxxxlxx +11-15 c: chvcccccccqccdm +3-4 j: kjjjj +9-10 d: ddddmddddd +13-14 q: lqqbrqzbqqpcpt +2-5 w: xgjsxww +12-14 w: lwtxgwwzwlwbwwc +3-4 r: hffl +11-15 b: bbbbbbbbbbfbbbwb +3-7 f: lffnkpfm +6-13 v: vvvvvcvvvvvvvv +7-11 v: vvvhmvvvjvvvvvvvh +18-19 z: bzqtbfvfkxgzzxkftzz +8-14 l: gptlllllllxgll +7-10 w: dwmwrfwkkghf +2-4 f: fffshfffff +1-3 n: rnsfgn +7-20 w: wwwwwwhwwwwwwwwwwwwg +11-14 g: ggggggggggwggggkgg +2-8 x: xtxxlxxmmcxllxtxwxx +2-8 b: jbfclqjbkszckpkxnbn +1-3 d: dhdhffmd +14-19 b: bbbbbbbbbbbbbbbjbbbb +6-8 d: dtjbzdsddddf +14-16 n: rfmszmgztspnnncqj +9-10 v: vvvvrvvvvnv +5-6 r: rrsrrrrrrr +6-7 v: vvjvvjrv +6-8 q: tvqsqqvqqd +1-3 q: qwtdqbgmmck +8-15 p: ppppqppzjpppplpppppp +6-12 m: mwmhmsjxgcmmcrzlmmkc +2-8 j: sjwjljqjjjcdlmgxkjj +12-15 j: sjjjjjjqjjjjjjkjjj +14-15 t: vtttttttttttttt +17-18 r: rrrrrrrrrrrrrprrhd +10-15 c: sxspsvqkfvqjjccxbbv +7-8 g: ggggggxg +2-12 t: tbtttttttntmttttt +3-6 m: ztjrds +2-4 h: gdzk +4-5 p: rtlkkfwntpxw +8-14 k: kkkkkckkkkkkkgkkk +3-8 l: rqltzlflljsqmk +9-10 s: smssswksjsssss +12-13 z: zzzzzzzzzzzzr +12-14 h: zhhhqvhhhhxhhh +13-14 x: xxxxxxxfsxqqsxxxx +2-3 k: kffk +1-5 z: jzzzzzzz +10-15 n: nngnnhnjnnknndnvtbsd +12-13 k: dkkkkkkkkkkkn +6-8 h: qhfnrpfh +7-11 c: ccccccqccccc +19-20 m: cjbpwtmdfbllvvdrmmmt +5-6 l: lmrbhtbl +3-6 j: hjjkjm +9-10 j: jjjjjjjjtljxjj +3-5 t: ttbtcttt +5-8 r: rrrrrwhfrrf +3-5 d: dqvknd +5-7 j: jtjjgjm +5-7 v: vdjrlwv +8-9 s: ssssqsssssssxssssss +12-16 q: qxkjsjlsggcqhplq +16-17 j: jbftlzjjhjjjjvhjjj +3-14 v: gppvmdbvfwvgnd +1-8 b: bbbbbbbdb +2-6 z: pzwhjdzpxwt +5-9 v: qvrvmdvhwv +2-3 b: bbhlpxtbxzx +4-5 z: zzhpzz +15-20 f: fgzfnbcgtbnmflffqfrv +4-5 t: ztxttc +6-11 p: mjppkpcrdflpwqjrwprp +4-7 h: khdwwhhrhhnchs +10-11 b: mprbbblmcbbxqbbbbc +4-6 c: cccjcccx +1-4 r: nrrhrrr +1-2 d: dddlk +19-20 f: bfffffffffffffffffkb +4-6 w: wlswkwwrdsjtwbww +2-3 d: ddld +9-14 r: rrrrrrrrmrgrrjrrr +10-11 k: kkqkkkkkkjk +2-5 k: rkkkkxkkkvsd +16-17 b: bbbjbbbbbbbblbbbrbb +6-7 k: kkkkkkk +7-11 v: lfpjgrrvchvjfdt +12-13 g: fgxqnkgstgpggvrqdl +11-13 d: ddmmdtdddddhddd +6-7 g: mpstgwggbx +11-14 h: hhhhhhhhhhqhhbh +18-20 d: dddddmdddddddddddddh +10-12 m: mmmmqmmmmmrxwmmq +2-13 d: rxnxstxxrjvbdd +3-4 z: drzlrz +5-6 d: qddddb +3-7 d: ddzjcmvtkfdjplhllfn +10-15 m: wdxhmwbnmmmtrxpcj +7-8 b: bbkjbbgnbbswd +2-3 b: bbbhz +1-10 p: gpppqpppgppppppp +10-11 w: zwwfbwdqzww +10-11 n: nnnnnnncnknn +9-13 n: nnnnnnnnnnnnnndnnn +6-10 f: fffffbfffhf +3-5 h: cmhtc +1-2 p: gzpsj +4-10 w: wjwhwwwwwvwww +2-13 g: kwpjkxkjmhgnpsmjsmd +3-4 c: cctpj +13-15 k: kvkzkkskqkkkmkdkkkk +8-9 x: qnxxxfbdx +10-15 k: rkkbkvckkknxlmb +7-8 l: llcqslvlljgll +2-4 b: dtgbb +9-11 j: sjrkthwqjjq +1-4 z: bpzxzvjzrwhtpccm +8-9 n: nnvnnwwnnlnnnznnnn +5-7 j: sthpjjpwrt +12-13 s: ssssssssssssn +3-4 m: mnmgf +7-13 p: pppppprppppppfppppp +6-8 h: zhhbwhht +13-16 t: ttdtttttttttctkt +8-9 l: lllnhlllzpjlqllzld +7-15 x: fpkxzbbnxlcxxlxvx +3-10 b: bbbbbbbbbk +3-4 z: zzrg +1-4 w: wxww +5-6 b: dbbbwbb +2-3 r: frrhnh +1-11 d: qqsrfdddxdzdg +5-7 z: zzzhzzxz +5-6 b: slsbbb +1-2 b: jsbbg +2-10 t: tzttmtpwttttttm +4-5 n: kngxn +5-8 d: tpndxhvd +4-5 z: zgzbzzg +5-15 s: ssssssssssssssls +2-10 g: ggjgcglgggt +15-16 w: wwwwwwwwrwwwwwvzwwg +1-4 s: mksm +1-3 q: qqjqq +4-5 p: kwpkg +7-19 z: pkqkkzzzqccnlpzgzzz +4-6 k: kkkfkc +3-11 h: khshhhnnzphc +3-9 h: tkhghdhkhbhgx +4-8 n: kzntlxwn +1-2 v: xvkmv +3-5 m: mmmmkm +2-7 q: qqbwwctqbqs +2-3 m: mmmm +1-5 k: kkkkk +5-10 t: tttttttttbtxttt +1-4 l: lllblllllllllllll +11-12 c: cccccccccccwc +7-12 f: bfvpqzgwjxrnffjzm +1-13 k: kkkkkrkkkkkkkhk +1-2 w: pcwwwb +6-11 j: jjqjjnbznjt +3-4 d: vzdn +3-5 f: ffhkc +6-9 t: fbttjbtttlzdktf +1-8 k: rrkkkkkb +4-7 f: kbvdphfjgkdthtvffh +1-5 c: hgtcjnjqf +7-11 f: zfffffljfffffffg +3-6 j: jrjjjsjjj +7-14 r: rrrzrrrpjxrtrrrrrr +2-6 d: tdvbjdzqj +11-12 l: zbfnlfzlllls +2-5 c: cjccnf +6-8 v: vvvvfvvvv +9-10 b: bbbbbbbbbbbbt +10-12 l: llllllldlllh +8-13 g: sggzgggjggggjgggqz +8-12 m: mmsmmrmmgmmgmmmfhmmz +2-4 m: mqsmhnm +2-3 j: jjljjj +6-15 w: wrwwwkwfwzwnjcwwwjhh +5-6 p: cbppwb +1-10 h: xhhhhhhhhvhhk +6-14 c: dccccvfcmlcxgcccc +2-7 r: cmxrrrcmrr +13-16 f: ffffffffffffcfft +4-5 s: rsbzssssp +8-10 j: jjzjjjjxjpj +3-12 n: nnnnnnnnnjnnn +13-14 g: gggggggghggggjg +10-11 s: tzssqhxrsss +2-12 l: lllllwdlltvlblxlln +11-18 n: wwnnnnvnhnvnnnntnpn +5-6 h: khkhhhhhzfhdxkqmk +1-4 z: czqrzzzzz +11-13 f: ffffffffffffcf +1-3 x: pxxx +2-5 t: tttttttt +4-5 d: ddddld +1-3 c: chcsck +8-11 d: dddddddkddzd +9-14 n: nnnwwnnnnnnnntn +1-2 t: tftqt +6-7 d: hdtncds +3-9 r: lbrrkmrmrw +9-10 w: wgwwwwwwww +2-3 j: jjgcqjjj +7-8 q: cqqqqqqq +4-12 x: xsvxsxsvlxxrqxx +7-14 l: sldglzflqgddxwlvlc +6-8 l: lllggcqlllll +3-8 b: bfbqdlgbwjldng +1-4 g: kgggggg +3-8 n: lpnxplmnz +11-17 g: ggggggggggpgggggmgg +18-19 t: ttttgtttttttttttwrtt +8-10 x: fxjxxwdsfqxwnpmvxf +11-12 d: ddddddddddvj +4-7 n: qpnbgnnw +5-7 x: xfkrxfxk +6-13 r: rrrstrrgvdvrrrnm +4-5 m: zfmmr +5-12 r: rbrrcrrrrrrrrrrrm +12-13 l: lllllllllxllzl +6-9 x: xxxxxrxxsx +5-6 v: vxtdvvgvwlqfwtbsvnvv +1-2 j: qdtcpqrltjgppjvc +3-5 v: vvjvcv +1-5 f: ffffsfff +2-3 k: xkkgmnnpkq +12-19 m: gmmcwcmmnrfqmpmbmmr +4-11 z: knzzmztfnnzzjszzjfz +7-8 k: xkczkkkckk +15-17 m: mmmmmvmmgmmmmmrmm +5-7 s: xssssss +12-16 n: nnnnnnnnnnnnnnnvn +4-16 b: vbjbmgbplwltlcbw +8-11 b: bgbbbbbdbbrb +3-10 d: ddddddddddd +8-14 k: kxpkkkkvvkkkzk +3-6 l: llzllll +16-17 d: tnjdmnddkddbdvvddddm +5-9 h: bbchxhnhqk +3-6 d: wpqdfl +8-13 z: zzzqfkzhzzcmz +3-13 q: qkrwstgphfrtq +9-10 b: bbqtrtsbbb +19-20 q: bbmkgtnsgzmqzqsrwcqd +3-11 q: dtvgqqnwmgzs +12-16 x: xxxxnxxxxxxqxxxxxxx +10-16 p: vpmpppprxppmgppppqcq +3-6 l: mxxlbllpwblzlllnl +12-13 v: hvfvnjvgvvpvvjkvvj +2-12 v: scqjdrlkfzrl +5-6 l: lllllp +4-5 g: pgsgg +5-6 k: nkktsjgknkbz +4-8 v: vfvvvvvvvvv +6-11 k: ddcqknhhkck +6-10 w: gwqpwwwwtfwv +2-9 q: qlkqkkqqqlchq +8-15 n: ghsnnndhlxpjwnqsnnp +6-7 l: lllllllll +2-5 x: xxtcx +6-10 x: lwtcqxjxvxxhxpxxxsx +2-4 t: lvglqt +2-3 d: tfsq +7-17 m: dxnmnwggnmdmrmhjh +6-7 g: tgsvggdkmlpstg +1-8 n: nbnzflml +6-8 c: clccpclsp +6-8 r: rrrrckrdkrrwzrr +3-12 p: pplpppfppppppp +2-4 c: fccc +10-16 r: rgrrrrrrrdrrrrrrrqr +2-6 x: xwxqxqx +7-11 h: hwhhvhvrghrhnh +7-11 z: mjjxrfhftbbbklzkv +4-5 c: ccpcc +9-17 z: qznzzcvzzjczzzjzzz +18-19 z: zzzzzzzzzzzzzzzzzrz +2-3 r: bdvzlrkjhjvqp +16-19 d: dddddfdddqdddddddddq +14-18 b: bbmbbbjbpbqtbdwbbb +8-9 f: mfddqvlff +7-10 x: xxxxtxkxxb +4-5 r: hbvxthrwllx +3-4 t: tltstng +2-4 f: tfnrcgqf +1-6 g: fgvbwg +7-10 z: vzznzzbzzklzzzlzz +10-13 j: jrwjqgjjzjmbklqxwjn +1-5 s: sssssss +8-11 v: xfpwhwvntgvht +8-9 l: lllvsglzltllwhl +7-20 n: jnnsnnknnncknnnrnjnn +7-11 c: cvblgfxdzcccxjdclt +8-12 t: tthstttktfttzmdtpk +9-12 g: rggvkgnggggm +5-8 f: jrfppdsnpjkwjrdhddf +5-6 n: nnnnnwnn +7-12 j: jjjjjjjjjcmkjj +2-5 g: gbggkg +5-16 p: ppgpnpppppppppprpp +1-6 d: ddgddvdd +3-11 s: sscsksssssldssss +5-13 j: jjjjjjcjjjjkjjjjj +9-13 m: mfmmmtvdcnwmmmmm +2-3 f: fffrjn +7-9 z: zzzzzzzzfzzqnzzz +3-6 b: bbbbbbb +6-8 v: dvxvqzvv +4-5 h: hhhwhh +1-2 w: wwwwwwwwwww +6-11 h: shqlvhbqhbh +6-7 d: dddrddtdd +11-17 z: zzzzzzzzzzzzzzzzl +6-7 t: ttttttttt +2-3 j: zjstccxb +11-13 q: qqqqfqqqqqqqsqp +2-7 p: sppznwpjptppdppp +3-4 m: mmml +3-12 g: phkfggggkzgxbsxr +1-2 c: ppcbvncvck +12-18 h: kjmmtxkrjthtsphgsb +13-16 n: nnnnnnnnnnnnwnnn +11-16 s: xstpxfxtkgscbgws +14-15 h: hkktqhhszldhhkh +8-12 j: jjjjjjjjjjjdjjj +13-14 k: phkkkmkkkkqkkrkkk +4-5 h: hhhqqhhhn +4-12 k: kkkkkkkkkrkkkk +7-10 q: qqqqqqqqqbq +5-7 s: szssqsgs +8-11 l: lllllllllll +10-11 w: tfbwwxwwmkp +10-11 s: blkkznbrtss +2-4 t: dtxt +12-13 x: xxxxxlxtxxxfxxn +9-15 v: mvvhvwnvgvvvvzc +6-17 g: gbggfxvmlfjmgdmshfzq +9-12 n: lqmsxjnnnwrqphn +6-17 b: bbpljfjbsbgfzxgsn +13-15 f: fjgfdsffphbcsltw +3-8 g: kxjlsggg +2-10 n: nfnhnnnnnknn +2-6 x: xzxxxpx +4-5 f: zddjhfknqffsbbf +3-5 r: skxgqcrrrx +1-2 x: rxcddx +8-12 g: gggggggggggmgg +1-6 j: jjjjddjj +8-11 z: zzszznzfzzz +3-14 s: hwjszphhcwjmhsssc +5-7 m: lpcnpsr +5-6 f: frffplfffff +4-7 m: msmkrmw +4-10 s: vhlztshrspskv +13-14 q: mqqgqmcpqpdrqn +5-9 h: hhhmrhhhh +4-6 r: lbqhmw +5-6 b: mbzhbsbbhthll +13-16 v: vvvvvvvvvvvvhvvdvvvf +10-12 w: wwmwgwwzwpwv +2-12 b: kpxbpfbfbcjfbkcfxmbb +14-17 n: nngnnnnfnqnnnnnnrn +6-10 h: hchhhhqhhxhhzj +5-6 h: hzvnwb +7-8 p: pnhxqpls +4-5 z: zzztzz +11-12 c: fclcctjcfdqrcps +6-15 v: jgclvvsqkqgjkvvcl +1-13 j: wjjjjjjjjjjjgj +6-7 f: fffffmfzpf +6-12 p: kppppgppzpptphxp +13-14 b: bbbbbbbbbbbbbbbb +18-20 f: ffffffffffffffmxftfv +6-11 k: gfkkkctxmkrkp +1-9 r: rrwvbwdtr +8-18 b: bbbbbbbtbbbbbbbbbbb +3-10 t: ftqgcktpthttztm +5-8 j: jjzjjjtjlbhj +2-6 w: hwkljw +10-14 g: kggggggfrrgggxgg +7-13 z: zjszqzxzdzzzkjzf +1-6 p: ppppppppp +8-9 p: pppppdpgqpppp +13-15 g: gggggpsggggtggbg +4-5 g: gpmsg +2-5 z: vzfhzzhphh +2-4 g: jgzq +8-9 g: pgjggbbgf +3-4 r: ljsnp +7-13 x: xxxxxgxxxkxxxxvxkkxm +2-6 g: nggfgw +9-10 m: mmmmmmmmldm +15-16 w: wwwwhwkwjnwwwwdn +10-18 r: rrrrrrrrrrrrrrrrrkr +2-3 q: qplq +1-7 m: tmmmmsq +2-5 w: swwmwk +2-3 l: slgkdtjznfxdml +10-12 q: qxmmqjqqqqqw +12-14 c: bhlhjcwkcndchwc +10-11 d: dddddsddddl +13-14 g: mxdxkmvcgrsqgn +3-4 t: qtttpmt +14-16 b: bbbbbbbbbbbbbbbqbbb +2-11 w: zdggnxfnzpwnf +6-7 r: rfrcrrf +9-10 h: hhhhhhhhfg +7-8 r: rrrrrrvl +8-9 n: rnsnvlrqdq +4-7 f: ffwnzdf +15-18 x: ngxxvqwxzlhxwpxxxz +13-15 w: nwwwwwqwwwwwtww diff --git a/tests/aoc-2020/input/day20.txt b/tests/aoc-2020/input/day20.txt new file mode 100644 index 00000000..273b146b --- /dev/null +++ b/tests/aoc-2020/input/day20.txt @@ -0,0 +1,1727 @@ +Tile 3583: +.##..#..#. +....##.... +##..#..#.. +.....#.... +.#..#..... +#.#....... +#.....#..# +....#....# +...#.##.#. +.#....##.# + +Tile 3967: +..###..#.. +#......... +.........# +#...#....# +....#....# +#...#....# +#..#...#.# +##....##.. +#....#.... +##.###.#.. + +Tile 3307: +.#.#...#.. +......#..# +.........# +##.....##. +..#.....#. +.#...####. +#....#.#.# +......##.# +#.##.#..## +.....#.##. + +Tile 1741: +.##..#.#.. +#..##.#... +.#.....#.. +...####.## +#.#..###.. +####.#.... +..#.##.#.. +#.....#.#. +#.###..... +####...### + +Tile 3821: +.#######.# +...#...... +#.##.#...# +.#...##### +....#.##.. +#.#.#..... +##......## +#..#.....# +##..#..#.# +###..#.#.. + +Tile 1787: +..##.#.### +...##..#.# +#..#.###.# +..#.##..#. +#.#.....## +...#...#.# +#..##..#.# +##.#.##..# +...#..#... +..#..##... + +Tile 2281: +..#.#.##.# +.......##. +..#..#..#. +....#.#..# +#...#.##.# +#..#.##.#. +#.#....#.# +#....##... +.....#..## +...#.#...# + +Tile 3593: +...#..#..# +.........# +.........# +#.#..#...# +##......## +##........ +...#.#...# +#...#...## +...#.#.#.. +#..#...... + +Tile 3259: +.####..... +....#.#.## +#....#..## +#........# +.....#.... +.#.....#.# +...##....# +#.....#.#. +#.#..#.... +#.#..##.#. + +Tile 2663: +.####..### +#.#..##... +#..#...#.. +#..#....#. +..#.##...# +.#....#.#. +#..#....#. +#.#....... +.#.#...... +..#..##### + +Tile 3833: +####....#. +.......#.# +.#........ +#...#.##.# +#.##.#.#.# +...#.....# +##...#...# +#.#.##...# +##.#.#.##. +.##.###.## + +Tile 3373: +#.....##.# +#...###..# +..#.#..#.. +####..#.## +#...#.##.# +#..##.#... +#..##...## +#.####.... +##..#...#. +##.##.#.## + +Tile 1511: +.#.###...# +#....#...# +.##.#..... +...##.###. +#.##.##..# +####.#..## +#..#.#.... +#.......#. +#......#.# +###...#... + +Tile 1723: +...##..#.# +..#..#...# +.##.....#. +#..#...... +.#..#.#..# +.#........ +...#.#..## +##.......# +..#..###.. +#####...## + +Tile 1543: +#..#.##.## +#.....#..# +.....#.#.# +###....... +...##....# +..#..#...# +#.....##.# +#.#..##.## +...###.... +###.#...#. + +Tile 1433: +##.##..##. +###....#.# +..#.....## +.#.##..#.. +.#.#...### +#.#.....#. +..##.....# +#....#.... +..#.#...#. +.#...##### + +Tile 1949: +#.#..##..# +.........# +.#.......# +#..##..### +........## +#........# +.....#...# +...####.#. +.#...##... +###.#.#..# + +Tile 3889: +###...#### +#....##..# +.#.###...# +##..#..... +.....#.... +....#.#.#. +.........# +#....##..# +##.##..##. +#.###.#### + +Tile 2477: +.....#..## +#.##.###.. +###..#...# +.#....#.#. +#..#...... +...#.....# +##.....#.. +..##.....# +.##.#....# +#####.#### + +Tile 2137: +..######## +#..#...... +...#.##..# +#.#..#...# +.#..#...## +##.....#.# +.#....##.. +.##....... +.#..####.. +#..###...# + +Tile 3313: +..####.#.# +#..#.....# +#....#.... +..##..##.. +#....##... +.......... +#......... +.......### +##........ +.###...### + +Tile 1493: +#..####.## +##.#..#... +#.#.....## +.##......# +.##...#..# +#..##....# +#.#.#.#.#. +#.#...#..# +#.#.#....# +#.####...# + +Tile 1579: +.##..##.## +#.#....... +.......#.. +..#...##.. +#..####... +.#.#.##.## +###.#..... +#....##.## +....#...## +##....#.#. + +Tile 2221: +.#.#...... +.......##. +#..#.#...# +..###.###. +....#...## +##.#..##.. +..##.#.#.. +......#### +..##.#.#.. +.###..#.## + +Tile 3643: +..###...#. +#..#..#..# +.##....... +#..###.... +##...##.## +#...#...#. +###......# +....#..#.# +.#.#.....# +..#..#.#.. + +Tile 3881: +###.##.##. +.####..### +#.###..##. +....#...#. +##...#..#. +#........# +....#...#. +...#.....# +.#.....##. +.####..#.# + +Tile 3823: +..#.##..## +#...#....# +..#...#... +#.#.##...# +.####....# +.#...#...# +.......... +.........# +...#..#... +....#..#.# + +Tile 3181: +####..##.# +#.....##.# +#.......## +.......#.# +..#..##.#. +##..#..#.. +...##..... +.........# +....#.##.. +.##.###.#. + +Tile 2837: +.###.#.### +#.##..#.## +.....##... +###......# +##.......# +........## +##.##..#.. +....###... +.......... +#......#.# + +Tile 2063: +..#####... +.......... +........#. +..##.....# +###...#.#. +#.#.....#. +.....#..## +#.......#. +##....##.. +#.##.###.# + +Tile 1187: +#...##..## +#........# +#.#....... +...#.#.... +.....#.#.# +#....#.... +..###..... +.#........ +..#...###. +####.#.#.# + +Tile 3137: +...###..#. +#.##.....# +..#...#..# +#..#.....# +......#... +#.....##.# +...#...... +#.#.#.#### +..#....#.. +.#..#.#.## + +Tile 2411: +#.....##.. +.......#.# +.....##... +#.#....... +#..##....# +.##.##.... +.##...##.. +#.#....... +##.....#.# +.##.###... + +Tile 2713: +..#.#.#### +...####.#. +##..#...#. +#..##..... +#...#..... +.#...#.### +.......... +#.#.##..#. +#.#..#..#. +.#..##.#.# + +Tile 1103: +##.#...##. +#.....##.. +...###..#. +..##.....# +.####..#.. +..#.###.#. +##.....#.. +.#..#....# +#........# +####...##. + +Tile 3943: +.###...... +#...#.#... +..##..#..# +.##..#.#.# +.......... +##...#.... +#..#...#.. +#..###...# +###....### +#.#....### + +Tile 1871: +##.#...##. +#......#.. +.#.##..... +.#####.#.. +#.#....#.. +#..#....## +#..####.#. +#....#.... +...#.....# +...#.##.#. + +Tile 3407: +#.#.#####. +##.#..#..# +.###.#.#.# +..#....... +##.###.#.. +.....#.### +#.#....... +##..#.#..# +#.#.##.#.# +#..#..###. + +Tile 2441: +#####.#..# +...#.#.... +..#...#..# +.##....#.. +#.##..#... +.##.#..#.# +##.......# +.##..#.... +.......#.. +.#..#.###. + +Tile 3637: +.#..##.#.# +...##..#.. +#.#.###... +#....#...# +..#.....## +#....#...# +#..#.#.#.. +....#..#.# +....#.#..# +.#.###.##. + +Tile 1549: +....##.##. +.#....#... +..####.#.. +....#.#..# +#........# +..#....... +.#.#....## +...######. +#...##.... +.#...##... + +Tile 1481: +...##.##.. +#...#.##.. +#..#..#.#. +#.#.#...#. +#...#.##.. +.##....#.. +#........# +....#.#... +#.#.....## +#.....#### + +Tile 1559: +#..#....#. +..#.##.#.# +#.....#.## +.###.#...# +..####..## +#..#.#..#. +#.#...###. +#.....#.#. +.#.....#.. +#..####.#. + +Tile 2251: +#..#.....# +.#..#..... +#.#....#.. +#....##..# +##....#..# +..#..#.... +#.#.#.#... +#...#....# +###..#.##. +##..#.#### + +Tile 2897: +...###.... +##..#....# +.........# +.#.......# +...#.....# +..#..#...# +.#...#...# +#....#.... +.#......## +..##...##. + +Tile 2239: +#..###..#. +.#.......# +.#..#..#.. +#.##....## +#....#.#.# +##..#..... +#........# +...##.#..# +#...###..# +...#.#.### + +Tile 2593: +.#....##.# +##......## +..#..##... +.#..#..... +...#.#...# +#.#..#.#.. +......#.#. +#...##...# +###..##..# +#.#####.## + +Tile 3697: +##.######. +###....#.. +#.....##.# +##...#..## +#.....#..# +.#.#..#... +#......##. +#.#.#.#.#. +.........# +....####.. + +Tile 3739: +##.#...... +.#.....#.# +..#.....## +#....##... +##.#...#.. +###.#...## +.#...#.### +.#..#.##.# +..#..#..#. +...#.##... + +Tile 2459: +.#.####... +#..#...#.. +.....#.##. +..#....##. +#......##. +##...#..## +#....#.... +###...#..# +###.##.### +.....##... + +Tile 2939: +##.#.#.... +#..#.##### +#...###.#. +..#...#.## +.#.....##. +###....#.. +.##...#..# +.....#.#.. +..#..#.... +..##..#.## + +Tile 2347: +.###..#..# +##......#. +#......#.. +#...#....# +#......#.. +##.......# +..#....... +#.##..#... +#..#..###. +#....##..# + +Tile 2381: +######.... +##.......# +.#....###. +#.##.##.#. +#.#..#.... +.........# +....#..#.# +#####..... +..##....## +#..###...# + +Tile 2503: +#.#...###. +#...#..#.. +.##.#.#.## +.#.....#.. +#...##.... +##.#.....# +...#..#..# +..#.##...# +......#... +##..#..##. + +Tile 3023: +.#...#.... +#.##...#.. +##....#... +.#..#..... +.#.#.....# +#.#....... +##..#.#.#. +#...#.#... +...#..#.## +#...##.### + +Tile 3851: +#..##.#.#. +#...#....# +###..#.... +#.#.#...## +..#.#..#.# +#.......#. +..#.....## +.......... +#.#.#.#..# +..#.##..#. + +Tile 1009: +.####.##.. +#......... +.#.#...... +..#.#..... +#......##. +###....... +#.#....... +.......#.# +.#....#.## +#.####.#.# + +Tile 1151: +.#.##..#.. +..#......# +##....##.# +#......### +##.....#.. +##..#.#..# +...#...... +.##...##.. +##..###..# +######.### + +Tile 2683: +#..#.#..## +.#....#.#. +#...##.... +....###... +...#..#... +..#....... +...#...#.. +....#.#... +..#..#...# +..#.#.##.. + +Tile 3323: +#.#..##.## +#.#....### +#.##.###.# +##....#... +##..#..... +###.#.#.## +#......#.# +..#....##. +#......#.# +.##...#..# + +Tile 2333: +##.#..#..# +#..##..... +.........# +.#.#.#.... +#...##...# +#.#.#....# +..#.###..# +....###.#. +#...#....# +..#.....#. + +Tile 2543: +#..###.#.. +....#..#.# +..#...#.#. +#...##...# +.#.....### +.......... +#..#....#. +#....#..#. +#.#..##..# +##...#..## + +Tile 1483: +###..##..# +.#......#. +.......#.# +#........# +...#...#.# +#.#.#..... +#......#.# +#...#.#... +#...####.. +#.##..#..# + +Tile 2027: +.#..#....# +....##.... +....#...## +#.#..#.... +#.#.....## +.......#.# +#...#..... +.##....#.# +###.#.##.# +.###.#.### + +Tile 1699: +#.###..##. +..#.###... +.........# +.#.#..#..# +...##.##.. +#........# +.......#.# +##..#...## +.....#.... +#########. + +Tile 2843: +#...#.#### +....#.##.. +...#....#. +.....#.... +#..##..... +.....#.... +###.#..... +......#..# +#.#.#...## +#...##.##. + +Tile 1597: +#..####### +.......... +.#........ +#..##.#... +##.....#.. +##.###...# +.....###.# +...##.#..# +#....#...# +##.#.##### + +Tile 2311: +.#.#.#.### +.#.......# +..#...#.## +#..#....## +#...#..... +.........# +.#.#...##. +.#.##....# +..#..#...# +...##.#.#. + +Tile 1889: +#.###.###. +.#...#...# +#........# +#......#.# +..#......# +#......### +.....#.##. +#.....#..# +........## +####...#.# + +Tile 3581: +........## +.#...#...# +###.....#. +.......... +#.#......# +......#..# +##........ +..#...#### +#..#...... +.##.###.## + +Tile 1499: +##.#.#.... +.##...##.. +##.....##. +###.#...## +..##....#. +.#....#... +#..#...##. +..#....##. +.#.....#.. +..#.####.# + +Tile 2999: +.#.###..#. +#.#...#... +##.#...... +...#..#... +..###..### +...#.#..#. +#..##.#..# +.........# +..#....##. +..#.###.#. + +Tile 1487: +#....#.... +.#.....#.. +.#.#.....# +#.#......# +#.#.##.... +#.....#... +.....#.... +##........ +##..##...# +#.#..#...# + +Tile 2969: +#..#.#..## +###..#...# +.#..#..... +...####.#. +#.#.##..#. +...###...# +#...#..... +..#...##.. +##..#.#..# +#..#.###.# + +Tile 1873: +..###.#.#. +..#.###.#. +#.#.##...# +.#...#...# +....#..... +##.....##. +.....#.#.. +..#..#..#. +..##..#..# +##...#.... + +Tile 2029: +#.#...#### +#....##... +.#.#...##. +#####.#.#. +#..#...... +#...#..#.. +#.#.#..#.# +#......#.# +...####.#. +..##.#.### + +Tile 3517: +.##...##.. +.#......#. +....##.... +#.##..#..# +.......##. +#..#...... +...##...#. +........## +#...#....# +..######.# + +Tile 2803: +#.##.###.. +.#..##...# +...##..... +.#.#.#.#.. +#.......#. +.##.#.#..# +.#.###.#.. +.#..#...## +#...###... +.###..#.## + +Tile 1237: +.######.## +#.#....... +....#....# +.....#...# +#.###.#.## +#...####.. +#.#......# +#.#.##.#.# +#..#..#... +.#..#....# + +Tile 3877: +..#.#.#.## +..##...#.. +#..#...#.. +#.......#. +#.......#. +#...#.##.. +.#.......# +....#..### +##.......# +.#.##.#.#. + +Tile 2081: +####.##### +....#..##. +........## +....#..##. +#..#....#. +.##...##.. +......#... +.#....#..# +#.#.#...## +.##...##.# + +Tile 2789: +.#.##..#.# +.......#.. +##.......# +..#..#..## +..#....... +.#........ +#..##.#.#. +###.#..### +##..#...## +..#..#.... + +Tile 3989: +##.##...## +#....#..#. +.#....#.## +#......#.# +#.#..#.... +#....#.#.# +...#...#.. +#........# +.......#.# +##.##.##.. + +Tile 1933: +.....###.# +#...#.#..# +.#....#..# +.#........ +#####.##.. +#..#.#...# +#..#.#...# +....##.... +#....#..#. +##..#..##. + +Tile 1601: +##.#..##.. +.#.###.#.# +..#.###..# +##.#.#.... +.....###.# +##.##.#### +#.#...#..# +#...##.... +...#...... +.####..### + +Tile 1117: +#..##..##. +......##.# +....##.#.. +#....#.... +.#.#.....# +.....#.##. +#....##... +#.....#... +..#..##.#. +.#.###.#.. + +Tile 1409: +#...###... +#......#.. +........#. +.#........ +##....#... +#.......## +#......#.. +......##.# +#..###.#.. +.####.##.. + +Tile 3359: +##.##....# +#..#...#.# +#....##### +...##..#.. +..#..#...# +........## +...#...#.# +.........# +...#.#.#.# +##.#....## + +Tile 2539: +...##.##.# +#.##.#...# +...##.#... +..#.#..#.. +#.#..#.### +......##.# +#.......#. +.#.......# +#...####.. +..#...###. + +Tile 1607: +##..###.#. +#...#....# +#.#.#..#.. +#..#....## +#.#......# +....##.... +#..###...# +..#.##..## +##....##.# +...##..### + +Tile 2971: +#....#..## +.##......# +#..##..... +#...##.##. +#...#.##.. +....##...# +..#.###... +##.#.#..## +#..#..###. +#...###.## + +Tile 2447: +#..#..##.# +#....##..# +.....##... +..#.###..# +#..#.##... +#.#.#...## +#.#..###.# +####..#... +#.#...###. +#..###..## + +Tile 1709: +.....#..## +##....#... +.........# +...###..#. +###......# +..#..#...# +#.###.#..# +###....##. +...#..##.# +##.#...#.. + +Tile 3109: +.#..###.## +....#.#.## +..#...#..# +#...#..... +####.#.... +.#.#...### +###....#.. +#..###.... +.......... +##.##...## + +Tile 2089: +..####..#. +.###.....# +....#..### +.#.......# +..##.....# +#.###....# +#.#.##.#.# +#.......#. +...#.##.#. +...#..#.## + +Tile 1619: +#...#.#.#. +#......... +#....##.## +##....#... +#####..... +##.#..#..# +###...#..# +...#...... +##..#....# +.##.##...# + +Tile 3319: +###.#.#.#. +.#....#..# +#.#.#...## +...#.....# +.......... +........#. +.......... +...#.##..# +#.#.#....# +##......#. + +Tile 1621: +#.###.###. +.#...#...# +#.#......# +#....#.... +#..#.....# +##..#..#.. +.###..#.#. +#.#.#.#### +#.......## +##.##...#. + +Tile 2857: +##.#.#.#.. +...#...##. +#......#.. +......#... +.#.#..#... +.##..#...# +..###....# +#.##...... +#.###...## +..#..##.#. + +Tile 2143: +#.#....... +#...#.##.. +#..#.....# +...#.....# +#...#....# +........## +##....#.## +##..##..#. +#..#.....# +#..##....# + +Tile 3037: +........## +#....#..#. +......#... +....#.#... +...###.### +...###...# +.......... +#.....#..# +##..#..... +#....#.... + +Tile 1733: +#.#..#.#.. +.#....##.. +#..#.#...# +........#. +.........# +##....#... +#.....#..# +#..####.#. +#...##.... +..#....##. + +Tile 2657: +.##...#..# +#...#.##.. +##........ +.##......# +.#...#...# +..##...#.. +.........# +....#...#. +..#.##...# +#..######. + +Tile 1451: +#.....#..# +.....#.##. +......##.. +..#....... +.......... +#..##....# +###......# +##.#.....# +#...##.### +###.#..... + +Tile 3191: +####.#.#.# +.........# +###.#####. +#.....##.. +...#....#. +##..#....# +.#..#.#..# +#........# +######..#. +.####.#### + +Tile 3163: +.#.##.#..# +##.##.#.#. +##..#....# +.#....#.#. +##.#.....# +.#........ +#.#......# +#.......## +#........# +###...###. + +Tile 3067: +.#...##... +..###..... +##.#..#..# +##.##..#.. +.......#.. +#...##.#.. +####....#. +#.#....#.. +........#. +.##.#....# + +Tile 3203: +##...#.#.# +.##..##### +#.......## +.#....#... +.#....#..# +..#.#....# +#....#.#.. +#....##### +#...####.. +....##.### + +Tile 3229: +...#...... +#...#..... +..##.#.##. +#.#...#... +#.##.#..## +##....##.. +..#.###..# +.....#...# +...#.....# +..#.#..... + +Tile 2083: +....#.###. +.......... +.........# +...##..#.# +.##..#.... +#..#..#... +......#.#. +#........# +#.##...... +###..#.### + +Tile 3253: +.##..#.#.. +.#.#...#.# +#.#....#.. +...#.....# +#......... +#......... +.##......# +......###. +#......... +.....#...# + +Tile 1381: +###...##.# +#.#####.#. +###..#..## +#......... +..#..#...# +..#.#...## +.#.#.....# +..#...##.# +##.#..#..# +######.... + +Tile 2113: +.....##..# +.....###.. +...#.....# +##.#..#... +....#..... +...#...... +#..###.#.# +.......... +#.#....... +..#..#.#.. + +Tile 1087: +###..#.##. +#....#.... +..#......# +###.#....# +.#.......# +..#....##. +#...#....# +....#...## +....#.#.#. +#.#..#.### + +Tile 2833: +.....#...# +#...#.#.#. +#.......#. +#......#.# +.#.##.#... +........## +....#.#.## +........## +......#.#. +######.#.. + +Tile 1063: +.....###.# +#####.#..# +..###....# +...#.##... +###....#.# +.....##... +####.....# +..##.#.... +#...#...#. +...##.###. + +Tile 3049: +#.#.#..### +...##....# +#..#..#.#. +##.##..#.. +###.....## +#.#..#.#.. +#..##....# +#.#...#..# +##..#..#.# +....#####. + +Tile 1657: +#..####... +........## +.........# +#...#.#... +#.#......# +.#.#....#. +#....###.# +#..####.#. +#..#..#### +...###..#. + +Tile 3863: +##.####### +..#.#.#... +#....#..#. +........## +#.##...... +....#..... +#.#..##... +#.#......# +..#..#.#.. +##.####..# + +Tile 3083: +##.#...### +.#..#..#.. +#.#####... +#..#.#.... +##.....#.. +#..##..### +.#.#.....# +#.#..#..## +.#.#..#.## +...#...... + +Tile 3853: +#.###..### +##..#..##. +.....##.## +......#..# +...#.#..#. +###....#.. +##.....#.. +##........ +...#..#..# +###.###..# + +Tile 2129: +..#....#.# +#...#..... +##...##..# +#.#....... +....#..... +##......## +#..#...... +#..#..#... +.......... +...#.#.#.. + +Tile 1759: +..##..###. +.......#.. +.#.#.....# +.....#.... +#......#.# +#.#......# +#..#.#.#.# +#..#.#...# +#.#...#..# +.##....#.# + +Tile 3617: +..#.#..### +..###....# +##.#.....# +#.##....## +.....#..#. +.........# +.......... +.####..#.# +#.#...#.#. +....##.##. + +Tile 2017: +..#.##.#.# +....#...## +.......... +.#........ +#.....#... +#.....#... +#......... +....#.#.#. +..#....... +..#...#.## + +Tile 1277: +..##...#.# +.##..#..#. +.#....##.# +#....##... +#..#.##..# +###..##..# +.........# +.##.#..... +..#....... +##.###.#.. + +Tile 2617: +###....... +......#... +##.##..#.. +#.#....#.. +.###....## +..###..#.# +##...##..# +#..#...... +#..#..#### +#.##..#... + +Tile 2719: +..#.#.##.# +........## +...#.#.... +...##....# +.#.##.#... +..#.##.### +##.#.....# +.........# +..#.#...## +###.#..### + +Tile 3671: +#..##..### +#...#...## +.......... +...##..... +.#..#.#..# +#.#..#.... +#..###.### +..##..#### +#......... +.#..#.#..# + +Tile 3389: +.#....#.## +.#..##.#.# +#...##.... +##....#..# +##......## +.#...#.... +..#....#.. +....##.... +#.#...#.#. +#.#.#..### + +Tile 3457: +.######### +#..#...... +..##...... +#......... +.#...#.... +.###.....# +.......#.# +.........# +###....#.. +#.......## + +Tile 1777: +###.#.#### +#..#...### +.#.#..#..# +.......#.. +#.#..##.## +..###..... +###......# +.#........ +#.####.... +##..###### + +Tile 3613: +####.#...# +##.......# +.......##. +#....#...# +......##.# +...#.#..## +#......#.. +...#...#.. +.##..##... +.#...#..#. + +Tile 3529: +.#.##.#... +##.....#.# +#...#..#.. +......##.# +##..#.##.# +##........ +#.....#... +...#...#.. +...##.#... +..###..... + +Tile 1153: +##.##.##.. +..#####..# +##...#..#. +.......### +.#.......# +..#.#..... +.......#.# +#...#..### +.....#.#.. +.#.##....# + +Tile 2467: +####....## +#..###...# +#####....# +.#......#. +###....... +##.......# +.##.#.#..# +....#.#... +#........# +.#..#.#### + +Tile 3947: +#.##.##.#. +##.......# +......#..# +#...#..### +.....#.### +##..#..#.. +...#.#...# +#...#....# +.......#.# +#...#..#.# + +Tile 1399: +.##.#..### +#.......#. +#.......#. +.....#..#. +#........# +##..#..#.# +.##..##..# +#..#...... +#.....#..# +#.##..##.. + +Tile 2879: +....###..# +..#....... +#...#..... +...#.#.... +.........# +.##..#.##. +.#...###.# +.#.....#.# +..##.....# +##...#.#.. + +Tile 1039: +#......#.# +##.##.###. +.....##..# +#........# +..#....... +#......... +.#..#.#.#. +.....###.. +#....##### +.#.....### + +Tile 2777: +#..##...#. +....#....# +........#. +##.#....#. +..#.##...# +.#....#.#. +#....#.... +#..#.#...# +#...##.#.# +#.......#. + +Tile 1097: +##...###.. +..#..####. +##....#.## +#.....##.. +...#....## +.##..#.... +#.##..###. +##...#.... +#.###....# +.#.#.###.. + +Tile 3793: +####.....# +.......... +.#.##.#... +....#....# +#.....#... +..###..##. +##..#.#... +##........ +#........# +.###...... + +Tile 2689: +####...#.. +..##....## +#.#....#.# +.....##..# +#.......## +#......... +#.....#..# +##........ +.......#.# +#.###..#.# diff --git a/tests/aoc-2020/input/day21.txt b/tests/aoc-2020/input/day21.txt new file mode 100644 index 00000000..5c890131 --- /dev/null +++ b/tests/aoc-2020/input/day21.txt @@ -0,0 +1,49 @@ +lkv dhj ppxbh scqg vgmmcg jrgxc jzhql hrkhfl phhrpt fljmthl pcfxgn zkls dckkr rvhkkp ffj lrfmpx trsd jhsrjlj glmb zfvq vsj scbl xkltn jrhvk lcfxzll lcp fdxdp hslbs bzlfvx smvhmh gjz tcnqs ckpnbz xslr djlht slg pzqbcnq qxhm xfp prng qhdq tpxph qvbk jcx gsxnqd djkb kslv vdccvnn fvjqkh cxfgnn fjmm bhdtrkds krlgn cdfmd bttsc zmrl fpgk kltxdk qkdmtk scqslq dglk qjltjd rznx cfkjjc clnr hk bffqk qvzl jsdkg jmbj bbsqm mbvt lfcppl (contains dairy) +qvbk tzhmt hk zlxrx clnr vjpcnl djkb smvhmh gkfxt mbvt qjltjd jbcpqb jhsrjlj zmnvg bffqk tjvs zrkhvq xhxslhf njjgv nkgzr fpffx tjbngs zkls msxhsxl xql jrhvk jlpz cdfmd zmrl mxdd rjfjcb ndpnq lpfzsbd lppxvs bxcjrdr vsj xslr fvnkvt cxfgnn qvzl lkv xkltn kltxdk rkqvz ggfrz vkzxrm svzk vkqxgr fb gsxnqd rfpbpn djmg lzlds mlqnfs lrfmpx ppxbh phdv qxml slg jrgxc bpfk svmvp qkdmtk nfl qxhm ljfv (contains dairy, nuts, shellfish) +xghl sxvkrs zqmmqd lzlds fpgk nfgs tpxph jrhvk bttss lcp sllrrh qdnfxx zfqnj sjrzdg qjltjd mld zcfbq vdccvnn shlzrzq vgmmcg zmq pzqbcnq qhqml phhrpt pnn nfl rtdzk svzk dxmnp vhl njjgv fvjqkh skzb rkqvz xgfqd zfvq bffqk qvbk zzdckn xjsp bpfk fljmthl zmrl zlxrx pcfxgn ffdnx bmmdth zkls qxhm vkqxgr fpffx fb mlqnfs mxdd krlgn jhsrjlj rjfjcb hxbzr nkgzr ndpnq tcq ljfv fdqzvn dglk kslv gcls xslr rznx lkv hkvxh rkgrl dckkr kcvhh msxhsxl lppxvs rfpbpn tjvs (contains nuts) +pntfmz jzhql szskn gcls ljfv zrlv vgmmcg hkvxh hsr gchmxm txvx hgtkgd qjltjd zkls cppf krlgn qhqml ffdnx rjfjcb xkltn jhsrjlj jrhvk mbvt jmbj rkgrl vntsh xqnktk vkzxrm ckrhr fljmthl rbvqg rfpbpn ckpnbz hgdxfc fdxdp tjbngs lfcppl bcrp bqzd rznx dvhhjp bmmdth tjvs vdccvnn rkqvz rvhkkp lkv clnr qxml msxhsxl zfqnj mld ffj mlqnfs pzqbcnq (contains eggs, sesame) +znhd hjp zkls rfpbpn jcx lfcppl kcvhh pzxfq gsxnqd vkbfhpq phdv lppxvs dglk zcfbq fb qkdmtk lvrrr vhl fdxdp rznx jrhvk jhsrjlj gchmxm cxfgnn qjltjd xkltn bmmdth qnb ggfrz jrgxc vgmmcg ffdnx bxcjrdr qhdq tfrnr mxdd tjbngs lcfxzll hgggjq zfqnj zvrdpk njjgv fhqvnvf ckpnbz hgdxfc qdnfxx dzgdrl zrlv pcfxgn scbl ndpnq lkv mbvt nvmppng zbcln xghl qvzl qnnhpv jvmx pzqbcnq skzb gkfxt vjpcnl (contains peanuts) +sllrrh zfqnj sjrzdg mlqnfs dvhhjp jrhvk zmq lvrrr zchp xslr rbvqg ckpnbz qftqv jrgxc qdnfxx nkgzr hvcnl glmb lpfzsbd rfpbpn dzgdrl jhsrjlj zfvq zrlv bkdh nsssf mxdd fdxdp lkv qjltjd bbsqm znhd jzhql lfcppl jcx jbcpqb qhdq (contains eggs, nuts, soy) +jrgxc zcfbq jmbj fhqvnvf qdnfxx lrfmpx zmq zrlv dckkr cppf zqmmqd ndpnq ffj gkfxt qhdq vgmmcg kltxdk fdqzvn qvbk nkgzr bffqk xgfqd scbl zzdckn lbdkmc lzlds nsssf hxbzr jhsrjlj dvhhjp txvx rfpbpn lfcppl kcvhh zfvq gsxnqd svzk hkvs lcfxzll phdv jlpz vsj hslbs fb fjrk szskn rkgrl mbvt jrhvk bcrp spgkts jvmx pzqbcnq sxvkrs ztjqt bxcjrdr lkv pzxfq lcp fpgk xtsbkgf dzgdrl sjrzdg glmb zkls bttss lpfzsbd sllrrh svmvp clnr jkcgcl skzb tjbngs msxhsxl xql fvjqkh qjltjd (contains eggs, wheat) +ndpnq msxhsxl cfkjjc lkv kcvhh shlzrzq jrhvk bpfk phdv tzhmt rrbvcs rjfjcb jhsrjlj pntfmz bkdh ztjqt hgdxfc gkfxt tpxph mbvt tjbngs jsdkg qjltjd xgfqd hgtkgd mlqnfs vdccvnn vntsh hk rkqvz zkls skzb qdnfxx bzlfvx pzqbcnq gjz pzxfq qhqml fjrk pnn zchp rfpbpn jlpz jgldk gsxnqd jzhql lfcppl svmvp fb jmbj bffqk njjgv mtvp znhd hvcnl lpfzsbd zbcln lzlds lcfxzll fljmthl vkzxrm qnb nsssf qvzl bhdtrkds qftqv (contains nuts, wheat, peanuts) +gkfxt hgtkgd lcfxzll dzgdrl lvrrr rfpbpn hrkhfl hsr ndpnq zchp qkdmtk xjsp cdfmd skzb zmq zkls vkqxgr mtvp lcp qftqv jrhvk txvx ffj jhsrjlj bpfk qjltjd rrbvcs lfcppl ztjqt bxcjrdr hjp sllrrh cxfgnn fhqvnvf lppxvs zvkll lkv rkgrl vkzxrm rbvqg nkgzr jlpz xhxslhf zzdckn (contains peanuts) +hkvxh vsj rfpbpn rrbvcs bhdtrkds ztjqt gkfxt dhj lvrrr qhqml lfcppl zfvq jrhvk hgdxfc cppf sxvkrs xql njjgv lcp rjfjcb hslbs fdxdp skzb jsdkg jbcpqb svmvp cdfmd hjp xjsp xkltn zmnvg bkdh xslr szlhpq bzlfvx zkls xtsbkgf zqmmqd tfrnr slg qvzl zrkhvq ffj vntsh hsr zfqnj djlht shlzrzq lpfzsbd pnn zchp tpxph jhsrjlj xqnktk qjltjd ljfv sllrrh nvmppng rbvqg fvjqkh (contains soy, peanuts, nuts) +qdnfxx znhd vntsh mlqnfs kddsgbr gchmxm sjrzdg tjbngs qhdq hslbs ztjqt nfl hk rznx lvrrr tfrnr fpffx fb pnn szlhpq bffqk xkltn trsd hxbzr rtdzk dckkr nkgzr ppxbh nsssf jzhql jbcpqb spgkts qxhm szskn mtvp jcx scqslq fdxdp jhpvdp rrnmhx scbl jkcgcl dhj hrkhfl gcls qnnhpv bkdh zkls xslr krlgn tcq zmnvg jvmx rfpbpn zchp vkqxgr jhsrjlj qjltjd jrhvk lfcppl xttp (contains wheat, peanuts) +vhl qnb zlxrx hsr hjp jrhvk lfcppl xslr rrnmhx lrfmpx jhsrjlj dglk tjbngs lkv fpgk gcls xghl xgfqd zkls zqmmqd smvhmh svmvp zrkhvq bkdh qxhm nkgzr fljmthl vntsh szlhpq gchmxm nsssf djmg vkzxrm qhqml nfgs xtsbkgf vjpcnl hvcnl djlht cppf qjltjd jsdkg jmbj rbvqg lfqq dxmnp szskn tcq txvx zmq jzhql vdccvnn krlgn lppxvs hk zvkll (contains sesame, nuts) +scbl dzgdrl jrhvk rbvqg bkdh rrnmhx qnnhpv kslv rfpbpn phdv pzxfq qkdmtk vgmmcg hk ffj ppxbh vkzxrm tpxph vjpcnl cxfgnn bqzd jvmx scqslq lvrrr mlqnfs jkcgcl lfcppl bzlfvx zfqnj glmb dglk vsj zrkhvq gkfxt tcq xfp lfqq qxml hjp jhsrjlj qjltjd nsxs ffdnx hxbzr rkgrl ztjqt zkls zcfbq tfrnr tjbngs qvzl bpfk fb zlxrx gcls zzdckn msxhsxl dhj ckpnbz jmbj lkv krlgn hslbs rjfjcb qxhm xttp ggfrz pntfmz djlht (contains peanuts) +spgkts sllrrh zkls nsxs lkv mtvp cdfmd lfcppl phdv kltxdk mxdd fdxdp zmq bmmdth qvzl xhxslhf vjpcnl szlhpq scbl bzlfvx krlgn zfqnj fvnkvt gcls svzk nsssf lpfzsbd fpffx xslr szskn fdqzvn pcfxgn xghl vhl pntfmz jgldk jrgxc zrlv zzdckn pnn nvmppng hk hkvs vkbfhpq vkzxrm pzxfq hxbzr qjltjd lrfmpx jhpvdp njjgv qhdq jhsrjlj tcq zmrl glmb qdnfxx jrhvk gjz bbsqm bkdh bpfk rkgrl nfgs (contains shellfish) +rfpbpn jhsrjlj scbl xfp fb mlqnfs nfgs dzgdrl hgdxfc jsdkg zkls ztjqt qxhm xtsbkgf bxcjrdr mtvp qnb bqzd zvrdpk ndpnq zmrl dckkr rbvqg rkgrl znhd fjmm glmb vhl szskn qvbk ljfv dvhhjp pntfmz xslr nvmppng ckrhr kslv xttp scqg trsd ffj jlpz fpffx bbsqm pnn zzdckn fvnkvt prng zfvq sllrrh qjltjd vdccvnn lcp tcnqs phdv hgtkgd ppxbh zcfbq qxml xhxslhf xgfqd spgkts jrhvk cfkjjc msrbcfk hjp jgldk hsr hk lbdkmc hrkhfl lkv nhq dhj (contains peanuts) +fvjqkh jhpvdp sxvkrs hxbzr jhsrjlj xjsp bbsqm mtvp lkv kltxdk jzhql jmbj lppxvs jsdkg lfcppl fb trsd xqnktk dglk fpffx cdfmd zmq dzgdrl dhj vgmmcg hgdxfc znhd qvzl mxdd lfqq hrkhfl jrhvk bpfk jkcgcl pzqbcnq zkls rrbvcs rfpbpn nfgs njjgv xslr xttp vjpcnl jvmx phhrpt ccc tjbngs fdqzvn tzhmt zvkll nhq fjrk svzk pcfxgn gchmxm dvhhjp kslv krlgn ffj sjrzdg ggfrz lcfxzll djlht fpgk nkgzr tcq phdv (contains eggs) +gkfxt msrbcfk vkzxrm zcfbq lkv lbdkmc ggfrz hgggjq xslr vdccvnn zmnvg bkdh fljmthl qhdq djkb skzb shlzrzq kltxdk krlgn fvjqkh msxhsxl lpfzsbd mxdd jhsrjlj hvcnl zfvq txvx rfpbpn jrhvk jmbj scbl lfcppl fvnkvt szskn jzhql gchmxm smvhmh bmmdth hk tjbngs nkgzr tjvs gcls ckrhr zlxrx bttsc sllrrh fdxdp slg qjltjd qnb szlhpq jvmx tfrnr tcnqs xfp zfqnj ndpnq jhpvdp rvhkkp fpgk jsdkg xtsbkgf djlht tcq (contains dairy) +szlhpq nhq fjmm cdfmd gcls zvrdpk lppxvs sllrrh kcvhh mxdd bbsqm sjrzdg qhdq zqmmqd fljmthl ckpnbz skzb bqzd xhxslhf xghl dglk prng gsxnqd fpffx zmq qvbk ckrhr dxmnp nkgzr cfkjjc vjpcnl qjltjd vkbfhpq slg jhsrjlj ggfrz zvkll znhd hjp lzlds hkvs svzk lkv pnn mtvp clnr jrhvk rznx ztjqt hkvxh dvhhjp scbl smvhmh pcfxgn kslv hgdxfc rfpbpn phhrpt zzdckn fpgk vdccvnn tjvs xtsbkgf zlxrx rrnmhx hgtkgd rtdzk zkls hslbs ndpnq xslr jhpvdp bzlfvx (contains shellfish) +ljfv jhsrjlj bcrp zmnvg hkvs bmmdth fhqvnvf vgmmcg bhdtrkds xql rkqvz bkdh bqzd ndpnq jrhvk cppf qkdmtk rrbvcs pnn lpfzsbd msxhsxl rznx zcfbq tjvs mld ffdnx zrkhvq lkv bffqk nsxs svmvp jrgxc hrkhfl fvjqkh hslbs bbsqm scqg rfpbpn znhd zfqnj krlgn xslr qjltjd jcx dvhhjp kcvhh kddsgbr lfcppl kslv gcls qvbk phdv dhj mtvp lbdkmc (contains shellfish, wheat, nuts) +jbcpqb zfvq jrhvk krlgn slg jrgxc pzqbcnq hgdxfc kddsgbr vsj nsssf spgkts cdfmd qjltjd ztjqt qxhm qnb sjrzdg ljfv dglk nfl zkls pzxfq zmnvg lfcppl tjvs tjbngs qvzl fdxdp tcq djkb skzb fpffx gchmxm lkv xslr dxmnp qkdmtk prng fljmthl zmq rfpbpn zrlv jcx rjfjcb clnr xhxslhf bzlfvx pcfxgn (contains wheat) +kltxdk fvjqkh xttp lvrrr qhqml bmmdth zcfbq scbl nfgs pzqbcnq djmg qxml fvnkvt ndpnq hk jcx tjbngs fjmm zrkhvq rtdzk dxmnp hgtkgd bbsqm gkfxt zvkll bcrp vhl fpgk scqg rfpbpn bttss dhj jlpz kddsgbr xslr cfkjjc sjrzdg lzlds hkvs vjpcnl lpfzsbd nvmppng lfcppl slg znhd trsd qnb vkzxrm kslv pntfmz jrhvk szlhpq zrlv shlzrzq ggfrz lcp qjltjd tfrnr tjvs phhrpt zkls xjsp jhsrjlj (contains shellfish, peanuts, eggs) +rbvqg lpfzsbd zcfbq spgkts ckpnbz hsr glmb bxcjrdr jgldk fvnkvt vkqxgr scbl qkdmtk jhsrjlj jsdkg tcnqs ffj scqg jrhvk zbcln xttp gkfxt xgfqd bbsqm jlpz fvjqkh fdxdp nsssf xslr dxmnp lbdkmc rtdzk rkqvz qdnfxx pzxfq slg phhrpt qvbk qnb hgggjq nfgs scqslq qjltjd zvrdpk jkcgcl xfp rvhkkp gcls rjfjcb msrbcfk nsxs mbvt lkv tpxph kddsgbr mlqnfs hk rrnmhx hgdxfc zkls rfpbpn ppxbh bpfk lppxvs pntfmz (contains nuts) +gchmxm zzdckn qnnhpv hvcnl sjrzdg vkbfhpq qxml bffqk lvrrr ckrhr rkgrl hxbzr zkls nsssf svmvp bcrp qjltjd mtvp vsj phhrpt hslbs jhpvdp pzqbcnq zchp rznx nvmppng lkv scqslq xgfqd jsdkg xhxslhf zlxrx tjbngs cxfgnn rfpbpn zqmmqd msrbcfk fvnkvt prng rrnmhx shlzrzq rbvqg xslr scqg vgmmcg pzxfq jrhvk rkqvz mxdd spgkts mld lfcppl rjfjcb nfl bpfk ndpnq rvhkkp xjsp bkdh zmrl dhj zvrdpk lcp zbcln (contains peanuts, eggs, sesame) +vgmmcg hxbzr txvx qnnhpv rrnmhx fvjqkh jgldk lkv skzb xjsp bkdh ckrhr gkfxt hgggjq nfl hslbs ffdnx rznx qjltjd qkdmtk jrhvk vhl xslr fvnkvt lfcppl fdxdp pnn lpfzsbd tzhmt bttsc phhrpt gchmxm fdqzvn qhqml lfqq gsxnqd zkls vntsh bxcjrdr mxdd fjmm vkqxgr msxhsxl hgdxfc djkb spgkts bpfk scqslq hjp cdfmd jhsrjlj fljmthl xkltn tjbngs hkvs lcfxzll clnr bhdtrkds ppxbh (contains peanuts, eggs, nuts) +rrbvcs jgldk hgtkgd bzlfvx lkv jhpvdp hxbzr nsxs lpfzsbd hvcnl zrlv zrkhvq nfgs fdqzvn xslr tcq mbvt jcx qhdq zbcln tzhmt ckpnbz sjrzdg qkdmtk lppxvs hgggjq ffdnx hslbs skzb bpfk msrbcfk vntsh gsxnqd qxhm rkgrl zvrdpk zkls xhxslhf pzqbcnq rfpbpn xqnktk qjltjd hkvs bmmdth hgdxfc ccc scbl szlhpq vsj zmrl szskn jhsrjlj rznx qhqml vdccvnn jrhvk zvkll zmq fpffx ffj bkdh gjz znhd xgfqd qxml kddsgbr lrfmpx dhj djlht cppf vhl fvnkvt tpxph fljmthl (contains wheat, soy) +rznx fvnkvt fjrk hgtkgd xslr djkb zmnvg kslv vkbfhpq znhd lkv xttp qjltjd phhrpt hk pcfxgn cdfmd jrgxc njjgv lzlds lrfmpx qdnfxx lfcppl pzxfq jlpz bxcjrdr jhsrjlj jcx kddsgbr hrkhfl zbcln qftqv mxdd zkls fljmthl rtdzk qnb rkgrl pnn xghl rrbvcs jrhvk nfgs vjpcnl jhpvdp scqslq tcq bttss qhdq bkdh slg xgfqd qnnhpv dglk (contains soy, peanuts) +pzxfq xfp qvzl jgldk rkqvz xjsp zkls dckkr lbdkmc dglk lcfxzll jsdkg fdqzvn smvhmh bttsc cfkjjc fhqvnvf slg jrhvk qnnhpv fjmm njjgv lfcppl jrgxc kcvhh rrnmhx bpfk rfpbpn jhsrjlj ccc skzb svzk qftqv hjp ckpnbz nsssf djkb zmnvg fvjqkh glmb lpfzsbd nhq fpgk vdccvnn zchp zqmmqd sjrzdg bqzd nkgzr zrlv lcp ppxbh hgggjq hslbs nfgs xhxslhf vntsh bcrp xttp tzhmt zfvq znhd zcfbq hxbzr xslr tjvs lkv dxmnp (contains dairy, peanuts) +rkqvz fjmm dhj zlxrx zbcln xslr phdv znhd trsd jhsrjlj tpxph lzlds jcx zvrdpk hvcnl qjltjd hkvxh zcfbq gsxnqd lfcppl jrgxc lcfxzll qvbk kslv kddsgbr zmrl qkdmtk skzb fljmthl jrhvk zrlv lcp xqnktk hjp lkv xhxslhf svmvp lppxvs zfvq fdxdp xjsp pntfmz ljfv bqzd rfpbpn fdqzvn (contains soy, peanuts) +prng szskn jkcgcl rkgrl lvrrr nvmppng zmnvg mbvt xqnktk zlxrx hsr jhsrjlj kcvhh bkdh bqzd dckkr scqslq vkbfhpq bpfk ztjqt bhdtrkds nsssf jvmx rrbvcs vntsh rfpbpn xhxslhf njjgv ffj dxmnp tjvs xttp qvbk zkls qxml tjbngs dhj gchmxm msrbcfk qxhm dvhhjp mlqnfs vkzxrm xslr djmg fvjqkh rvhkkp hgggjq sjrzdg nsxs hgdxfc tcq xfp fjmm zmq bbsqm hjp ggfrz vkqxgr zfvq qkdmtk fpffx clnr kslv fvnkvt lfcppl zrlv bcrp mxdd slg pzqbcnq qjltjd nfl jgldk vjpcnl pntfmz qnb jrgxc gsxnqd xkltn jrhvk jcx (contains peanuts, eggs) +rfpbpn szlhpq bbsqm jvmx zfqnj pntfmz msrbcfk sxvkrs vkqxgr jrhvk phdv lpfzsbd prng hkvs djkb zkls fdqzvn hk lfcppl jkcgcl tpxph pnn fpgk tcnqs pzxfq mtvp fjrk hsr rvhkkp bcrp bzlfvx njjgv lkv qkdmtk xslr dglk gchmxm kcvhh szskn qjltjd rznx lfqq tjbngs zcfbq cxfgnn spgkts fhqvnvf vhl zrlv qnb (contains soy) +lkv ljfv mbvt lvrrr msrbcfk djlht bkdh nsxs mld ccc xttp hgdxfc jrhvk qkdmtk jhsrjlj xql zzdckn cppf vkzxrm xslr dzgdrl nvmppng hrkhfl qxhm nfl bttss lfcppl pnn scbl zqmmqd xfp tjbngs svmvp pzxfq skzb qnnhpv rznx nkgzr zkls sllrrh ppxbh bbsqm jkcgcl ckpnbz mxdd nsssf jgldk glmb fhqvnvf qjltjd djkb bzlfvx bqzd fb zfqnj mlqnfs ndpnq fdxdp qhqml lppxvs djmg jsdkg (contains nuts, soy) +znhd msxhsxl scqslq txvx qkdmtk bxcjrdr xkltn xfp xqnktk lfcppl hgdxfc nfl vkqxgr mxdd nvmppng fpgk gkfxt kslv ckpnbz ztjqt rfpbpn gsxnqd djkb msrbcfk lppxvs ggfrz xql fpffx slg mlqnfs dckkr pzqbcnq gchmxm rvhkkp cfkjjc jhsrjlj bqzd lkv szskn lcfxzll jmbj xtsbkgf ffdnx zmrl ccc qdnfxx zvkll ndpnq jrhvk bmmdth ffj pcfxgn vdccvnn fvnkvt sxvkrs gjz zkls hxbzr qhdq qjltjd rrbvcs (contains wheat, shellfish, peanuts) +mxdd xghl sxvkrs ppxbh qftqv rjfjcb dzgdrl spgkts kddsgbr pntfmz vkqxgr qhqml mtvp nsxs jhsrjlj zvrdpk fljmthl tcq rkgrl hjp lpfzsbd gkfxt jrhvk xslr vhl bbsqm hgggjq fhqvnvf nfgs lkv jhpvdp nsssf kltxdk qhdq zkls hsr qjltjd xjsp lbdkmc pnn njjgv skzb zlxrx pzqbcnq fdqzvn kcvhh vkzxrm fvnkvt gcls fpgk trsd ckpnbz hrkhfl xql gsxnqd ljfv tpxph qxhm lfcppl bpfk fdxdp ztjqt dvhhjp zmnvg (contains eggs, shellfish, sesame) +kltxdk sjrzdg prng hrkhfl hslbs jhsrjlj qnb clnr pzxfq rrnmhx xkltn qftqv bcrp xqnktk qxhm tzhmt scqg zkls tjvs njjgv rfpbpn gchmxm lvrrr qhdq glmb sxvkrs mxdd lppxvs fdqzvn jrhvk bmmdth xslr phdv tjbngs gsxnqd lbdkmc shlzrzq zfvq lfqq phhrpt lcfxzll ffj nsssf zrkhvq fb vkqxgr skzb jlpz bxcjrdr qkdmtk zmrl vsj svmvp qjltjd zcfbq gjz vkzxrm ffdnx xtsbkgf bkdh krlgn pcfxgn qvbk bzlfvx rznx lfcppl rvhkkp msxhsxl djkb qxml dckkr szlhpq dxmnp kcvhh xql vjpcnl fdxdp svzk (contains shellfish, soy) +vkqxgr tcq dvhhjp qvbk mbvt djlht zrlv qkdmtk szlhpq ztjqt vntsh xslr gkfxt hkvxh jzhql fvjqkh nkgzr clnr ffj cfkjjc dxmnp rkqvz pcfxgn glmb phdv fhqvnvf zkls qnnhpv nfgs jrgxc fjrk zmq lfcppl vkzxrm djmg nfl gchmxm lkv qnb jhsrjlj ccc dhj jbcpqb xhxslhf rfpbpn nvmppng ppxbh slg xttp hjp pnn qjltjd bcrp rjfjcb bttss hrkhfl sjrzdg ljfv (contains sesame) +svmvp bbsqm jgldk nhq xql nvmppng fdqzvn znhd bhdtrkds fdxdp lkv zmnvg tpxph jkcgcl hkvxh dckkr dxmnp gchmxm xqnktk qnnhpv vntsh jzhql jhpvdp skzb gsxnqd cdfmd bqzd krlgn phhrpt vkzxrm nfl xfp rfpbpn hslbs sjrzdg fvnkvt mld vkqxgr zmrl vkbfhpq hjp qjltjd xslr qxhm kcvhh xhxslhf xghl jrhvk zzdckn clnr nfgs szskn xtsbkgf dvhhjp lppxvs bttss hrkhfl hgtkgd hgggjq rkgrl lfcppl zqmmqd kddsgbr jvmx cppf bttsc zlxrx prng msxhsxl qftqv scbl zfqnj spgkts zkls (contains shellfish) +mxdd ccc qkdmtk vkzxrm msrbcfk ggfrz zkls qjltjd qhdq cppf djmg bkdh hkvxh mtvp fjmm qdnfxx jhpvdp nfgs xjsp fpffx jhsrjlj ndpnq rvhkkp gsxnqd shlzrzq vhl kcvhh hxbzr rkgrl fb phdv krlgn jrhvk hsr zzdckn tjvs ffdnx zfvq xslr szskn dvhhjp lcfxzll lkv dxmnp hgtkgd rfpbpn jmbj qhqml sllrrh zcfbq nsxs smvhmh tfrnr pnn (contains dairy) +vhl qnb lfcppl rrnmhx rbvqg txvx svmvp kddsgbr lpfzsbd xfp lkv cdfmd hkvxh nkgzr rrbvcs jrhvk zvrdpk nsxs znhd lfqq hvcnl bqzd slg qkdmtk pntfmz jlpz zrkhvq vkzxrm zmq xhxslhf jkcgcl dxmnp jgldk bbsqm svzk hgtkgd jrgxc nhq phdv fvnkvt hkvs zzdckn zrlv djlht kltxdk xgfqd ljfv xslr qnnhpv mlqnfs prng zqmmqd zfqnj nfgs jbcpqb gjz scqg zlxrx hsr fljmthl rfpbpn xttp qjltjd sxvkrs rkgrl djmg bttsc lrfmpx zbcln qxhm lzlds jhsrjlj (contains shellfish) +glmb kcvhh zfvq djlht xql tjbngs jrhvk jsdkg scqg slg lfcppl dglk xslr zcfbq rfpbpn fdqzvn rjfjcb qnnhpv skzb krlgn djkb bttss bqzd ggfrz lbdkmc ccc jhpvdp cfkjjc zmq mld fvnkvt xgfqd hsr hkvs svmvp gchmxm zfqnj dhj hslbs vkbfhpq djmg zkls zmnvg fdxdp nkgzr gsxnqd pntfmz jhsrjlj hxbzr fvjqkh dckkr ztjqt fljmthl cppf dvhhjp rtdzk jbcpqb lkv zmrl tcq (contains eggs) +lfcppl xqnktk pntfmz rkgrl jlpz rfpbpn xkltn bxcjrdr jrgxc dzgdrl phhrpt phdv jvmx xslr ffj kltxdk vsj nsxs bqzd zcfbq ccc sxvkrs vkzxrm kcvhh qkdmtk glmb jrhvk mbvt zkls qhqml lkv nfl jmbj msrbcfk nfgs zfvq xhxslhf qjltjd qnnhpv smvhmh tcq bffqk txvx zrlv xgfqd zvrdpk lcfxzll qftqv vhl znhd fljmthl cfkjjc gcls qxml qvbk hjp hkvxh (contains eggs, soy, dairy) +xkltn vkbfhpq bmmdth fb tcq bttsc svzk lppxvs cppf phhrpt ffj dxmnp ffdnx hgtkgd hkvs cdfmd ndpnq lcfxzll rrnmhx qnb fvnkvt bxcjrdr qhdq pcfxgn fdqzvn jgldk zmq ccc jhpvdp bffqk jrhvk lrfmpx jmbj tpxph qjltjd vdccvnn hvcnl bbsqm lkv hkvxh jcx nhq ckrhr hjp rvhkkp cfkjjc lfcppl dhj rtdzk scqslq xgfqd qxhm ggfrz zfqnj jzhql rfpbpn nsssf zmrl sjrzdg nsxs nfl djmg gkfxt zkls pntfmz zbcln mlqnfs phdv qvbk gjz xslr zfvq dglk ljfv hrkhfl bkdh vgmmcg fhqvnvf txvx tcnqs zchp nvmppng vhl rkgrl rznx (contains eggs) +fvjqkh qhdq lppxvs zlxrx phdv jrgxc msrbcfk fvnkvt xttp lkv zmnvg pzxfq sxvkrs lcfxzll lcp fjrk xkltn tjvs qhqml phhrpt pntfmz nsxs clnr jbcpqb zvkll ckrhr glmb lbdkmc jmbj zmq jrhvk xghl hkvs tcq gjz lvrrr znhd mbvt fdxdp lfcppl rznx lrfmpx nhq jzhql vntsh ppxbh cxfgnn hvcnl xslr ggfrz jhsrjlj rkqvz cfkjjc jkcgcl xql vkqxgr fb sllrrh jcx bffqk kcvhh nvmppng hrkhfl qjltjd sjrzdg pcfxgn shlzrzq pzqbcnq zkls djlht dzgdrl fhqvnvf slg hxbzr vgmmcg vsj tcnqs (contains soy) +lkv jgldk fdxdp bmmdth fljmthl qjltjd gkfxt vhl zzdckn zmrl lcfxzll dglk zchp jzhql rrnmhx vkzxrm rfpbpn zkls nsxs pcfxgn nhq rznx glmb fpffx zvkll mlqnfs zvrdpk xtsbkgf lppxvs jlpz qkdmtk hk nfgs ggfrz dhj pzqbcnq xslr pnn bcrp krlgn skzb vdccvnn jkcgcl vjpcnl jrhvk ckrhr fhqvnvf rrbvcs lvrrr tfrnr fvjqkh mtvp nkgzr njjgv pntfmz xttp xjsp lfcppl bpfk (contains soy, eggs, sesame) +ggfrz vhl lppxvs ckpnbz scqg mtvp jhpvdp qkdmtk zmq lbdkmc vntsh kcvhh bcrp ffdnx qnnhpv xghl dhj jvmx sllrrh qdnfxx shlzrzq qvbk glmb scqslq rrnmhx hgtkgd kddsgbr zkls lfcppl hxbzr qxml kslv dvhhjp rznx hgdxfc fb dckkr bzlfvx fjmm xslr rfpbpn qhqml nhq jrhvk qjltjd xgfqd prng zqmmqd lkv (contains soy) +fpffx clnr jbcpqb ggfrz jrhvk pntfmz hk cfkjjc lbdkmc bkdh spgkts hvcnl fb qftqv szskn bzlfvx bffqk jzhql gkfxt djkb cdfmd sxvkrs svzk jsdkg tjbngs gsxnqd kcvhh qxhm rrnmhx szlhpq zvkll qxml trsd qjltjd bxcjrdr txvx hgggjq djlht zfqnj bqzd jkcgcl phhrpt qdnfxx skzb phdv lkv slg nhq jhsrjlj fhqvnvf fljmthl tfrnr dglk rvhkkp gjz scqslq lfcppl xttp tzhmt gchmxm zkls tcq jlpz bhdtrkds nsxs zmnvg smvhmh xslr lrfmpx hgtkgd vkbfhpq lcfxzll vjpcnl rkgrl hxbzr tpxph zcfbq zqmmqd pnn xql hslbs (contains nuts, soy) +bqzd lrfmpx cfkjjc hkvs mld dhj jlpz tpxph lkv nsxs tcnqs rbvqg nkgzr vdccvnn jhsrjlj ffdnx qvzl vntsh kcvhh jhpvdp gcls dckkr xslr sxvkrs zfqnj djlht jrhvk ggfrz trsd zkls szlhpq qnnhpv vkzxrm lpfzsbd scqg tjbngs ztjqt rfpbpn phhrpt lbdkmc fjmm bkdh zzdckn nhq ffj qhqml hjp hkvxh bttsc gsxnqd jmbj zvrdpk zrkhvq jzhql jsdkg xttp rtdzk qjltjd krlgn rrbvcs (contains soy) +dzgdrl szskn bqzd fb fdqzvn djmg xgfqd hvcnl kddsgbr rfpbpn bttss zmq fjrk jrhvk scqslq lbdkmc rkqvz xghl pcfxgn txvx xqnktk zqmmqd msxhsxl ccc zlxrx trsd prng tzhmt qftqv pntfmz gsxnqd tjvs qnnhpv sxvkrs lkv xhxslhf rkgrl ljfv phhrpt rbvqg hxbzr kltxdk bzlfvx hsr qkdmtk nsssf bttsc mlqnfs vdccvnn rjfjcb lfcppl qxhm hkvs zkls qjltjd svmvp ckpnbz krlgn rznx szlhpq lvrrr clnr hk fhqvnvf hgtkgd fpgk zbcln ckrhr jsdkg lzlds zchp jhpvdp xslr ndpnq (contains shellfish) +djlht lfqq nhq nsxs jvmx rkqvz fpffx smvhmh lfcppl qdnfxx fvnkvt pntfmz rfpbpn zfqnj tpxph lpfzsbd hsr sllrrh fpgk dxmnp nvmppng jhsrjlj qnnhpv zrlv vkqxgr ffdnx qxml dzgdrl rrnmhx nsssf hgtkgd bffqk lkv trsd zbcln zkls hvcnl dvhhjp xslr jmbj ndpnq nfgs zfvq zrkhvq zzdckn fvjqkh fdqzvn rvhkkp pzqbcnq qvzl ppxbh prng fb cfkjjc zchp bqzd fjrk kslv xhxslhf xfp bkdh jrhvk qnb hgdxfc zlxrx lbdkmc gsxnqd (contains eggs, peanuts, nuts) +qvzl lkv bcrp znhd qkdmtk lvrrr vhl bbsqm fvjqkh zkls ccc xfp shlzrzq pzqbcnq ffdnx xjsp nfgs ckpnbz bttss sllrrh cdfmd zchp fdqzvn jrhvk svzk bmmdth qxml zfqnj vntsh xslr fb qjltjd fljmthl jgldk gjz jlpz spgkts dzgdrl prng slg mlqnfs qhqml jzhql hk jhsrjlj zmq hsr scqslq rfpbpn fhqvnvf xtsbkgf lfqq rjfjcb zlxrx (contains dairy) diff --git a/tests/aoc-2020/input/day22.txt b/tests/aoc-2020/input/day22.txt new file mode 100644 index 00000000..3870b024 --- /dev/null +++ b/tests/aoc-2020/input/day22.txt @@ -0,0 +1,53 @@ +Player 1: +44 +24 +36 +6 +27 +46 +33 +45 +47 +41 +15 +23 +40 +38 +43 +42 +25 +5 +30 +35 +34 +13 +29 +1 +50 + +Player 2: +32 +28 +4 +12 +9 +21 +48 +18 +31 +39 +20 +16 +3 +37 +49 +7 +17 +22 +8 +26 +2 +14 +11 +19 +10 diff --git a/tests/aoc-2020/input/day24.txt b/tests/aoc-2020/input/day24.txt new file mode 100644 index 00000000..44a2f19f --- /dev/null +++ b/tests/aoc-2020/input/day24.txt @@ -0,0 +1,547 @@ +neeneneneswneneee +eeeswneseseeseeeseeeeesesee +swswsweswwswswswnw +neseewwswwneswnewnewwswswwswwse +wswsweenweesenweeeeeenweeee +neswwwswwwnewwwwwwwwsewwswsww +neseeeswesweenweeeeeeeeee +neeeneneeneeswneeneneneene +ewwsenwwenwnwswnwswwnewwwsewne +sesesesesesewseseweeeeneweseeww +neeeswnwneswneneneweeneeneswnwnesw +neseswnwnenenewneneesenenenenenenenenenene +eneeeeseseeseesewseseseeeseee +enenewseeenewnweseewnwneseweesw +sesesesesenwseseseseseseseswseseee +nenenenenwneeesweseneeeeeenenenwe +neeenenwseswsenewseswenwewsww +neeenesweswwneeneeeeeeeeenwe +swseneswewwsewsweeeseeswwsesww +nenwwnwnwswwnwwnwnwnwnwnweswswnenww +swswseseswnwswswswseswseeswswswswnwswsesenw +nwnewwswnwesewnwwwsenwwnewewe +newwsewwsenwswwswswswswseswwnwwwsw +swswsweswseswswwswswnwseswswswswswswswsw +nenwnwnwnenwnwnwnenenwnenwneswnesenwenw +nwswnwwnwnwwnwnenwwse +neesweeeesewewneese +nwneweswwwswswwswwswswsewsw +wwwwsenwwnwneswsewsewnenewnwwseswne +eeeeeneneneneweneeeeeweswnene +enenwneneeneswnewnweewseswneswnew +swsesesesesenweswseseseswswseswswsesese +nweeeneweewsw +nwswswneswswswneswsewswswswswsesw +swenwwnenwnwnwswnwsesenenw +swswswnwneswswswseswswswswswswswseswse +sweseseseeseseweenese +wnwnwnwnwnenwnwswnwnwenwsenwenwnwnene +eeenweeeeeeeeeeesweeee +nesenwswnwseswneewnenwenwsenwenwewnw +eeeeeewesenweeseeeeswe +swwwswneswsewwswsw +nwnenwnenwnenwnenesenenwnwnwnwnwnwwnw +newnesewnwnenwneneenwnenenwnenenenenesw +eeeeeeeeeeenweeeseeeesw +swnwnwwnwwwnwwewnwwsewwwwnwnew +nwnwnwenenwswnwnwnwnwwnwnenwswewnwnw +swseenwnwswnwnenesenenwnwneeswneenwwnw +enwwseeswwenwswswesw +enwseseeeeeeenweeeseeseswseee +eseswseseswseneenwwneeswwwse +swswswwesenwswswswswswswswswswsenesesw +neswenwswswswnwnwsweswnweswswsweswsw +newsenenwswesewenesewwseeesenwesew +seswswswswswswneseseswweswseswsewseswnw +wnwwwwnwnwnwwnenwwewnwnwswnwnww +newwwwwwsenwwwewwwnwwwww +seseseeeswseseswseswswwsewseseswswse +eenenwswnenwneswnesenwnenenenwnwnenenewsw +swnwewswwewnwnwswwwnwnwewwwse +nwenewneneneewnene +wwwwwswwswenwwsewwwwwwswsww +enenewswnwneneneneseneneneeneneeneene +wnwswswnewwwswnewwwsewwseswnew +nenenwwsenweswnwswswnwswnwnenwnwne +seeenwesesesewseseeseseeesesesese +eeneeeeeeeneenwenweswsweeene +wneneneswseneneneneneneeneenenwsenwnene +seseseswsenewesesesenwneseseeseseesese +wsesenesenwsesweseswnwsesweseseesenwsese +wwwwnwwnewewwswsenwseseewnwnenwnw +wnenenenenenenenenwnenenwnenenesenenene +neeewnwwneneesweneeweseswnwneswsw +neesewwneenwnwwwwseswwnwwwwswww +esweeeeeeneneenwe +eseeseeeeenwswseeseneeseseseswee +neneenewnweneseswnenenwneneenwwseswne +senwwnesenwswnwneeewswnenwnwwnwnwsene +eeeeseeeeeneewwneeweneeenene +nwnenesenwwwseswseswnwwesesenwwnene +swseneswswswswswsewswnwneseswseneeswsesw +nwnwwnwswnwnwwnwnwenenwswwnwnwnwnwenw +seswswseeesesenwnweeseeeneeenewese +nwsenenesenwwnenenwnwneswnenenenenenene +swsewnwwwseswwwsewneneswneenene +nwenenwnwnenwsenwnenwnwswnwnenenenwnenwnw +swwneneneneneenweeeneenesweenesenesw +swnwnwswnwwwswsenewsewswsewswswseswsww +enenenenesenenenenenenenenenenwswnenewne +newewesesewseseseseeeseseeesesese +nenwwwnwsewswwwwewsewwwwwsew +enwewnwwwwnwwnwnwnwnwnwnwwwnwnwswnw +neweeswesweeswewneseewnw +swswswswsewesewswswswswneseswswswseswse +swneeewseneeeeeswneewwneseenwe +wwwwwwwwwneewwsewwwwweww +eeeesweneenweeeneneeweeenee +wnenwneseeenwseeneneewneseswwnene +wwwnwewnwnwnwnwnwewneenwnwnwswswswnw +enenenenwesesewnwneeeswneneeneenenene +nwnewseneseenwwwseswneswseneeeswnew +swsewwsweseswneseseeseswneseneswswse +swswswwswswnewsesesweswswswswseneswnesww +enwwnwwnwwnewnwswswseeswnenwwnwwnwse +sesenwnenwnwnenwnwnwswnwnenwnwnenenwnwnwsw +seeneswswwswwswswwwwswwwswnenesw +swwwwswneseswwwwswwnwswswswswwswsew +swseeenenwnwswenwneneenwnwnenwnwsewsw +wswswswwwswwwswswswneswswswseswswsw +neswnewnenenwnenewenenwneneeenenenw +eswneneneneneenenwneneeeneenenewe +enenenenenenwneneeneeeeeeenese +seeseewswwseseneesenwneseseswsewswsw +ewwewswwswwswswwewwnwswwsww +swwswswswswswswswswswne +nwnenwnenenenwnwnwswnwne +nwnenwnwswnwwewnwnwswnwsenwwnwnwnwnw +nwnwnenwnwnwnwwnwnwnwswnwswnwnwewnwnw +eseneseeswenwneeneneneneewnenwnenene +swwnwwswwswswwswwswswswsewwwwswne +swsewsenenweseesweee +nwnwnwnwsenwnwnwnenenwnewnwnwnenwnwnwnw +nwsweeeseseeeeseeeeseneeswene +neenwneneswnwnesewewswneswnwnwneneswe +esenenwnwnewseneswnwsewswwnwsenwsewswse +nwwwweneeewwwesesenwneneswswswnw +nwnwsenwnewseswnwesenewnenenwnenenenwe +wnwwnwnenwnwsenwnewwnwwsewwnwwwwe +wwwewwswwswwwswwwwswsw +swswwswswseswswswswseswswswswnesw +wwwwwwwwwwswwewwnwwwww +nwnenwnwnwnwnwsenenwnwnwnwnwnw +swnwswswswswwseeeswswswswswswsewnwnwsw +nenwnenwnenewnwnenwnwnenwnwseenenwnenwne +seewseeseeeeseseeeweneseseseese +seenesesesesesesesewseseseseesesesese +nenenenenwneneneenweneneneesenenenesene +swswneneeseswwswnwseswswwswswseswsesw +nwswsenwneenwnwnwnwsenwnwwsenwenewnwsw +nweseseseswswswswswswswswswsw +seseswseseseswsenwseseseseesesesesesese +wwwwwwsenwwnewewnwwsewswnesww +nwseswswnwseswswsewseseeseswswesesesesw +seswseseenwswseseseenwswseswseesewswse +nwwnwnwswnwwnwnwnwnwesenwnwnwwwwnww +neneswseneneneswwnenweneeneneenesenww +swswswswneseswswseswswswwswswsesweswswse +swneswseswswswswswswswswswseswswseseswsene +swswneneswswwneswwwswswswwswnweswsene +nenwnwnwwnwnwnwnwnwnwnwnwnwenwnwnwswnwnw +wwneswwwwwwwwewwwnwwwsewww +neneeswnwneneeneeee +swesweswswnesweswsesewwnenwnwnewnwnee +nwwwwewwwwwwwnwwseswwwswwe +sweenwseeseneweseseeewnwseeseenenw +eeeeeenweseeneeeeeeeenesw +nwnwnwswnwnwnwswnwnwnwnweeenwnwswnenw +eneeneeeeweeeeeneeeeneewsee +swnenwnweneneenwnwnwnwswnwnenenenwnwnwnw +nenwnenwnwnenwnenesenenwnwnwnenw +neeswnweswswseewwnwwweswwwwwne +nwseeeeeeweseeeeseeeeeeee +sweseneneseeseeseeneeeeeewsweew +wnwwnewswwwswwwwewwwwnwww +wswnwsweswwneseswnwswswwseswsweswnwwsw +nweswneeweeeeswsenwew +neeswneneenenweeneneneeneseenesenwe +nwnwnwnwnwnwnwnwnwnwnenenwnwnwnwsenwnwse +seswseseswseseswseseseseswsesenw +nwnenwewnesenwnwnwnwnewnenwnenwne +swswswswesweswswswwswswswswswswwswsw +nwnweeeeeeeeeseeeeeeeese +wswnwnwswswswwwwswswswswswwwseswswse +seneswwseswsesewsenwsenenesenwseseese +neneneswneswenenweeneenenenenwnwswnene +newwwnwwwwnwsewwwwseswwwwse +swsenwenwnwnwnwnewnwswenwwesw +newwnwnwnewsewwswwwwnwnwnwswww +eseswsenenesesenwwseswseseseeseesese +nwwenwenwsenwnewnenenwnwwnweneswnwne +neswneneseswseeseseswswsenesenwswswsww +neneeeswseneswnwnwwenenenwseswwwe +nwswseseseeeseseseseesesesesese +wswwnwswswnenwneswnweswseenwewwwse +swseseswseneswswseswswseseswswnwswseswswsw +sesesenwseswseseseseseeesesesesesesese +nenenenenenenewwneeeneneseneeneneene +wnwswwewswnwnwsenenwesesweeswsene +enenenwneneneeneeeneeseswneenenenene +seenwseseeneeswwneseeeseswwesenww +seseswnwwsewnewswnwseswneswswswesweenw +nenenenenwnwnenenwwnwenwnenw +nwwwwnwneeeeneneneseswsenewesenw +swswswneneseswwwwswswswswswnwswswswsw +nesesenwswswseswnenwsewswseseseseswnese +neeeenenweswenweneneeneeneeeeese +seeweneseeneseseseswseewsenenwe +seseseseseseseseseseseseseseswsenwsw +wswswswswsweswwwwseweswwwswswne +nwseeswneswneswwnenwseswenewseswwsw +neeweenweeeeneeeeeesweeeee +swwswwswwneweswwswswwwswsewwsw +sesweswwswenwweswswesenwnwnwnweswse +nwneenenwnewenesw +wnwseewwenwwwwesewwwnwewwnw +eeeneesenenenweswene +seenwseseseeseseewsweesesesewsese +wswsweswswseseseseseseseseswswsesesenwse +wweeeeeneeseeeeeeeeesese +swseswseseseeswsenenwseswseseseseseswsw +wwwewwwwwnwswwwnwnwnwwwewnw +wwnwnenwseneeswswswewewswswswwenw +neswswswswswseseswseseseseswseesenwswsw +neeswnewnwwswsenwnwnenwnwsenesewene +nenwseeswwswseswsesesweseswswswswseswsw +nwwwwseneneswseseneeseswswnwnwseene +seesesesesenwseweseeseseeseseswseese +ewwwswswwsewnwwwwswnewneeswsw +eeneneneneneneeneenenewnenenenesewne +enweeswnwsweseneeneenwsenewnwswswne +sesenwseewsesenweseeeseseeeseeenee +nwnwnwnenwnwnwswnwnwnwnenwnwenwnenwswnwnwnw +seswnwsenwnenwnwnenwnenwnwnenw +nenwnwnwsenwnwnwnwnwnwnwnesenwswnwnwnwnwne +swnwnenwnenenwnwnwnwnenwweenwwenwnwnwnw +senwnwnwwnwwwwnwwnwnwnwswnenwnwnwnewnw +neswnenwswsesewnwnewsewwnewnesenewnwnw +wwwsenwnewwwwewwnwwwwwsww +enwneeneneswswnesw +enweesesewsenesesw +eeswewneesenenweneneneneneeseee +nwnwseneswnwnwwewwwwsenwwwnwww +swwneswneswwwswsweeswswswwswswseswnw +ewwwwwsewswwwwwwenwwwneww +swneswseeswswswwswnwsewwswswswswwswwsw +sweswwswseneseeewswwnenwnwneewwsw +swwswswseswswswwswswswswswswswwswswne +nwwwswwwwwwswwweweswneswwew +neneneswsenenenwnenenwneswnweweenwsww +senwswnewwseseeseenewseseneeeswene +nenwsewwsenewswseenesewsenenewnwe +swswswswwwwwewswwnewwswwwwww +swsweswsenwnweenenwe +wnwsesesesewseswnesenesenwswsesesesesesese +eeewseeeseeweeeseeewwenee +eeeeeneeeeeeeweseeewwe +neneneneenenwneneneneneneneneneneneswne +seeseeseesesesenweseeeswneenwnwee +seeeseenwswneeeewswewneseeew +nwseenwnwnwnwnwswnwnewwseenwnwnwsenw +esweeeweweneeseeneseee +ewswnwswswwnewswwsweseswweswswww +sweseeneswwwwnwnenwsenwwsweseswe +eweeseseeswnwneneeeneew +swnweseeeeeneweeeeeeweene +wwnwwweswwnenwwnwnwswwwewwsw +neneeeweenewneneeeeneeeneswe +swwwesewnwsenenwnewnwneseenwwswnew +senwnwnenwnwnewnwneneswwneeneneenewse +nwwwnwwwwwnwwwwnwsewnwwwsew +wwwswwswwwswwwwseneneeswwwww +neswswseswswnwseswseseswswwseswsesesesese +nwsewnwnwwnewnwnwnenwneenwnwseneenw +seseseseseseseesenewsesesesenesewsese +newwnwnwnwwnwwwnwsenwnwnwwwsenww +swswenwnewswswswneweweswswswswnwsesese +seeseswseseseseesesesesesewseseswnwse +nenewneneneswnenwsenenenenewneenenenee +sewseneseswneseneseeewswnwswsewswwsw +eeswwswswswswswswswswswsenwswswnwwswsw +seneenwswseseeeneeeeeswswsenewe +nenenwnwnenwenenenwnewnwwsenenenwnwne +nenwenwswenwnenwnwsenwwnwenwnwswnwnw +wwwsenwwswnwwwewenewwwwwnwnw +nwnwnwnesenwnwnwsenwnwnwswnwnwnwnwnwnwnw +swswswswseswsweswswnwswwswseswneswswswwsw +eswnenwneenwewnwnwnww +seseseseeseneseseseseseseweeseseseswnw +enwwnwnwswnwnwnwnwwwnwnwnwwnw +swsewseneswneewwwwnwnwnwnwwseswsesww +nenesenwnenenenenenenenenenewneneswnee +nwweswwsweswswswneswswnwswswswswww +neeneeneneneeneenenenenenenewsenene +nwswswswsweswwswswswwswewwwswswsw +swwswwwwwswwseswswswnwweneswswsw +wswnwneeneswnwwswwnwwsenenewwnwww +nenenenenwwenwnwnenwenenww +seseneseseswwneseeseewseseesesenwse +nwenwsenwnewneswnwnenwnwnwneenwnwnwnenw +nwnwnenwnwnwnwnweswnenwsenenwnwnwnenwnwwne +nwnenwenwswnwenwwswnenwnenwnwnwnwewnee +wwnwenwnwwnwwwnenwnwwnwnwnwesww +neseeneeeneeeeewneneneneeenee +swseseswnwneeseseneswswwswswnwswse +swnwswseswswwswswswneswsw +swwweeeeswnwneneeewnweeeeee +enenwnenwsenwswnwnwnenenwnewnesenwnwsenwnw +swewswwneneseeeenwneenenwnenwseee +seseseseseenwseneseseeseswseeseswnwse +seneeeseseeeseswnwswsesesenwwwseenw +wwnewwwwwwwsenewwwwwwswwnww +nwswwwswswwnwsweswswsweswswsesweswsw +swswnwnwnwnwwenwnwnwenenwnenw +seeseseseseweseseeeseseesee +wnwnwnwsewnwnwnwnw +nwnenenwnwneswnwnwnwnwnwnwnwneenwnwwnw +sweeseneweseneswenwsesenweswsenwnee +wswnwnweseseewenenenwenenesweene +nwnesenwnwseesewneswwnesweswnwnwsenww +sewneswwwnwewnenwnwnwwwswnwwnwswe +eeesweseneeweenweeswenweneewe +neneneeneeeeneneeesweeenwenene +eeneneeeneeeenwneeswweneenenee +sesweeneeseeeweeeenweeeese +swnwswneewwwnwwsewwnwnwwnwnwwenwnw +eeeeesweseeeseswenwnwenwnwee +sewwnewwswwwwswnesewswsw +nesewseewseswsesewwswweseseneswswe +newneenwsewnenenenenenwne +sewsenwseeseesewneswwwnwsenweswnene +swswswwwwwswwwswneww +wnewwwwwwwwwwwwwwwswsw +swwwnewwwwswsenwnwwwnenwseenww +neeenenwweneeneeneneneneneeneneswse +nwsenwnwnwnwnwswwnenenwsewnwswnwenwse +nwesenwnewwnwwwnwwwwnwwswnwnww +neswwsenwswnwwwswswseswswwsw +neneeneswneneneenewnewseenenenenene +seswseswsesesenesesesesesese +wwwnwwwwweswewswnw +seneseswsesewseseneesewwseswwswsenese +enenwnwnwwnwswnwnwnwswnwenwnwswenwnw +neswwsenwswsweneswswnwswseswnesenwnesw +senwwnweswseswneswneewneseesesesesene +nwenwwnesenwnwwswenwnenwswnenwnenwse +weneeseeneeswweswnweswenwewswnw +eswnwewwnwnwswwswwswene +swwnwneseseseneneseswewswwsenewseee +seswwnwwwswseeswwswnwwsewwenene +neeneneneneneenenenenewsenenenwswnene +eesesweeeeeeeneenweeweseww +seswswswnwswswsweswswnwswswswseswswswsesw +nenwnwnwnenenwnwnwnwwnwsenesenwnenwnew +neneswneneneenesenwnenenwnenwwnewnesene +wnwnwewnwwswsenewenenwnwswwwwwwnw +weneswnenwnenwnenenenenwnenesewnwnene +eneneewswneenenwswnenweeeeneesee +neswseseswseswwseseseseswnwnwnwswnwsesw +nenenenenenwenenewnwnwwsenwnenenenene +weseswnewnenwwenwnwnwewnenenwsenw +swenwnewewwwnwneswewwsewnwsewnw +seseseseneswseseswseswseseseseswnesewsesese +nwnwnwnenwnwnwnwnenwnwenwnwnwnwnwnwnwsww +nwesweeeneeeeseeeeeneeeeee +esweseswnenwsenwnw +swneswwswswswewswwnwnewswsenenenwsw +enenwnwswnwnwnwsenenwnwnenenwnwnenwnwsenw +neswneswswswsenwseseneswseseneswseswswse +ewneneenwnenwneneswnwnw +swsenwsenesweswwnwsenesewswswwseswswsesw +swwswwswwwswwswswwswnwswswswe +nwwnewwewwwwswneswwswswseswswsw +seeseswwnesesenwsenwswweseswenwnese +nwnenwneneswswwnenesenenwnenenwnwnenenene +nenwnenwnwswnwnenwnewneneneneneneneenwne +eeeenenenenwneneeeeeeneewsese +neseswsesesesewsenewsesenwseneswnesesw +eswnwswsweeswnwnwnwwswwwswwesesesw +wnwwsenwwwenwswswswsewwenewnwwnw +seweeeeeeeneeeeseenwswnenwee +nwsenwwwwwwwwwwwwnwwwneww +swneswswswswwswsweswwwswnenwwswseswsw +swneeeeeeesweenwneneeeeeee +neewsewswseswswsenwswswneswwswenesw +wnwnwsewwswnwwwwnwnwnwnenw +neseseeseswsesesewswsenwswseseswseswswnw +nwenenwnwnwnwnwnwnwwswnwnwnwnwnwsenwe +neneeewnewnweseenenwswwnesewsee +sesewseswneswswseseswnwswswneswneswswe +seseseswseswsesesesesesesesenesesewsesenwse +enwwwswswwwnwsesewwewwwnwew +nwsenwnweseswnwnenwnwnwnwnwnwwwswnwnw +nwseseeneseesweseseseseseseseeswnwsese +seswswseswneseswswneswswswseswswswswswswnw +swswsenwseswswseswswswseseneseseseswneswsw +seseeseswswswswswseswnwswswnwsweswsesw +wneseswseseneseesenenwwnesewseswswese +neneswnenwnenenenenwneesenwnenenenwnwnene +sweneseweseeeeeseeeeeenweeee +enwnwnwnwnwnewenwsenenenwnenenwnwswne +weeeeneeeseseeeeseseesewewee +wsenwnwsewwwwwwwnwwnwnewnwww +nwnwewnwnewnwsewnwwnwnwnwnwwwwwse +swswswwwwswwswswsewnewwwswwneww +nenwswewwswneswwswswwweswswwww +neneneswenenenwneneweewnwnenenenene +swswseneseseseseswseswsese +nwnesenwnenenewneseswwwnwenenwseene +wsesewseseseseseseesesesesesenesesese +seseweswsesesesesesesese +nwnwnwnenwsenwnwnwneswnenwnenwenwnenwnw +seseswewseneseseseseseseswswsesewnese +seswseswsesenesesesesesenwswseseseswsese +sweenwseeeeeeeeenweeeeeeswe +eenwwnewswsesewewswswseneswnewww +wwwwwwwwwnwwsewww +wnwnenwswenwnwnwnwse +swneseneneswneneesewwnenene +wwswewwwwwwwwnwwnwwwswwswwse +sesesewseeseswsewseswnesesesesesesene +swwwwwwwwwswwwwnewwwsenesw +swswseswswnwswswswseseeswsw +newwswsenwnewwsewseseswenwneeswwnw +nwsweswswswswswswnwswswswseswswswswsesw +nwswneseswseswsenewenewwneseewsenw +sewseneseneseseseseesewseseneswsesesese +wnwnwenwnwnwnwnwnwnwnwsenwnwneswnwnwne +sewneewwsesenwnwnewwswwwwneswwsw +wwwnwsewwwwswwwwwnwwwwwe +ewneenwseneneewswneswneenenwenee +swwswswswswswswneswswseswswweswswswswswsw +nwswnwswnenenwswneneneneeneene +esenenenwneneneswenenewneneneenenenenene +swswsweseewweswwsesw +enwewwnwnwsenwneseswwesewnewenew +eeeseseseeneesweeeeeee +ewenwwwswwseswnwswnwwswsweswwww +wnwweeneenewnenenwnewswneeesew +nenwnenwnenenwswnenwnewnwnenwenwnwnene +neneneseneeeneneesewneneeew +neneneneneneneenenwneneneneswneenesenene +nenwnenenwnwnwenenwnwneneneenewswnenenw +swwwswwwwewswswswwwswnwseneswswww +neenenewneneseneneesenewenenenenwnwnese +wnwwweswswswwswweswswwswwswwwwnw +wswwwewwswwswwwwwwnwwwsw +senwesewenwseseswesesesenwswnwsesee +nwnwnwnwnwneneswnwsenenwnenwsenenwnwnw +seewwwwwnwnwwwwnwneswwwnwswnww +seeweseeeseeeeseneeswseeseene +enesweeweeeneesweneseeeeneee +senwseweswneeesweeneseweeesenesew +swswseswseswswsweneswswswwenwwneswsw +swswswwewnwswswswswewwswswswswswswsw +swswswseswsesewseswseenwseswseswnwnesese +ewswswswswswneswswnwwenwsesenwswwsee +swnenwweesenwswnewneneneswnwnwnwswnenw +nwnwnwnwnenwswnenwnenwenwnwwnwnenenwnwne +neneseenewnenenenewnenenenesenenenenenee +nwnwnwswnenwnwenwsenenwnwnenwnwnenenwnwnene +nenenenenewnenewsenenenenesenenenenene +swswswswseseesesesenwswswsesenwseseseese +neneneweeeenesesewneweneeeneene +wwnwewswsewwnewwnewwwww +seseeeeseeeeeesewseee +senesesesweseswenwnesesweseneeseswe +wweeswswnwswwsesesewesenwseewee +nwwnwwnwnwnwnwwwnwnwswenwwnwnw +wwswnewwwwwwwwwwsewwwww +neneeneneneneneneeneenenesenenenewne +neweseeeeseeeeeeeswseeseesee +nweneneswnwnwnwnenesenesewnwnwneenwnwnw +neneseswnenenwnwswwnwnenwnewseneseneneenw +nenenewesewseweeeswswneswneseee +swswseseeseseeeseesesesenwsesesesenwsese +seneeneenweeneneenesweeewneee +wwwewsenewwswneeneeswseswswenw +nwnwwnewsenewswnesenwwwnwenwwsenwnw +seeenwneewnweswnweewseewseese +sewnwswwwwnewwnewnwwwsewwww +swsenwnwewnwnwnwnwnwnwwnwnw +enwesweeseeneswneeseewsewwnee +wnwweneswswwsenwwwnwwwwnwnwww +wwwswwwwwwnewswwwweswwww +swswnewswswsweswswwwswseswswwwsw +wwwnwwewnwwwwnwwwwnwwwnwsew +nwnwnwnwnwsenwwnwsewnwnwnwnwnwnenwnwnw +nesenweswnenenesenenenwneneeeneenwne +sweeeseeeeesenweseeseseeese +eseswwswseswseswneseseseseseswswseswwswsw +nwenwnwsenwnwnenwnwnwnwnwnwsenwnwnwwne +wewwwwwnewwwwewwnwwswww +wnwwwswswneeswswswswswseseseesenwesw +seweeeenweeeeesweeeeee +nenenenenwsewnenenwneneswnenenenenenenene +neesewneswneeeneneneneeenwwwneene +swseswneswseswwesesweswswswnwseswnwswswe +newnwwwseswswwswwswnwswwwsewswwne +swswswwswswswswswsenwseswnenewswwswsw +neeneenenewneeweeeswneseeeeee +newsewnenwnewsenesewnwee +nwnwswswseseneswswnweseswsenwneseweswsw +seswswwwwwswwneswswwenewswne +eneeenwwnwwwwwswnwnwswnwnwwww +nwnwnwnwnwnwnwwewnwsww +seeswneseseseeseesesesewenwseenwwse +nwnwwswnwwwwewnwnwwwnwnwwewnwew +eeseseseeeseneseeeseseeneseseswwsese +swwswswweswwwnwswneswwswswswwww +wnwswwwwwnwnwwwsenenwewswwwnenw +sewswseseswnwnwsweenweswwseswswswnenwne +wwnwwwnwnwwwwwnenwwnewswnwwnwwse +seweswwneeswsenwswnwwswswswnwseswwsw +nwnenenwnwnwneswnenenenenwenwnenwnenwneswne +sewsenwnenwnwwwnenwnewwsenwwnwwnwse +seseeseseenweneseweseswswswnesesenw +swwneswwwwswwnewwswwseswswwsww +seesweswnwseseseswnwnwswswnwse +eesesweseeeseeeeeeenwsweene +swseswswswseswswswswswswswwswswenwswsesw +swwswswsweswwwnwswswswnwswwsewswsw +nwnwwwnwwnwnwwnwwneenwwwwnwsesee +weeenwseseseseeseenesesee +nwnwwseenwwwwnwwnwwnwnenwsenwnww +eeeeseseeeeswseeseseswneseeseeenw +eeeeeneesweeeesweeenenweeee +eweeseneeseesesenesweeseewsewne +neneneswswenenwwnenewsweneswenwswsenw +wwswnwsewneseswswneesenewswwwsenwsw +seswswsweswnweswesweswswwnwnwsesese +weneeeneeeeewseeeeeeeneee +nwwnewwswwswswswwwswswwewswwwe +seseesewseneeseesesweswsenwwsenwsese +wenwseeswwnwewwneswnwenwwnwnwse +wwwewswwwwwwwewnwwwwwnww +seseswsesweweeesenweeseeeeseesenw +swseneswneseswwswswswswseneseswswswswsesww +esenwseseeeseseseesesesesenwwnwseene +neeneneneeneeenenenwwswe +wnewwswswswwwswswswswsewswwswwsw +eswnwesenesweeeneesweeneseeesw +nenwneneneeswneneneswnwnenene +swswswswswswswneseswswenwwnweswswswsw +eeeeneeeneeewneneeeeeeenwesw +neneeesweseneneenwseenwnee +nwnenenenwswewnwnwnwnwnwnweswseswnenw +wneseseseseseseswseneswseseswsesesesese +wswsweseseswswneswwswneswneswswnwswsw +swnwnweneneswsewnenwnw +nwnwnwnwnewnwnenwnenwnwnwnwnwnesenenesene +nenenenenenwnenenwneenwswnenwsenenenenw +swnwswnweesenwswswswsenwswseseeswswsesw +ewswnwseswsenweenwsenesesewsee +nwnewseewsewnwnwnesewwnwsesenwwswnw +nwnwnenwnenwneneneenwwnenenenwswnwenenw +nwwwswwwwwwnwwwswwenwnwwwe +wnwsenesenwswsewswneswswnwsewswwwwsw \ No newline at end of file diff --git a/tests/aoc-2020/input/day25.txt b/tests/aoc-2020/input/day25.txt new file mode 100644 index 00000000..4b4f611d --- /dev/null +++ b/tests/aoc-2020/input/day25.txt @@ -0,0 +1,2 @@ +12092626 +4707356 diff --git a/tests/aoc-2020/input/day3.txt b/tests/aoc-2020/input/day3.txt new file mode 100644 index 00000000..9ba5fa14 --- /dev/null +++ b/tests/aoc-2020/input/day3.txt @@ -0,0 +1,323 @@ +.....#.##......#..##..........# +##.#.##..#............##....#.. +......###...#..............#.## +.....#..##.#..#......#.#.#..#.. +..#.......###..#..........#.#.. +..#..#.##.......##.....#....#.. +.##....##....##.###.....###..#. +..##....#...##..#....#.#.#..... +.....##..###.##...............# +#.....#..#....#.##...####..#... +#......#.#....#..#.##....#..#.# +##.#...#.#............#......#. +.#####.......#..#.#....#......# +..#.#....#.#.##...#.##...##.... +.....#.#...#..####.##..#....... +#....#...##.#.#.##.#..##.....#. +##.##...#....#...#......#..##.. +....##...#..#.#...#.#.#.....##. +..#....##......##....#.#....#.. +#..#....#....###..#.##....#.#.# +..#.#####..##....#....#.....##. +.#...##.......#...#....#.#...## +#.#.#.##.......#.....#.#.#....# +.#.#.....#.......#.......##.... +.#......#....#....#.......##... +#......#.....#......#..#..#.... +#.#...#...#....##....#.#...#..# +....#.....##...#...#..#.#...... +..#......#..........#...#.#.... +..#..#......####..##...###..... +.#.....#...##...#.##........### +#.#....#..#....#..#.....#.#..#. +...##.##.#.#.##...#.....#...... +##....#.#.#...####.#.#.#.#..... +.##.........#..#..###.......... +..##.###.#..#..#....##.....#... +##........#..###....#.#..#..#.. +....#.#.......##..#.#.#.#...... +....##.....#.........##.......# +..#........##.#.........###..## +....#..................##..#... +#...#.#..###..#.....#..#..#...# +..#..#.##..#..#.......#.......# +.....#..##..#....##...........# +..##...#........#...#.#.......# +.........#.#..#.#..#.##.#.###.. +....#...#..#..#......##....#.#. +..#..#.#....#....#..#.####..##. +##....#.....#......##.###.#..#. +#..#..##..###......#.#.#.#...#. +.......#..##..##...#...#..#.... +..#.###.#...#....#.##.#.....##. +.#.#.......##...##...##....#... +#...#.#.#...#.####..#..##...... +###..#.##..#..........#...#.... +##.#.........#..##......####... +..##.#..#....#.##.............. +...#....#.......###............ +...#.....##....#.#.#.#.......## +###.###...#...#...###.##...##.. +#.#....#.##..#.....#.....##.#.. +...#....#....#.........#....#.# +##.#....#........#..#..##.#.... +.#.#..#.......#...##.......#... +.##...##........#....#.#..#.... +....#..#.##.###.....#.#........ +.#.#...#.#..#.....#.........#.. +.......#.#.#..##....#.........# +.##...#....#..#...#........#..# +....#....#..#.#..#.#.#....##.## +..##....#.....##..#.#...#...#.. +#.##.........#.....#.......#.## +...#...##.#.#..........#......# +###...#.....#..#.......#####..# +#.####...##.#.#..#...#......... +.##.....#.....##..#...##.##.... +.........###...#......##....### +.#....##...###.#..#...##..#.#.# +.......#.......#.#...##.#...... +.....#.#........#..##.....##... +....#.#.........##.#...##..#.#. +#..#..#.##..#.##.##.....##.###. +..##.........###...#....#....#. +.###...#..#.##...........#..... +#..##..........#..........#.... +.....#.#....#..##..#...#.#....# +..#.....#.#....#...##.##....... +##.....##........#....#..##.... +.#..#.#.........#..#..#........ +.............##....#....#..#... +....##....#..#.#.##....###.##.# +.###..#.....#..#..##..#..##..#. +...#..###.......#.#....#..###.. +#.#..#.....#...#......#........ +#..#..............###.#......#. +..#....##.#....#.##.#.#...#.... +.........##..#...#.#.......#... +........#...#.#....#.....##..#. +...#.##..#..#..###..#..#......# +.....####......#...#....#...#.# +...###.#.#......#....#.......#. +#...##.#....#....##....##.###.. +.......##...##.....#.##.#..#..# +.....#.#............##...#.#### +.##..#.#.#.#..#.#.#.....#.##... +.#..####...#.#....#.....#..#... +....##..#.#...#..#....#.#...... +...#......###..#..###..#.....#. +.#.#.#..##....#...##..#.....#.. +###....#....#...##.....#...#... +#.##....#......#...###......... +.#..#.#...#..#....#....#....#.. +...............##...####..#..#. +#.#...........####..#...##..... +##.#....#........#......#...##. +......#...#...#....#....#.....# +#......#.............#....###.. +.#...#...##.....#...##.##..#... +..#.#......#.#........#........ +.......#..#.#...##..#.#.#...... +..##...#.##........#....#.#...# +.....#..#..#........#.#......## +....#.#...##............##....# +.#.#....#.#.#...#...#.##.....#. +#.#.##...#....#.#.#..#.##..#.#. +.........####..#...#...#....... +#..#..####......#..##..#...#... +.........##..................#. +.....##.#..##.#.#...#......##.. +...#....#....#.#.....#...#..#.# +#...##.#...##...........#..#... +#..........#.#..#..#.##..#..#.# +.#...#.##...#.#.#..#.......##.. +.........#...........#..#..#... +.##...##....#.#......#........# +#.#...........#....#.......#... +##.#.#.......#...###......##..# +...###..#.##..##.#.#.......#... +.#...#..##.#...#........#.....# +...#.......#..#..........#.#... +..#.#.#.#.....#.#.......#..#..# +#.##.....#..##...#..###.#....#. +.......#...........#...#....### +.......#..#...#.............#.. +#.....###.......#...#........#. +.#..#..#..#...........#........ +....#.#...#.#.##.#.#....#.##..# +.......#..##...##...#...#...... +...#.....##.###...#.#...##....# +#..#....#...##......#....##.... +#.#.......#....#.###.##..#..#.. +..##...........#...#....#...... +.#........#.....#..#..#...#..## +.....#.#.#..#.......#....#..... +#..#.#......#......##....#..... +##.....................##...... +.##........###..#.........#...# +........#.........#..#......... +.#.##....#.....#...#.........## +....##......#.........#........ +...#.#..#...##.##.#.#..####.... +..##...........##.#.#....#..... +.#.....#.#...#..#.......#....#. +....#...#......##...#...##.#..# +....#..##....#..#.........##.#. +..##...##.##....#....##.###...# +..#....##..##.#.#.#...#......#. +##...#.........#...........#... +.##....##.#.....#...#.......#.. +..........##.###.##....###....# +..........#..##..#....#.#.##.## +........##.#...#.#.#.#...###.#. +.#......#.#.#...###.#.#.#...... +.........#......#......#...#..# +......#.....#.##....##.#####..# +..#..##...###.#..........#.#.#. +.#..#....###.#...#..#....#...## +...................#..........# +....###.....#...##......#.....# +#.....#..##.....#.#..........#. +..#.......##.#....#..#.##.#...# +........##.#..###..#......##... +#...........##.#...###..#....#. +....#...........#.....#.#...#.. +.##..#.#...#...#.##...#..#..... +#........#.#.#.#.#.#........... +#..#.....#..#..#.##....#....#.# +..#............##....#.#.##...# +.....###.#....#.#......#.###... +...#.....#.#.................#. +..#...##..#.#...#...#...#.....# +.##.#........#..#....##..#..##. +.#..........#...#.#..#..#.#.... +#.......##.........#.##..#.#### +.#..............#.......##..... +#......#.##..........#..#...... +..##...#...#.#...#............# +.##.##..##..##........##.....#. +.....#..#.....##............... +.#..#...##...#...#.....#....... +#......#...#.......#..##.###.## +###..##......##......###....#.. +....#..........#...#.##.#.....# +.........#....#..#..#.#..##.... +.....#.....#...........#......# +.#.......#...#....##...#.##...# +..##.#..............#..#...#.#. +.#..####.#.........#....#....#. +..###.#...#..#......#.......### +.#.#..##...###...#...#.#...#.#. +...#..##..###.#..#.....#.##.... +#...###.#...##.....####.....#.. +.#.##...#..#.#..##.....#....... +...#.##.....##.....#....#...... +.#...##.....#..###..#.......... +..........#...#.....#....##.#.. +.......#...#...#...#........#.. +#....##..#...#..##.#.#.....#... +.#.#..............#..#....#.... +.####.#.#.###......#...#.#....# +.#...#...##.#...............#.# +...#.......##...#...#....##.... +#..........###.##..........##.# +.......#...#....#.#..#.#....#.. +....#.##.#...###..#..##.##..... +..#.#.#......#.#.......###..... +#..................#.##....#... +#.....#..#.#.#..#...#.........# +..#..#...#.#.##........#....... +#..#.#..#..........###...#.#... +.......#.##....#........##.#... +.####.#.#...#.#...##.##.....### +........#.#...#.#..##...##..... +....##.##......#.##.........#.. +.#..#...#.#...........#........ +.......#..........#....#...#... +..###.#.###..#..#.....#..##.... +.#..........#.......##...#..... +.#.....#...#........#...#.##..# +.#..#.......#..#.......#.#.#... +....#..##.#...##...#.#....#.... +.....#.........#..#..#....#.... +..#.#..##....#..#..##.#.#.....# +........#.#...###....#.#.#..... +.#.....#.......#..###.#........ +.......#...#.#...#...##........ +##.............#.#.....#.#..#.. +.#....#.......#.#.......#..##.. +#.....#........#..##..##....... +...........#.........###......# +....#.##...#.#...#...#....#..## +......#..##......#......#.##.#. +......##....####...###...#..... +#....#..........#.#.##.....#..# +....#.#...........#.#.#.#.#...# +....####.....##...#..##..#...#. +#....#.###..###.....#..###..... +..##.........#......#...##.#... +..#.....#.#...#.##.#...#..###.# +..#.##..##........#.......#.### +.....#..........#.....#....#... +.......##..##..###.......#####. +..###......#.#....###....##...# +#..##.....#..###...#.....##.##. +#..#..##.##.###.####.##.#...... +.#.#......#.##......#..#......# +..###.....#.#......#.#.####.... +#..............#..#.#...#.###.. +...#..#.##..........##.#...#.## +.#.#.#.........#....#.#..#..... +..#.##..#...#..#...#......#.... +.......#...#.##.#.#..#...##..#. +..........#.####...#........#.# +....#...#....##.#.........#.#.. +##.#..#.......###....#..#..#.#. +..##.....#..#.#.#.####......#.. +.#.....#..........#..#..#.#.... +......#.#.......#.#...#..#..#.. +...#...............#....#...#.. +##.......#.........#.......#... +...#.......###...#.#...#....... +#...###....#....##....#....#... +...#....##..#.#.............##. +.....#.#.#..#......#...#.#..#.. +.##....#..##..#####..##.....##. +....##.#.#..#.....#.#...#...... +...#.....##.#.#..##..#.#....... +.......#..#..#..........#...... +.......#...#..#.........#.##... +..#..#..#...##..#.#....#......# +..#....#...#.#......#........#. +.#...#..#...#.#..........#..... +#..#...####..#......##.##.#.#.. +.#...#.#...#.#.....#..##.#..... +..#.##.#......#.........##...#. +###..............#............. +...#...###....#..#............. +.##....#......#..#.....#..#..#. +.#..........#.....##...#..#.... +....##..#.#......###.##......#. +.#..##.#.##.#...##.#......###.# +#..###.#...###..#........#.#... +#..#.#.#..#...###.##.##..#..#.. +#.#..#....#.........##......#.. +....###.....###....#........... +....#..##.##....##..#.....#.... +.#.....#....####...#..##.#..### +.........##..#......#.#...##... +.##.......#.....#.###.#..#.#..# +.....#.#...###.....#......####. +##.#...#......#.#.#..#.####...# +.#.##.....#..#..#.............# +.#..###..#..#......#..##......# +.......#.#........##.....#.#... +#....#...#..###..#.#.....#.##.. +.##.....#.#....###..#.....##... +...##....#....#...#....#.#.#... +#####..#...........###....#...# +.#.......##.##.....#....#...... +.#..#.#...#..#......#...#..#.#. +....#.....##...#####..#...#...# +###.##...#.#............#....#. +.....#...#........##.........#. diff --git a/tests/aoc-2020/input/day4.txt b/tests/aoc-2020/input/day4.txt new file mode 100644 index 00000000..b17cdcd7 --- /dev/null +++ b/tests/aoc-2020/input/day4.txt @@ -0,0 +1,1023 @@ +ecl:#eef340 eyr:2023 hcl:#c0946f pid:244684338 iyr:2020 cid:57 byr:1969 hgt:152cm + +pid:303807545 cid:213 ecl:gry hcl:#fffffd +eyr:2038 byr:1951 +hgt:171cm iyr:2011 + +hcl:#c0946f byr:1933 eyr:2025 pid:517067213 hgt:173cm +ecl:hzl +iyr:2018 + +pid:5253256652 byr:2009 hgt:152cm iyr:1989 eyr:1968 hcl:64cb63 ecl:hzl + +iyr:2013 +pid:862607211 eyr:2020 +hgt:174cm +byr:1990 +ecl:blu hcl:#888785 + +ecl:grn byr:1955 +pid:608098408 eyr:2027 iyr:2020 hcl:#b6652a cid:264 +hgt:181cm + +byr:1998 ecl:hzl eyr:2021 +hcl:#866857 hgt:189cm iyr:2030 +pid:013735467 + +pid:075417314 hcl:#b6652a byr:1957 +iyr:2011 +hgt:154cm +eyr:2025 +ecl:amb + +iyr:1993 hgt:74cm eyr:1960 +byr:2029 +hcl:293244 ecl:#3cb5e5 pid:4861232363 + +hgt:153cm hcl:#6b5442 pid:065240897 byr:1932 +cid:196 ecl:blu eyr:2028 iyr:2019 + +eyr:2024 ecl:amb +hcl:#866857 byr:1922 pid:496904942 hgt:164cm iyr:2020 + +pid:847705161 byr:1951 cid:124 iyr:1991 +eyr:2028 ecl:dne +hcl:6b2d28 hgt:172cm + +byr:2007 iyr:2029 ecl:hzl eyr:2026 hgt:168in +hcl:z +pid:63151612 + +iyr:2027 hgt:172in +cid:174 byr:2014 hcl:z eyr:1921 +ecl:grt pid:#cebdc2 + +ecl:amb hcl:#d09c0f +iyr:2015 hgt:156cm eyr:2026 byr:1962 +pid:086120872 + +cid:125 +pid:837849996 +byr:1958 ecl:brn hgt:166cm hcl:#ceb3a1 eyr:2028 iyr:2012 + +ecl:gry hgt:180cm +pid:939059935 eyr:2023 byr:1977 hcl:#b6652a + +hgt:190in byr:2029 eyr:1984 +ecl:gry hcl:z pid:055092916 iyr:2010 + +hgt:63in ecl:blu byr:1940 iyr:2012 eyr:2029 hcl:#7d3b0c +pid:163033394 + +eyr:2040 pid:181cm +iyr:1928 hgt:76cm hcl:d8aafb byr:1949 cid:275 ecl:xry + +hcl:#cfa07d ecl:oth byr:1948 eyr:2021 +pid:719690182 hgt:179cm iyr:2020 + +byr:1939 cid:266 +eyr:2026 iyr:2017 hcl:#f116d2 +ecl:hzl pid:522421825 +hgt:68in + +hcl:z hgt:61in +cid:115 pid:180cm iyr:2030 byr:2014 eyr:2032 ecl:hzl + +ecl:xry +eyr:2028 pid:191cm iyr:2015 hgt:150cm byr:2029 + +eyr:2027 +hcl:#a97842 pid:997937480 hgt:61in iyr:2019 +byr:1921 +ecl:grn + +hgt:163cm +pid:912318455 iyr:2016 byr:1988 ecl:brn hcl:#a97842 cid:221 eyr:2029 + +cid:333 hcl:#c0946f +hgt:163cm iyr:2018 eyr:2027 ecl:oth + +cid:70 hcl:#c0946f +pid:961507902 byr:1949 ecl:grn iyr:2017 eyr:2029 hgt:69in + +hgt:169cm ecl:amb +iyr:2013 pid:496169901 +byr:1943 eyr:2028 hcl:#ceb3a1 +cid:249 + +ecl:blu cid:343 +iyr:1998 hgt:154in hcl:#efcc98 byr:1972 + +pid:508213120 iyr:2012 eyr:2025 hcl:z hgt:70cm byr:1976 +ecl:brn + +iyr:1924 +eyr:2005 +hcl:z +hgt:167 pid:154cm +byr:2007 + +pid:761333244 hgt:180cm iyr:2017 hcl:#18171d eyr:2021 +byr:1983 +cid:67 ecl:oth + +eyr:1993 +byr:2003 +hcl:#602927 +ecl:grt +cid:84 hgt:178 +pid:1847086637 iyr:2026 + +hcl:#866857 hgt:162cm pid:483774485 iyr:2010 +byr:1946 eyr:2028 ecl:gry + +pid:726639691 eyr:2028 +hgt:171cm hcl:#ff65a6 +iyr:2011 byr:1989 + +hcl:z iyr:2026 ecl:xry +eyr:2037 byr:2005 pid:#f09a0f +hgt:68 cid:156 + +hgt:71in ecl:blu eyr:2026 hcl:#18171d +byr:1981 iyr:2017 +pid:698636544 + +eyr:2021 +byr:1957 ecl:brn pid:365378126 cid:93 iyr:2019 hcl:#18171d hgt:179cm + +byr:1996 iyr:2014 hgt:64cm +eyr:2034 +hcl:z + +pid:629486472 cid:140 +hgt:192cm eyr:2020 hcl:#b6652a iyr:1988 byr:2021 ecl:brn + +byr:1955 iyr:2015 eyr:2030 +ecl:gry hcl:z pid:6550198754 +hgt:158cm cid:305 + +ecl:gry hcl:#a97842 +hgt:176cm eyr:2022 pid:810146585 iyr:2020 + +byr:2027 hcl:#cfa07d +iyr:2011 ecl:#f07598 +cid:293 +hgt:150cm pid:#fa948d eyr:2029 + +eyr:2028 iyr:2013 hgt:69in ecl:gry pid:317170371 +cid:147 hcl:#bfe1f1 + +byr:1976 +pid:059341891 hgt:174cm +ecl:oth +eyr:2029 iyr:2017 hcl:#733820 + +iyr:2018 hcl:#ceb3a1 hgt:188cm cid:308 +pid:792826885 byr:1948 ecl:blu eyr:2028 + +iyr:2017 cid:94 hcl:#95c7dc +pid:231757803 eyr:2022 +byr:1992 hgt:153cm ecl:amb + +eyr:2027 +iyr:2011 hgt:186cm +ecl:brn pid:996347346 hcl:#866857 +byr:1960 + +eyr:2025 byr:2001 +ecl:blu pid:755715478 iyr:2019 hgt:61in + +ecl:gry +eyr:2038 +hgt:81 hcl:z iyr:2028 +cid:214 byr:1965 + +pid:412744447 byr:1979 hcl:#cfa07d ecl:blu +eyr:2029 cid:157 +hgt:180in iyr:1948 + +hgt:170cm +pid:623557081 byr:1924 eyr:2024 hcl:98d623 iyr:2012 ecl:amb + +cid:311 ecl:grn +iyr:2011 byr:1982 +eyr:2002 hcl:#ef318a +pid:0548169957 +hgt:87 + +eyr:2030 hcl:#733820 iyr:2016 pid:558470391 +byr:1936 ecl:oth hgt:185cm + +iyr:2019 +ecl:amb byr:1949 +pid:376468392 +hgt:178cm + +pid:019195245 +ecl:grn hgt:171cm +byr:1978 iyr:2011 eyr:2022 hcl:#733820 +cid:134 + +hcl:#623a2f hgt:192cm eyr:2026 byr:1977 +ecl:grn cid:308 + +ecl:hzl pid:715816358 hgt:69in iyr:2014 hcl:#623a2f +byr:1996 +eyr:2027 + +iyr:1947 +ecl:#39a697 +hgt:183cm byr:2029 +eyr:2022 pid:7951883913 +hcl:z + +ecl:gry byr:1950 +hcl:#18171d hgt:168cm iyr:2020 pid:677187333 eyr:2027 + +byr:1969 ecl:blu hcl:#18171d iyr:2011 +hgt:162cm +pid:701349891 + +cid:269 byr:1966 +iyr:2011 +pid:905940527 eyr:2023 hgt:190cm +ecl:brn hcl:#ceb3a1 + +eyr:2027 pid:454627395 ecl:brn +hcl:#ceb3a1 cid:302 hgt:184cm +byr:1959 +iyr:2015 + +iyr:2011 +eyr:2028 +hgt:166cm +hcl:#733820 byr:1938 ecl:blu pid:857984986 + +hcl:#c0946f ecl:brn pid:226877822 +hgt:182cm byr:1998 +cid:160 + +hgt:186in pid:26499164 byr:2017 +hcl:z +iyr:1998 eyr:2026 +cid:331 ecl:#236556 + +pid:328866543 +hgt:165cm eyr:2039 iyr:1987 ecl:amb byr:2018 hcl:z + +iyr:2016 eyr:2036 hcl:#888785 byr:1976 pid:160402352 hgt:76cm ecl:blu + +ecl:blu +hcl:#fffffd eyr:2025 hgt:66in pid:979788527 +byr:1957 iyr:2013 + +ecl:grn pid:279357265 iyr:2019 eyr:2021 byr:1953 +hgt:177cm hcl:#c0946f + +ecl:oth hcl:z eyr:2025 byr:1949 hgt:189cm iyr:2020 pid:901383503 + +byr:2019 hcl:#733820 +pid:31022828 eyr:1929 +hgt:75cm iyr:2012 ecl:grn + +pid:080462937 +ecl:blu hcl:#866857 +cid:102 +iyr:2013 eyr:2025 byr:1975 hgt:64in + +iyr:2016 +eyr:2028 +cid:125 +byr:1979 hcl:#866857 +ecl:brn hgt:173cm pid:814947616 + +hcl:z byr:2020 pid:#c3b54b hgt:174in eyr:2038 +iyr:2016 +ecl:gmt + +cid:132 +iyr:1958 +pid:61543452 hcl:z +ecl:zzz eyr:2039 byr:2006 + +cid:55 eyr:2022 byr:1954 iyr:2015 +hgt:188cm hcl:#a97842 pid:49143631 ecl:amb + +hgt:152cm +byr:1982 +iyr:2013 ecl:blu +hcl:#341e13 +eyr:2026 pid:440841976 + +iyr:2019 ecl:blu pid:553456616 hcl:#733820 hgt:160cm byr:1932 eyr:2030 + +byr:1980 hgt:169cm hcl:#7d3b0c cid:312 iyr:2010 +eyr:2026 pid:028550304 ecl:grn + +ecl:amb eyr:2021 iyr:2014 hgt:71in pid:986053283 byr:1981 + +ecl:oth +eyr:2023 hcl:#888785 +byr:1949 +iyr:2016 pid:699325656 + +hgt:63cm cid:297 eyr:2020 pid:990390922 +hcl:#602927 ecl:lzr +iyr:2012 byr:2016 + +hcl:9ea2fa eyr:2023 pid:088680493 +byr:1998 iyr:2017 ecl:utc hgt:170cm cid:175 + +cid:316 iyr:2016 eyr:2026 hcl:#79ff1d hgt:65in +byr:1997 pid:215466710 ecl:oth + +cid:213 byr:1983 hcl:#888785 iyr:2016 pid:767747981 eyr:2025 +ecl:hzl hgt:168cm + +eyr:2030 byr:1972 +cid:282 +ecl:gry hgt:178cm +hcl:#a97842 +iyr:2018 + +hcl:#6b5442 ecl:amb +eyr:2028 cid:104 hgt:159cm pid:446429120 iyr:2012 +byr:1938 + +byr:1940 hgt:178cm ecl:oth +hcl:#ceb3a1 +pid:845683663 iyr:2015 eyr:2024 + +byr:1940 pid:496262233 +hgt:184cm hcl:#b6652a +ecl:grn cid:152 iyr:2012 eyr:2029 + +hgt:185cm pid:455744229 byr:1954 eyr:2022 ecl:gry hcl:#6b5442 iyr:2012 + +hgt:182cm byr:1966 eyr:2028 ecl:#a5b7fc +iyr:2029 + +pid:343591896 +cid:58 +ecl:hzl +eyr:2022 hgt:180in byr:2021 +hcl:#6b5442 + +ecl:utc hcl:#b6652a +pid:635147657 byr:2020 +eyr:2022 hgt:157cm iyr:2018 + +ecl:grt cid:312 iyr:1959 pid:154262836 +hgt:171cm +hcl:#fffffd +eyr:2024 +byr:1982 + +hcl:#7a12b4 pid:223424149 ecl:hzl hgt:175cm +byr:1930 iyr:2010 eyr:2028 + +hcl:#c0946f pid:633476454 eyr:2026 iyr:2011 +byr:1934 +hgt:186cm +cid:289 ecl:gry + +hcl:#fffffd pid:376300524 hgt:155cm byr:1964 iyr:2017 eyr:2021 ecl:grn + +hcl:a5d4dc byr:2006 cid:165 ecl:#db800f iyr:2029 pid:0199789970 eyr:1961 hgt:61cm + +eyr:2027 hgt:170cm iyr:2010 +hcl:#c0946f +ecl:grn pid:415726530 +byr:1985 + +cid:197 byr:1957 hgt:192in hcl:#a97842 ecl:hzl eyr:2029 pid:958973455 iyr:2011 + +iyr:2015 pid:933689314 hgt:162cm ecl:amb +cid:122 eyr:2021 +hcl:#6b5442 byr:1973 + +eyr:2026 hgt:172cm +iyr:2012 +ecl:brn hcl:#733820 pid:004474632 +byr:2000 + +hgt:191cm eyr:2030 byr:1999 pid:9155071477 iyr:2026 hcl:#602927 cid:315 +ecl:grn + +iyr:2010 pid:182884251 hcl:#18171d hgt:154cm +eyr:2020 +byr:1926 ecl:oth + +iyr:2019 eyr:1920 pid:132839546 +cid:283 hgt:188in hcl:#efcc98 byr:2027 + +iyr:2011 hgt:177cm +cid:117 byr:1976 +ecl:gry +hcl:#623a2f eyr:2030 pid:134592046 + +byr:1968 hgt:146 +iyr:2013 hcl:eefdc4 eyr:2028 +ecl:xry pid:722120008 + +iyr:2016 byr:1941 hgt:67cm cid:51 hcl:#b6652a ecl:hzl eyr:2034 pid:994005715 + +hcl:#cfa07d ecl:oth +hgt:182cm eyr:2021 pid:612583941 +byr:1983 +iyr:2019 + +byr:1922 +hcl:#602927 hgt:161cm ecl:gry eyr:2020 pid:190170808 iyr:2013 + +hgt:63cm cid:136 +iyr:1999 +pid:8235748647 hcl:z +byr:2022 eyr:1933 +ecl:#304383 + +cid:273 ecl:blu hcl:z +iyr:2011 byr:2007 +eyr:2020 +pid:942473857 hgt:178in + +ecl:grt byr:2029 hgt:187in eyr:2030 cid:160 +hcl:#efcc98 pid:#39f22b +iyr:1966 + +byr:1978 ecl:oth iyr:2011 hgt:164cm eyr:2027 hcl:#cfa07d + +hgt:75cm hcl:#1e8137 byr:1986 ecl:blu eyr:2022 pid:796688423 +iyr:2012 + +eyr:2026 +ecl:#3013af hcl:z pid:#e8597f hgt:123 iyr:2025 byr:1942 + +hcl:z hgt:177in +iyr:1993 pid:#4c9348 byr:2008 eyr:1989 + +pid:123524366 byr:1935 +hgt:156cm hcl:#7d3b0c +iyr:2020 ecl:brn eyr:2020 + +hcl:z eyr:2038 pid:7663741757 ecl:gmt hgt:174 +byr:2008 iyr:1939 +cid:225 + +hcl:#888785 hgt:172cm +ecl:oth pid:500711541 eyr:2027 +byr:1931 iyr:2012 + +pid:575447108 ecl:amb byr:1943 +hcl:#888785 hgt:173cm eyr:2024 + +eyr:2021 iyr:2010 pid:178773264 hgt:157cm byr:1965 hcl:#bb7bcf ecl:amb + +iyr:2023 ecl:#35bd84 byr:2020 +hgt:72in +eyr:2037 +hcl:#6b5442 +pid:421311669 + +byr:1921 iyr:2011 +pid:146088688 +eyr:2023 hcl:#15ed24 hgt:183cm +ecl:brn + +hcl:#b6652a cid:243 +byr:1993 eyr:2024 +iyr:2014 hgt:172cm +pid:771275594 + +eyr:2024 +hcl:#cfa07d pid:858807920 cid:293 hgt:157cm ecl:hzl iyr:2013 byr:1984 + +ecl:blu hgt:193cm cid:73 hcl:#18171d eyr:2026 +iyr:2016 pid:124151812 byr:1945 + +ecl:amb iyr:2018 +pid:214555737 hgt:157cm +eyr:2028 +byr:1925 hcl:#866857 + +pid:5633250409 +hcl:4ef7d8 +byr:2004 iyr:1958 +hgt:96 +eyr:2038 ecl:xry cid:274 + +byr:1972 pid:401239851 hgt:184in hcl:z iyr:2017 +eyr:2030 ecl:#cb289a cid:140 + +hgt:175cm +byr:1926 hcl:#cfa07d eyr:2029 ecl:gry pid:325039730 iyr:2017 + +cid:101 hgt:166cm byr:1986 ecl:amb +hcl:#7d3b0c iyr:2013 +pid:413769688 eyr:2024 + +hgt:159cm cid:311 +byr:1993 eyr:2028 pid:188cm ecl:oth hcl:#602927 iyr:2013 + +pid:565831038 +ecl:amb +hgt:155cm hcl:#fffffd cid:335 iyr:2016 +eyr:2029 byr:1997 + +hgt:122 +byr:2022 +eyr:2028 ecl:blu iyr:2017 pid:269710626 hcl:#b6652a + +cid:196 +byr:1953 hcl:#6b5442 iyr:2010 +pid:216121215 hgt:188cm ecl:blu + +iyr:2011 hcl:98166c hgt:62cm +byr:2028 +eyr:2024 +pid:792478385 ecl:grn + +hcl:#efcc98 iyr:2012 pid:020039675 eyr:2021 byr:1974 hgt:156cm +ecl:hzl + +cid:123 hcl:#7d3b0c +byr:2026 eyr:2004 iyr:2012 ecl:oth pid:349203133 hgt:160cm + +pid:085461475 +byr:1962 iyr:2020 hcl:#623a2f +eyr:2024 +cid:80 ecl:brn +hgt:154cm + +ecl:oth hgt:156cm iyr:2016 +hcl:#6b5442 +byr:1973 +eyr:2021 pid:539898580 + +iyr:2026 hgt:191cm +hcl:z +byr:1930 pid:#abc2f0 ecl:blu cid:242 eyr:2024 + +cid:167 +hgt:179cm +iyr:2017 eyr:2021 pid:756797571 byr:1949 ecl:brn hcl:#a97842 + +byr:1975 eyr:2030 +ecl:oth hgt:169in pid:4031206183 hcl:#733820 iyr:2017 cid:244 + +ecl:#54cfeb hgt:152cm +iyr:2026 hcl:36b4b9 +byr:2030 +pid:#fa1cb9 eyr:1964 + +byr:1974 cid:99 hcl:9e3296 +eyr:2032 +pid:686747414 +iyr:1995 +ecl:amb + +iyr:2030 ecl:oth hcl:z byr:1979 +pid:114661006 hgt:191cm eyr:1941 + +hcl:#341e13 iyr:2014 byr:1953 +pid:188326193 ecl:gry hgt:189cm cid:283 +eyr:2030 + +byr:1975 +pid:092061576 hgt:73in eyr:2023 +ecl:brn cid:227 hcl:#5e9d91 +iyr:2011 + +hcl:#7d3b0c hgt:167cm cid:141 +eyr:1957 byr:2012 ecl:gmt iyr:2019 pid:#1b7c8a + +hgt:168cm hcl:#c0946f pid:599500784 byr:1930 eyr:2023 ecl:hzl cid:113 +iyr:2013 + +eyr:2030 hcl:#b4cb4f +hgt:68in +ecl:brn byr:1923 pid:699162086 + +iyr:2013 +ecl:dne hcl:z eyr:1971 +pid:#580add byr:2020 +hgt:190cm + +hcl:#ceb3a1 +byr:1976 eyr:2020 +cid:162 iyr:2016 +hgt:168cm +ecl:hzl + +pid:050478613 hgt:59cm +iyr:2017 +ecl:grn byr:2030 hcl:#cfa07d eyr:2025 + +pid:352943968 eyr:2025 byr:1980 iyr:2014 ecl:gry hcl:#c0946f +hgt:193cm + +pid:328621931 cid:310 hgt:170cm +hcl:#733820 byr:1955 +iyr:2016 +eyr:2028 ecl:hzl + +hcl:#866857 +pid:095858739 byr:1956 +iyr:2018 hgt:193cm +ecl:hzl +eyr:2029 + +pid:70973661 eyr:2039 ecl:gry +iyr:2016 +cid:291 +hcl:#623a2f hgt:97 + +hcl:4d51a8 +eyr:1978 +ecl:gmt +byr:2029 iyr:2022 +pid:34507041 hgt:61cm + +byr:1989 ecl:brn pid:769582914 +eyr:2026 cid:218 +iyr:2020 hcl:#866857 hgt:184cm + +ecl:brn +iyr:1998 cid:227 +hgt:162in +byr:2026 +hcl:#602927 eyr:2027 pid:236998728 + +ecl:gry byr:1984 hgt:157 cid:295 +eyr:2020 +iyr:2018 hcl:#733820 +pid:037871534 + +hgt:166cm hcl:#c0946f pid:412146401 +iyr:2011 +eyr:2022 +byr:1938 +ecl:brn + +ecl:brn cid:95 byr:1981 eyr:2030 hcl:#efcc98 pid:777041035 hgt:152cm iyr:2011 + +eyr:2024 hgt:89 pid:3761913749 iyr:1939 byr:1967 hcl:a222f6 cid:165 ecl:#7fe574 + +cid:339 hgt:156cm +ecl:brn iyr:2013 byr:1951 hcl:#efcc98 eyr:2026 +pid:863566946 + +ecl:brn hcl:#6b5442 eyr:2023 +pid:787129723 byr:1949 iyr:2015 + +pid:#7f615a +cid:202 hcl:#6b5442 eyr:2028 +ecl:#a5419c +hgt:75cm +iyr:2011 +byr:2001 + +pid:864001133 +cid:236 +byr:1943 hcl:#733820 ecl:dne eyr:2025 hgt:171cm iyr:1989 + +pid:193073684 ecl:grn byr:1962 iyr:2014 +hcl:#cfa07d hgt:189cm +cid:321 eyr:2029 + +byr:1959 +hcl:#b6652a +eyr:2026 +hgt:159cm pid:815014918 iyr:2011 ecl:amb + +iyr:2017 hgt:182cm +hcl:#a97842 eyr:2023 ecl:grn pid:656177536 +byr:1973 + +eyr:1923 ecl:grn +cid:138 iyr:2020 +hgt:164cm byr:1958 hcl:#c0946f pid:783366277 + +iyr:1932 hgt:172 ecl:blu +hcl:#733820 byr:1962 pid:554221464 + +cid:169 pid:922622614 +byr:1942 hcl:#ceb3a1 hgt:169cm eyr:2024 +ecl:gry iyr:2017 + +cid:219 ecl:grn +hgt:156cm byr:1998 eyr:2021 +iyr:2017 hcl:#ceb3a1 pid:450186263 + +ecl:amb hgt:179cm pid:768428582 iyr:2010 eyr:2023 byr:1952 hcl:#fffffd + +eyr:2024 +hgt:193cm +iyr:2017 pid:469033795 byr:1979 hcl:#18171d cid:67 ecl:amb + +iyr:2016 byr:1937 pid:798267514 hgt:155cm hcl:#866857 eyr:2026 +ecl:oth + +hgt:172cm hcl:#866857 iyr:2018 pid:662186551 +byr:1996 +eyr:2025 ecl:amb + +pid:2854521962 +iyr:2021 +ecl:zzz +hcl:12f1ba eyr:2037 hgt:159cm +byr:1937 + +ecl:oth pid:488050418 byr:1927 hcl:#a97842 hgt:153cm iyr:2013 eyr:2024 + +pid:119536312 ecl:#2036ad +hcl:543178 iyr:2020 +byr:2013 +hgt:177cm +eyr:2022 + +pid:788908662 hcl:#602927 eyr:2029 +ecl:oth byr:1930 +iyr:2020 +hgt:179cm + +byr:1972 +pid:053386972 iyr:2014 ecl:grn hgt:65in hcl:#cfa07d + +pid:9828921035 ecl:blu +hcl:z hgt:152in +eyr:1949 byr:2010 + +cid:157 pid:097910554 byr:1999 +hgt:159cm hcl:#6b5442 ecl:blu eyr:2024 +iyr:2010 + +hcl:#a97842 +eyr:2040 ecl:#f8ad77 +hgt:173cm +byr:2019 iyr:2010 +pid:#d16a6e + +ecl:dne hgt:191cm iyr:2020 hcl:#b6652a +eyr:2021 pid:571971509 byr:1983 + +hcl:#18171d iyr:2016 pid:159074622 +eyr:2027 hgt:163cm byr:1954 +cid:257 + +pid:243560302 cid:58 +hcl:53a4cf byr:2012 +ecl:#fdbfb8 eyr:1920 hgt:179 iyr:2026 + +pid:040606106 eyr:2030 hgt:188cm +byr:1969 +iyr:2012 hcl:#ceb3a1 ecl:amb + +eyr:2022 +hgt:175cm hcl:#b6652a byr:1967 pid:269969031 +iyr:2018 + +hcl:#18171d cid:278 byr:1931 +pid:134809791 +eyr:2035 ecl:#44e6cd iyr:1993 + +hgt:177in +ecl:utc cid:289 +iyr:1923 +hcl:13a67a pid:3045345984 byr:2030 eyr:1944 + +pid:839901650 eyr:2030 +ecl:grn +byr:2015 iyr:2017 hgt:168 hcl:131f4e + +iyr:2015 pid:529736732 ecl:brn hgt:176cm +eyr:2026 byr:1952 hcl:#6b5442 + +hcl:#c0946f +cid:323 pid:303966428 iyr:2019 +eyr:2027 hgt:170cm +byr:2001 +ecl:brn + +pid:193678728 hgt:72in eyr:2027 iyr:2015 byr:1951 ecl:gry hcl:#18171d + +eyr:2026 cid:283 +iyr:1938 pid:687430885 +hgt:186cm +byr:1949 ecl:#521638 hcl:d13b2f + +eyr:2024 hcl:#ceb3a1 iyr:2013 ecl:brn +hgt:168cm pid:792088241 + +hcl:#888785 ecl:amb +byr:2009 iyr:2015 +hgt:151cm +eyr:2020 pid:223927808 + +byr:1926 +pid:717704850 +hcl:#623a2f eyr:2022 hgt:64in iyr:2018 ecl:gry + +eyr:2023 byr:1954 +hgt:169cm +ecl:hzl +iyr:2010 pid:116868997 hcl:#18171d + +ecl:hzl byr:1965 hcl:#a97842 iyr:2011 pid:506354451 hgt:172cm eyr:2029 + +eyr:2022 pid:994565705 +iyr:2013 ecl:brn hcl:#623a2f +byr:1979 + +iyr:2011 +byr:1931 hgt:183cm hcl:#284f26 cid:306 +ecl:amb eyr:2021 +pid:977533079 + +eyr:2027 +iyr:2011 ecl:gry +byr:1993 +pid:272334781 hgt:161cm hcl:#9a35b6 + +eyr:2026 +hcl:#602927 ecl:blu +pid:212300161 byr:1946 +cid:193 iyr:2020 hgt:157cm + +pid:538594567 byr:1976 eyr:2027 hcl:#efcc98 iyr:2011 hgt:154cm ecl:oth + +byr:1949 +hcl:z ecl:#ce67aa +eyr:1942 pid:7978941589 iyr:2025 hgt:161in + +hcl:#c0946f +cid:55 +byr:1963 ecl:blu hgt:161cm +pid:547120453 iyr:2015 eyr:2021 + +hgt:173cm eyr:2022 +iyr:2016 byr:2001 +ecl:hzl pid:239803460 + +hcl:#b6652a ecl:oth eyr:2021 hgt:167cm pid:401266644 iyr:1969 byr:1974 + +eyr:2030 pid:581963885 +hcl:#64cb23 +ecl:blu +byr:1928 hgt:181cm iyr:2018 + +pid:186338247 +ecl:hzl hgt:193cm hcl:#ceb3a1 +eyr:2022 iyr:2010 + +iyr:2015 ecl:gry hgt:159cm eyr:2027 hcl:#ceb3a1 +byr:1925 pid:715902111 cid:149 + +iyr:2018 hcl:#623a2f eyr:2020 hgt:162cm ecl:grn cid:135 +byr:1922 +pid:373216777 + +eyr:2020 pid:749899012 hcl:#888785 ecl:brn +iyr:2010 cid:225 hgt:172cm +byr:1972 + +iyr:2020 hgt:178cm ecl:grn hcl:#18171d pid:613792489 cid:240 +eyr:2028 +byr:1972 + +iyr:2015 byr:1938 eyr:2026 +cid:113 ecl:grn +pid:846231640 hgt:161cm +hcl:#b6652a + +ecl:gry +hcl:#ceb3a1 +byr:1956 cid:338 pid:936012518 +hgt:62in +eyr:2029 iyr:2016 + +pid:730866353 ecl:brn byr:1986 +iyr:2014 +hgt:190cm +eyr:2021 hcl:#a97842 cid:126 + +eyr:2021 +cid:180 pid:958310635 ecl:brn iyr:2015 hgt:189cm hcl:#efcc98 + +hgt:188cm ecl:hzl pid:179001863 iyr:2016 eyr:2029 hcl:#341e13 byr:1932 + +cid:77 eyr:2027 hcl:#623a2f iyr:2016 ecl:brn hgt:170cm +byr:1947 + +hgt:66in pid:617518313 iyr:2013 byr:1977 hcl:#b6652a ecl:brn eyr:2025 + +pid:787861420 +iyr:2014 hcl:#623a2f hgt:61in +ecl:oth cid:78 +eyr:2022 byr:1975 + +ecl:hzl +iyr:2017 eyr:2028 hcl:#602927 +byr:1958 pid:985208714 +hgt:160cm + +byr:2002 +iyr:2013 +hcl:#341e13 pid:188110633 ecl:gry hgt:169cm +eyr:2025 + +byr:1981 +eyr:2028 +hcl:#341e13 ecl:amb hgt:160cm cid:121 +iyr:2015 pid:963848397 + +iyr:2013 hcl:#866857 pid:#db8648 eyr:2021 ecl:gry +byr:1975 +hgt:153cm cid:114 + +hgt:109 +cid:287 hcl:#6b5442 +iyr:2028 byr:1926 eyr:2036 pid:2378208387 +ecl:#245a62 + +pid:857722366 +byr:1975 eyr:2027 +ecl:grn iyr:2019 hcl:#0afad1 +hgt:66in + +byr:1935 hcl:#cfa07d hgt:173cm ecl:brn eyr:2021 iyr:2019 + +cid:66 eyr:2024 hcl:#efcc98 byr:2002 iyr:2010 +hgt:176cm pid:697153153 ecl:amb + +iyr:2019 +hcl:#cfa07d ecl:blu +pid:695914972 +eyr:2024 +hgt:158cm +byr:1943 + +ecl:xry hgt:62in +pid:14733148 cid:148 +iyr:2016 byr:1925 hcl:#6b5442 +eyr:2028 + +iyr:2025 +cid:53 hgt:132 ecl:gmt hcl:159b19 +pid:156cm +byr:2025 eyr:2001 + +hcl:#623a2f ecl:oth byr:1974 iyr:2018 hgt:161cm eyr:2029 pid:6826285172 + +ecl:gry +byr:1956 hcl:#7d3b0c hgt:170cm iyr:2020 + +eyr:2020 +pid:#946a88 hgt:186cm hcl:#733820 byr:1946 ecl:#016645 iyr:2015 + +hgt:181cm hcl:#888785 iyr:2013 pid:634152817 +byr:1982 cid:245 ecl:grn eyr:2021 + +ecl:brn +pid:737531770 iyr:2010 +eyr:2020 +byr:1929 hgt:189cm hcl:#c0946f + +cid:158 iyr:2019 hcl:#341e13 eyr:2027 ecl:amb +byr:1986 pid:834976623 + +pid:976934668 cid:61 eyr:2020 iyr:2020 +hgt:76in byr:1927 ecl:amb +hcl:#e05ee3 + +pid:526042518 iyr:2019 eyr:2027 hcl:#623a2f byr:1976 ecl:amb + +pid:279367290 hcl:#a97842 hgt:158cm +eyr:2027 +byr:1959 +iyr:2020 + +ecl:xry byr:2028 +pid:357216861 hcl:#a97842 eyr:2024 hgt:66cm +iyr:2012 + +hgt:188in +ecl:lzr cid:64 eyr:1958 byr:2014 hcl:z pid:285207570 iyr:2026 + +eyr:1973 iyr:2017 ecl:oth cid:282 pid:695814158 +hcl:z + +iyr:2010 pid:661168409 +hcl:#53c696 +hgt:186cm ecl:amb +byr:1960 +eyr:2029 + +eyr:1982 hgt:169cm +iyr:2002 byr:2025 hcl:327f93 pid:831648100 + +byr:1967 ecl:oth +eyr:2021 +hcl:#602927 iyr:2014 +pid:274974402 hgt:183cm diff --git a/tests/aoc-2020/input/day5.txt b/tests/aoc-2020/input/day5.txt new file mode 100644 index 00000000..05530c3f --- /dev/null +++ b/tests/aoc-2020/input/day5.txt @@ -0,0 +1,846 @@ +FFBBBBBLLR +BFBFBBBRLL +FBFFFFBLRL +BFFBFBBRLR +FFBBFFFRRL +FBFBFFBLLR +BFFBFBFLLR +BFFBBBBRRL +FBBBFBFLRL +BFFBFBBRLL +FFBBFBBRRR +BBFBBBBLRL +FFBFBBFLRL +BBFFFBBLLR +FFBBBFFRLL +FBFBFFBLRL +BFFFBFBLRL +FFBFBFFRRL +BBBFFFBRRR +BBFFBBFLLL +BFBBBFBLRR +FBFBFFBRRL +FFFBBFBLLR +FBBFBFFRLR +FBFFFFBRRL +BBFFFFFLLR +BFBFFBBLLR +FFBFBBBRRR +FFBBBBBRLR +BBFFBFFRLR +BBFBBBBRRL +FFBFFFFLLL +BBBFFBFRRL +FFBFFFFLRR +FBBBBBFLLR +BFBFBBBLRL +BFBBBFFRRL +FBFFBBFRRR +BBFFFFBRLR +FFBFBBFRLL +FFBFBFBLLL +FBBBFBFRRR +FFFBBBFRLL +BFFFBBBLLR +FBFFBFBRLR +FFBFBBBLLL +BFBBBFFLLL +BFFBFBFLRR +BFFBFBBRRR +BFBBBFBLLL +FBFFBFFLRL +BBFFFBBRRL +FFFBFBBRLR +BBFBBBFLLR +FFBBBBBLRR +BFFFFBFRRL +BFFFBBBRLR +BFBBBBBLLR +FBFBBFFRRL +BFFBFFBLLR +FFBBFFFRLR +FBBFFFBLLL +FFFBBFFLRR +BBFFFFBRLL +BFFFFFFRLR +BFFBBBFLLR +BFBBBFBRRL +FBFBBFFRRR +BFBFBFFLRR +BBFBFFFLLL +BBBFFBFLLL +FFBBFBFRRL +FBBFFFBLRL +BFBBBBFLLR +BFBFBBBLRR +BFBBBBBRLR +BFFFBFFRRL +BFFFBFFLLL +BFBBBBBRLL +BBFFBFBRLL +FBBBBBFRLR +BBFFBFFLLR +FBBFFFFRLR +FBFFFBFLRL +BBFBFBBRLR +BFFBBFBRRL +FBFFFFFRRR +BFBFBBFLLL +FBBFBBFRLR +BFBBFBBRRR +FFFBBBFLRL +BFFBFFBRRL +FBFBFBBLLR +BBFBFFFLRL +FFFBFBBRRR +BBFFBBFRRL +BFBFBFBLRR +BFFBBBBRLR +FBBFFFFLLR +FBBBFFBLLR +FBBBBFFLRL +FBBBBFFLLL +BBFFBBFRLR +FFBBFBFLRL +BFBFFBBRLL +FBFBBFFLRR +BFFFFFBRLL +BBFBFBBRRL +FBBBBBBLLR +BBFBFBFLLL +BFFFFBBRLL +BFBFFBFRRL +FFBFFBFLLL +BFFFBFBLLR +FBBFBFFRRR +FBBFFBFRLR +FBBFBFBRRR +FBFBBFBRLR +FFFBBFBRRL +FBBBBFBLRR +FBBFBBFLRR +BBBFFBFRRR +BFFBBBBLLL +FBFBFBFLRL +FFBFFBFLRL +FFFBBFBLLL +FBBFFBFLLR +FBBBFBBRRR +FBBBBFBRLR +FBBFFFFRRR +FFFBFBFLLR +FFBFFFFRRR +BFBBBBFRLR +BFFBFBFRRR +BBFBBFFRLL +BFFBFFFLLR +FBBBFBBRLL +BBFBFFFRRR +FFBFBBBRRL +FBBBFBFLLL +FBBBFBBLRR +BFBFBBFRLL +BFBFBFBRLL +FBFFBBBLRL +FBBBBFFRRL +BBFFBFBRLR +BBFFBFFRRR +FFFBFBFLRR +FFFBFBBLLR +FBBBFFFRLL +FBFBBBFLLL +FBFBBFFRLL +BFBBFFBLLR +FFBFFFFRLR +BFFFBBFRRL +BFBBFBFLLL +FBFFFBFLLR +BBBFFBFRLR +BFFBBFFLLL +FFBBBBBRRL +BBFFBFBLLL +BFFFBFFLLR +BBBFFBFLRL +BFBFFBFLLL +FBFFBFFRLR +FFBFBBBLRL +FBBFBFBLLR +FBBFBBFLRL +FFBBFFBLRL +FFBBBBFRLR +FFBFFFFRLL +FFBBBFBRLL +BFFFBBFLRL +FFFBBBFRRL +BFBFBFFLLR +FFFBFBFRLR +BBFBFBFRLR +FBBBFFBRRL +FFBBBBFLLL +FFBBFFBRLL +FBBFFFBRRR +FFFBBBBRLL +FBFFFBFRRR +BFBBBFFLLR +BBFBBFBLRR +FFBFBBBLLR +BFBFBBBRRR +BBFFFBBLRR +FBFBFFBLRR +FFFBFBBLLL +FFBFFBFRRL +FFFBFBBRRL +BFBBBFBRLL +BFBFFFFLLL +BFBFBBBRRL +FFFBBFBRLR +BBFBBBBRLL +FBFBBBFLRL +FFBFFBFRLR +BFBBBBFLLL +FFBBBBFLRL +BFFBFBFRRL +BFFFBBFLLR +BFFFBBFRRR +BFBFBFBLLL +BFFFFFBLLR +BFFFBBFLLL +BFBBBBFRRL +BBFFBBFLRR +BBBFFFFLRR +FFBFBFFLLR +FBFFBFFLLR +BFBFFFFRLR +FFBFFBFRLL +FFBFBFBLRL +BFFBBFFRRR +BFFFBBFLRR +FBFBFBBLRL +BFFBFFFLRL +FBFFBBBLRR +FBBFFFFLRL +BBBFFFBLRR +FBFFFBBRLL +BFBBFFFRLL +FFFBBBBLRR +BFBBBBBRRR +FBBBBBFRLL +BFBFFBBRLR +BFFFBFFLRL +FBFBFBFRRL +FBFFBFFRRR +FFBBFFBLRR +FFBFFBBRLR +FBBBFFFRLR +BFFBBBBLRR +FBFFFFBLRR +BFBBFFFLLR +FBFFBBBLLR +FBFFFBBRRR +BFFBFBBLLL +FFBBBBBRRR +BFBBFFBRRR +FBBBBBBRRL +BFBBFBFLRR +BBFBFFBRLL +FBFFFFBRLL +BFBFBBFLRL +BFBFFFFLLR +BFFFBBBLRL +BBFFFFFRLL +BBBFFBBRLR +BBFBBFBLRL +BBFBFFBLLR +BBFBFBFLRR +FFBBFFBRRL +FFBFBBBRLR +BBFFFFBRRR +BFBFFFBRLR +BBFFFFBLLR +BBFFBFFLRR +FBBFBFBRLR +FFBBBFFLRR +BFBBFFBRLL +FBFBBBBLLR +FBBFFFBRLL +FBBFFFBLRR +FBFFFBBLLR +BBFFFBBRLL +BBFBBBFRRR +FFBBFFFLLL +BFBBBFFRLR +BFBBFBBRLL +BFFFFFBLRR +BFBFBFBRLR +BFBFFBFLRL +FFBFBFBRLL +BBFFFBFLLR +FFBFBFBRLR +FFFBBBBLLR +FBFBBBBRRR +BBFBBBFLRL +BBFBBBFRRL +FBFFBBFLLR +FBFFBFBLRL +BBFBBFBRLR +BFFFFBBRLR +BBFFFBFRLL +BFBFFBBLRL +FFFBFBBLRL +FFBBBBFLLR +BBFBBFBRRL +BFBBFBFLRL +BBFFBBFLRL +BFBFFBFRLL +BFFFFBBRRR +BFFFFBFRLL +FFBBFFBLLL +BFBBBBBLRL +FBBBFFBRLL +FBBFFFFRLL +BFFBFFFRLR +BFBBFBBLRR +BBFBFFBLRR +FBBBBBBLRL +BBBFFFFLRL +FFBBFBBRLR +FFFBBBFRRR +FBFFFFBRLR +BBFFFFBLLL +BFBBBFBRRR +FFFBBBBLRL +FFBFBFFLRR +BBFBFBFLRL +BFBBBBBLRR +BBFFBFBRRL +FBBFBBFRRL +BFFFFFBLRL +FFBFBBFLLL +BFFBBFFLRL +BBBFFFFLLR +BFBFFBBRRL +FBBBBFBLLL +BBFFBBBLRL +FBFBFFFRLR +FFBBFFFLRL +BFFBBFBRLL +FBBFBBFRRR +FBFBBBFRRR +BFBFBBFRRL +FBBBFBFRRL +FBBBBBBRLL +FBFFFFBLLR +FBFBFBBRRR +BFBBBBFRRR +BBFFFFBLRL +BFBBFBBLRL +BFFBBFBRLR +BFFBFBBLLR +BFFFBBBRLL +FBBFFBFRRR +BFFBFBBLRR +FFBFFFFLRL +BFBBFBBRRL +FBBBFFFLRL +FFBFBFBLRR +FBFFFBBLLL +FBBFFBBLLL +BFBBBBBLLL +FFBBBFBRRR +FBBBBBBLLL +FBFFBBFRLR +FBFBBBBLRR +FFBBFFFRRR +BBBFFBBRRL +FBBBFBFRLL +BFFFBBBLRR +FFBFFBBLRR +BFFBBFFRLL +BFFBBBFRLL +BFFBFFFRLL +BFFFFFFLLR +FFBFFFBLLL +FBBFBFFRRL +FFBBFBBLRL +FFBBBBFRRL +FBBBFBBLLR +FFBFBFFLRL +FBFFBFBLRR +BFBBFFBLLL +BFFFBBFRLL +FBFFBBFRRL +BFFBFBBLRL +BFFFBFBRRR +FFFBBBFLLL +BBFFFFFLRR +BBFFFBFLLL +FBFFFFFRRL +BFBFFFFRRR +FFBFFFBLLR +FFFBBFBLRL +FBFFFBFLLL +FBBBBFBRRR +FBBFFFBRRL +FBBFFBFRLL +FBBBBFFRLL +BFBFFFBRRR +BFBBBFBRLR +FBBBFFBLLL +BBFFFBFLRR +BFBBFFBRRL +BBFBBBFRLR +BFFFBFFRLR +FBBBFBFLLR +FBFBFBFRLL +FBFBBBFRLL +FFBFFBBRLL +FBFFFBFRRL +BBFBFFBRLR +FBFFFFFLRL +BFFBBBFLRL +FFBFFBBLLL +FFFBFBFLLL +BFBBBFFLRR +BBBFFBBRLL +BBBFFBFRLL +FBBFBFBLLL +BFBFFFFRLL +FBFBFFBRLR +FFFBBFBRRR +FBBFFFBRLR +FFFBBBFLRR +BFBFFFBLLR +BFBBBFFRLL +BFBBFFBRLR +BFFFFBFRLR +BFFFFBBLRR +BBBFFFBLRL +FBBBFFBRRR +BFBBFFFLRR +FBBBBFBRLL +BBFFBFFRRL +FFFBBFFLRL +FBBBBFFRRR +FBBFBFFLRL +BFBBFBFRLL +FBFFFBFRLL +FBFBBFFLLL +BFFFBBFRLR +BFFFBFFLRR +FFFBFBFLRL +FBFFFFFRLL +FFBFFFFRRL +FFBBFBFLRR +FFBFBBFRLR +FBFBFBFRLR +FBFBFFFRLL +FFBFFBFLRR +BFBFFBFRLR +BFFBFFFLRR +BBFBFBBLLR +FBFBFBBRRL +BFFBBBBLRL +BBFFBBBRRR +FBFFBBFRLL +BFFFBBBRRL +FBBFFFBLLR +BFFBBFBLRR +BFBBBBFLRL +FBFFBFBLLR +BFFBFFBRLR +FBBBBBFLRL +FBFFFBBLRL +BBFBFFFRLR +BFFBFFBLRL +FBBBBFBLLR +FFBBFFFLRR +BBFBBFBLLL +BBFFFBBLLL +FBBFBBBRLR +FBBFBBBLLR +BFFFFBFLRR +FBBBFFBLRR +FBFBFFBRLL +BFFBBBBRRR +BFFFFFFRLL +FBFBBBBLRL +FFBFBBFLLR +BFBBFBBLLL +BBFBFBBRRR +BFFFBFBLLL +BFBBFFBLRL +FBBBFFFLLR +FFBFFBBRRR +BBFBBBFRLL +FBBFBBBLLL +FBFBBBFLRR +BFBBFBFRRR +BFFFBFBRRL +BBFFBBBLRR +FBBFBFFLRR +BFFBFFBRLL +BFBFFFBLLL +BBFBBBFLLL +BFBBFFFRRL +FFBFBFBRRR +BFFBBFFRRL +BFFBFBFRLR +FFBFFFBRRL +BFFFBFBLRR +FBFBFFBLLL +FBFBFBFLLR +BFFBBBBLLR +FBBFFBBLLR +FBBFFBFLLL +BBBFFFBRLR +FBFFFBFRLR +BBFFBFFLRL +BFBFBBBLLL +FBFFFFBRRR +BFFBFFBRRR +FFBBBBBLLL +BBFFFBFRLR +BFFFFFBLLL +FBFBFBBLRR +FBFFBBBRRL +FBBBBBFLRR +BBBFFBFLRR +FBFBFFFLRR +FBBBBBBRRR +BFFBBFBRRR +BFFBFBFLLL +BFBBFFBLRR +BBFFBFFLLL +BFFFFFFLRR +BFFFBFBRLL +FBFFBFBRLL +FBFFBBBRLR +BBFFBFFRLL +FFBBFBBLRR +FBBBBBBLRR +FBBBBFBRRL +BFFFFBBRRL +FFBFFFBLRR +FBBFBFFLLL +BBFFFBBLRL +BBFBFFBLRL +BBFBFBBRLL +FBFFFBBLRR +BFBBFBBLLR +FFFBBBFRLR +FBFBFBBLLL +FBFFFFFLRR +BFBFBFBRRR +FBBFBBBLRL +BBFBBFBRLL +FBBFFBBLRR +BBFFBBBLLR +FBBFFBBLRL +FBFBFFFRRR +BBFFFBBRLR +BFFFFFFRRR +BBFFBBFRRR +FBFFBBFLRL +FFBBFBFLLL +FBFBFFBRRR +BFBBBBFRLL +FBBFBFBLRR +FBFBFFFLRL +FBBFFFFLRR +BFBFBFFRRL +BBFFBFBLRL +FBFFFFBLLL +FFBBFFFLLR +FBBFBBBRRR +FBBBBBBRLR +BBFFFFFRLR +FFBBBFFLLL +FBBBBBFRRR +BFFBFFBLLL +BBFBBBBRLR +FFBBFBBLLR +FBFBFFFLLR +FBBFBFFRLL +FFBBFBBRRL +FBBFBFBRLL +FBBBBFBLRL +FFBBFFBLLR +BBFFBFBRRR +BFBFFFFRRL +BFFBFFFRRR +FBFBBFFLLR +FFFBBFBRLL +FFBBBBFRLL +FBBFBBFLLL +FBBFFBFLRL +FBFFBFBRRR +FFBBBFBLLL +FFBBBFFRRL +FBBFFBFLRR +FFFBFBFRRR +FFBBFBFRLL +BBFFBBBLLL +FBBBFFFRRL +BFBBFBFLLR +BBFBFFBRRR +FFBBBFBLRL +FFBFBBBRLL +FBFBFBBRLL +FFBFFFBLRL +BBFBFFFLLR +FBFFBFFLLL +FFBBBFFRRR +FBBFBFFLLR +BBFBFFBRRL +BBFBBBBRRR +FFBFFBFRRR +BFBFBFFLLL +BBFBFBFRLL +BBFBFBBLRL +BFBBFBBRLR +FBFFBBBRLL +FBBBBFFLRR +FFFBBBFLLR +BBFFFFBLRR +BBFFFFFRRL +FBFFBFFLRR +BFFFFFFLLL +FFFBBBBRRR +BFFFBFFRLL +FFBFBFFRLL +FFFBBBBLLL +FFBFFBBRRL +FFBFBBFRRR +BFBFBFBLRL +FBFFFFFRLR +BBFBFBFRRL +FFFBFBFRLL +BBBFFBBLLR +FFBFBBFRRL +BBBFFFFRRR +BBFBBFFRRL +FBBFBBBRLL +FFFBFBBRLL +FFBBBBBLRL +FFBBBFFLLR +BFBFFBBLLL +BFFBBFBLLR +BBFBBBFLRR +BBBFFBFLLR +FBBFFBFRRL +BBFFFBFLRL +FFBFBBFLRR +BFBBBFFLRL +BFFBFFFRRL +BBFBBFBLLR +BBFBFBBLLL +BFFBBFFRLR +FBBFFFFRRL +FBFBFBFLRR +BFFBFBBRRL +FFFBBFFRLL +FFBBBFBRLR +FFBBBBBRLL +BBFBFBFRRR +FBBFBBFRLL +BBBFFFBRLL +BFFBBBFRLR +BBFBBFFLLL +FBFFBBFLLL +BFFBBBBRLL +BBBFFFBLLR +BFBFFFFLRR +FBBFBBFLLR +FBBBFFBRLR +FBFBBFBRLL +FBFBFBFLLL +FBFBBBFRLR +BBBFFFFRLL +FBFFBBFLRR +FBBBFBBRLR +FFBBBFFRLR +BBFFBFBLRR +FFFBBBBRRL +BFBFFFBRRL +BFBFBFBLLR +FFBBBFBRRL +FBFBBBBRLL +BBFFBFBLLR +FFBFFFFLLR +FBBFBBBRRL +FBFBBBBLLL +BFBFFBFLRR +FFBFFFBRRR +FFFBBFFRRR +BBBFFBBLRR +FBFFBFFRRL +BFFFBFBRLR +BFFBBFFLRR +FBBBBFFRLR +BFBBFFFLRL +FBFFFBFLRR +FFBBFBFRLR +FBBBFBFLRR +BBBFFFBLLL +BBBFFBBLLL +FBBBFFFRRR +BBFFFFFLLL +FBBBBBFLLL +FFFBBFFRRL +FFFBFBBLRR +FBBBBFFLLR +BFBFFFBLRR +FBBBFBBLRL +BFBBBFFRRR +BFBFFBBRRR +BFFFFBFLRL +BFBBBBFLRR +BFFFFFFRRL +BBFBBFFRRR +FFBFBFFRLR +BBFBBFFLLR +BFBFBFFRLR +FFFBFBFRRL +FFBFFBBLLR +FBFBBFBLLR +BFBFBFBRRL +FFBBFBFRRR +FFBFBFBRRL +FBBFBBBLRR +FBBFFBBRLR +BFFFFBFLLL +BFBFFBBLRR +BBFFFBFRRL +BBFBBFFRLR +BFBBFFFRLR +FBFFFFFLLL +BBFFFFBRRL +BFBFBFFLRL +BBFFBBFRLL +BFFBFBFLRL +FBFBBBFLLR +FBBFBFBRRL +FFFBBBBRLR +BFBFFFBLRL +BFFFFFBRRR +BBFBFBBLRR +BFFFFFBRRL +BBBFFFFRRL +BFFBBBFRRL +FBFFBFBLLL +FBBBFFFLLL +FFBBBBFLRR +FFBFFBFLLR +BFBFBFFRRR +FBFBBFBLLL +BFFBBFBLRL +BFFBBBFLRR +FFBFBFFLLL +BFFFBFFRRR +FBFFFFFLLR +BBFBBFFLRR +FFBFFFBRLR +BFBFFFBRLL +BFFBFBFRLL +FFBBFFFRLL +FBFFFBBRRL +BFFFBBBRRR +FBFBBBBRRL +FBBFFFFLLL +FBBBFFBLRL +FBFFBFFRLL +FFFBBFFRLR +BFBFBBFRRR +BFBBFFFRRR +FFBBBFFLRL +BBFFFFFLRL +FFBFBBBLRR +BFFFFFBRLR +FBBFFBBRLL +FBFBBFFRLR +FFBBBFBLRR +FBBFBFBLRL +FBBFFBBRRR +FFFBBFBLRR +BFBFBBFLLR +BBBFFBBLRL +BFFFBBBLLL +BBFFFFFRRR +FFBBBBFRRR +FBFBFBFRRR +FFBFBFFRRR +FFBBFFBRRR +BFBFBFFRLL +BFBFFBFRRR +BBFFFBFRRR +BFFFFBBLLR +FFBBFBBLLL +FBFBBBBRLR +FBFBBFBLRR +BFBFBBFRLR +FBBBFBBRRL +FBFBFFFLLL +FFBBFBBRLL +BBFBBBBLRR +FBBFFBBRRL +BFBBBFBLLR +FFFBBFFLLR +FBBBBBFRRL +BFBBFFFLLL +BBFBBBBLLL +BFBFBBBRLR +BFFBBBFLLL +BFBBFBFRRL +BBFBFFFRRL +FFBBBFBLLR +FBFBBFBLRL +BBBFFFBRRL +BBFBFFBLLL +BBFBFFFLRR +FFBFBFBLLR +BFBFFFFLRL +BFBBBBBRRL +BBFFFBBRRR +BBFFBBFLLR +FBFFBBBLLL +BFFFFFFLRL +FBFBFBBRLR +FBBBFFFLRR +BBBFFFFRLR +FFBBFFBRLR +BBFBFFFRLL +BBFBFBFLLR +BFFFFBFLLR +FBFBFFFRRL +BFFFFBBLLL +FFFBBFFLLL +BFFFFBFRRR +FBBBFBFRLR +FBBBFBBLLL +BFFFFBBLRL +FBFFBFBRRL +BBFBBBBLLR +BFBBBFBLRL +FBFBBFFLRL +BFBFBBBLLR +FFBBFBFLLR +FFBFFFBRLL +BFFBFFBLRR +BFFBFFFLLL +BFFBBFFLLR +BBFFBBBRLR +BFFBBFBLLL +FBFBBFBRRL +FBFFFBBRLR +BFFBBBFRRR +FFBFFBBLRL +FBFBBFBRRR +BBFFBBBRRL +FBFBBBFRRL +BBFBBFBRRR +BBBFFFFLLL +BFBFBBFLRR +FBFFBBBRRR +BFBBFBFRLR +BBFBBFFLRL +BBFFBBBRLL diff --git a/tests/aoc-2020/input/day6.txt b/tests/aoc-2020/input/day6.txt new file mode 100644 index 00000000..7c53d58b --- /dev/null +++ b/tests/aoc-2020/input/day6.txt @@ -0,0 +1,2199 @@ +wzaopvscxknyjtiul +belforsgdhuvmwc + +kiocpzjhsetqnwbl +maciywlbpodgevujnsktrz +kpebjfchtlsonwiz +pcezwjtsinxlobk + +lrcp +cdlbepr +rlqcyutp +lcpr +lrtcpym + +gxcqbowaelfjhpknz +gflhackzwqxojeb +lfwocexqbkjhgaz + +fpivaozqnkextmbrjhycdwug +motgcrzaisqlpdwbeyhukf +hbiqcdmkpawueyztgfor +zrcehkqyoblmtgfiaupdw + +umjz +jzu +vzowkpuj +jmzau + +unzlx +lnzxu +mxluzn +nzuxli + +szkiauhyntdrbcljomqwepv +amowcpzbyukihsjtqelnd +lzctuqjabmsynphkewxido +sikblhptcoqemdanywzju +jdeiylutspabcwngfzqkhom + +zgyhwtnxjdqucbp +ptnzhudjbcxgkqf +zgqhjbdnutcmpx +gjbzhpdxanqcut + +wjkcsqlu +ucsjq + +vkzsqtunmr +ljcexadhg + +fhtrusba +svtk +pgzwytn +astb + +hvzjiwlsmnatbxgqcuke +zeaukbgtnjxslmvwiqc +tqsjxvznemblwkgcuai +atwjqckzmgvnlbuxise +mwkteqbcjasvxuizlgn + +gypubxsntl +untylgpsb +uynbgltps +nylgutpsb +unsltybpg + +qwygnalv +rxdohlnatwy + +fcytwkqjaorm +rqfcjokwtmay +cjyftkaqmrwo +tqomfrwycakj +cjktaroqmfwy + +ygnjepucrfkxq +ypnqjfgcuerxk +fyghkncqpjxuer +runfcyxgjqpek +qxjrupnygkcfe + +rneuh +rhneu +rhune + +dyct +tycd +cdty +ytdc +cdty + +hoaxpnic +zrocenxaphui +pigyovantxch +vanbocxdpihw + +nmadf +cdbykfwtim +fdms + +xrlweqhyomniupgasjb +wxlaijmhqbopnugsery +xmkuswchylpbeqirngojfa + +u +yuq + +d +d +d +dqf + +kfnbcvxtogwhsz +nctfsoezgwhkvb +kncbtvgwsozhf +kcfsobzntgrwhv +obnsfczkrvwhtg + +ektcsq +tcpqesdk +ightwqxosekj + +y +y +y + +oaqwmublkjz +qhkduvibzmfx +bomkquz +bzpuqwmko + +uybzfemjhvnp +amxynpve +kyvmenxp + +vpyznetlsow +njewpszg + +a +a +a +x +a + +ytixaokbv +vybaoxtudi +kaivoytbx +oavbxity +vytbaixo + +okdmepqj +kqodjpe +kpdeoqj +yqdpkeoj + +nqtkbvrjizuyhlwmxopscga +ojzqryxwvpkclighnmeuabts +socwtinpyakuqljzmrxvhbg +sruhgbvjmpwnaklioqyzctx +pmojxvkiwztgaslbuyhqrnc + +sruqibofpetmjxacnyw +meoxusytawnfrhqicpb + +udzjvpxcmg +vzmpdjgxuc +vdgcxujzpim +gpujzcmdvx +jcvpzxmdug + +lwke +jqa +jdp + +ebcnymdxhsgjoptvkluw +mhewbjgldvutnkxocysp +odkvwhlcupyejbsmxntg +ylhetjbxumpwdocgvkn +yvugktojibqwncmlpehdx + +wc +cw +wc +wc + +fnatmwk +vbqnoptm +zldysrjuiegcmx +fm +vmh + +e +e +e + +nd +nd +dn +tdn +nd + +bswceuimx +vfugqjk +phrbaulzsdy + +fcmpeuxkjiwtszhgnoravb +tjhbsovuzipmracnxf +zfxuvbitrcnamosjph +bafxzhonrsipvcjumt + +uopkgzec +uogckpz +czgkopu +gtuopckz + +k +k +k +k +k + +bucx +zxfu +oluinsxk +cupfxb +pxuz + +gw +wg + +nif +qby + +kazpqyrt +uocensfmvw + +vjy +srdfuy +tyz +yt +jyow + +wcn +d +m +r + +afo +pruao +afo + +jiqp +jhp +jp +pj + +rvxucn +xmurvtc +uzvmrxc +xeykobgvjpclharfu + +bc +cb +bc +bc + +hxnparv +vtqhxapn +apnvhx +dvwanihpxys + +jdszlimbca +drtmxcqlw +cmdzloub + +podyqvae +qyapveod +pvqedayo + +scmbwfuldnvkxqehjgatpry +zgltckiwjnuebahmpfqvdrsx + +hu +fkixsu + +a +a +a +a +a + +fkmupthae +vumpwh +ugxwmph + +kspnwvyr + +yxaw +xw +hzrmxbekw +wicx + +l +lz +l +l +l + +rwn +wnr + +tpankiydfghwlzv +hwnztpvbcsykgl + +hcn +cuhq +qc +uq +xsdz + +izsctumjfvyo +iuymczbtjo +ytprwciogjkmzx +iyztahnjemcdo + +kmepowc +cwmkoep +bmopkect +cjepnkmqo + +gqlxpwt +qgwtplv +lpgmwcit +twglpx +gwtphl + +uiyeqacdlwxpgt +deyxtgqaulicwp +pgawxtyiucdelq +iaepwxugtdlqyc +aewygpuilxctqd + +ksextofz +zxhesk + +zxnlhrd +hlnxdbczr +qnxfzdlhr + +foryns +rnofsy +fsyonr +rosnyf +orsnyf + +o +o +t + +raktoz +atkzo +vtkzoaf + +yianzfpwbqsvltcuhjg +tpjzhvwfibacusylnq +wdctlhzbjeqavnfiuyps + +mhexryd +yerhdmx +ehxymdr +bgmrehxyd +xreyhdm + +pebtkqchsoydz +dklqohsupwcyztxe +ckvmsqjpdhaetzofy +wsuohqckerltypdzn +lkxsyowcdzteqhp + +nqbmshlg +ebshnqla +sqngvb +nbwqsi + +sauebdjhpwtcgnlzorfkxqyvim +adpvbqlnofyxmiuzjsctwkeghr + +gy +gy + +jf +wpy + +guztycblrhfiq +bertlfcmguhv +lbytrcfk +fscbltnpxwor +lqfbjtcrdv + +egbvoxlmpczqnafyu +enxqbazvpmolyfcug +kpuezgxbqnaymvflocs +vipegmfbnocqxuzlay +mnofzbaylcqxegvpu + +wrclt +lfrcw +rcwl + +zbwvmuifpjxqnlgo +jfpwmuznqxvbgio + +baheoslg +fygoa +aygo +aog +fmoga + +ltpdcyn +ycdlnt +lchgtydn + +fvdgksnmphxzcboql +zboknxmfgdvclpq +qdlkpgcbzvmoxfnt +ciozqlvjgkwbfxdumpne + +gmlyqkjehrp +ojeizhlgpm +uhgpmflje + +atzscwnb +snahqtc + +zyjml +jryml +lymtxvod +mryil + +iudskmzex +udqkzxesmi + +qdywgafzmn +ufobhixk + +r +q + +alndhupswj +npwlua +nlueapw +npalwu +lawnpu + +obsxpclziwauf +fcsjxiblwuotzp +spcvbiwfzdxulo +ulfwpiczosbxd + +hknftpgaey +typoqgehn + +tyhzpoejxdl +xoejpdztlhyk +hreinoyjvtbdzmfqlp +otjyedpzlh +zdoywjeltshp + +n +b +b +b +b + +kvupfreobljsmw +sukjromplvfwe +rdwhpkjvqcemlosfi +pvmblwsfkexroj +eokvlrmsujwpgtf + +wiqs +l +j +j +h + +jx +jxc +jxr + +tzv +tzv + +aqe +qan +avqs +asqcm +glpayuq + +hncexlkpjbdmoftag +pfbxckmdantlogh + +ocsdtg +sdgtm +sdgt +tdsg + +jfioeacnqv +oqafnicjev +veijfnocaq + +xfmnhbpljcg +cmlfhbjxengs +xnmbjhlgfc + +vcn +kvc +cv +cv +cvm + +wodgjfls +owdgfq +niogfwtd +vcdgfwo +mgwyfod + +ozhwa +kotuedjcql + +kw +kw +kw +kw + +sufmi +rmsuf +jumfpeogs +tmfsbu + +siadk +mijcgosk +ski +isk + +kplwzh +hzpkwl +lwzkph +wzhkpl + +yot +y +sy + +lz +fl +lf + +kexljydcihonwtgumfsrz +iuywlcxomsedjnhztgrf +wtorjgfuxsmlyecdnhbzi +tczliugorhdjsfyenamxw +zklniaxyujdcwtrhgsmfoe + +juzqtibn +qijvuzgtnf +nqxziutj +qitonjzw +zqtnjgbis + +tuqygv +gutvqy +tvuqyg + +plzqmthysawexgvnr +ptvxasryleqmgznwh +htlgnqexsmwpvyiraz + +hizrfynjmqceg +bplsuoydv + +bptjc +jcbtp + +qedcultavjwizxnkob +bokndqcuivwtxlaezfj +qazlvsjexikwbcudont + +vgihxmquktcrywpzj +kpujwxfrgqmzlyihct +domjarxitczhwnqugkyp + +wilctjzq +ouwylicgkxvsha +npbwlric +liwqc +qclpidbnw + +gbvpdkxclfejtaoq +elabncgfkjdvxop + +vfi +vpif +ivf +vif + +hvjzxebtqsfwpia +gvaxyiwfkcru + +hzrg +lz +fqz +az +qabzpyi + +redfpogvxc +zeyh +ainye +tlyzeu +alsemu + +gwph +gpw +ywgp +gwp + +fjkhnmuwtxialyo +tjuolfnkamwxy + +umrdifo +mrfodtuix +jkruohmfdi +ufikzrmdo + +blioreudh +brfiaheulndgy + +ywstjalubez +wbsautezj +usebjtawz + +gatfpyjoznwh +oztwypanjghf +nzgojwfphyta +yjhpgfotwzna + +metqoknri +kqmtnwerofi +qtkohjnmeir +qmkrefiton + +xdgrbua +bwdukoghcrxln +euvxgrdbi +vusgbrxd + +rovayxgkqshzi +olgxhutwzsikbecqdajyp +ksrahngzyiqxo +vosgzynxqaifkh +soqzigyxakh + +fopjqgdmhtbv +qbvl +lbvqy +buwvq +bcuqv + +feyvazrnows +waynzeorfs +sorafznewy + +jpohmywkvqextsd +ahtvoxpumsedq +qbgtpoecsnlmxfirvh + +uic +ij +ixgp +alzehimdvybf +tkgi + +fpjubodeznsqyxkwami +anuymqskowpedbifzjx +oubjpwznfdxemiyqska + +uhzd +uzhd +dhuz +uhdgz +zdhu + +bsyituhq +rbjahg + +xszkrj +znhjrsx +jzrptkxs +mlzrjbxsyoq +unjxrzsk + +rmyilhnkdqjpfceogzu +oegpdtmkwuvfal +budoxkfpglem + +xekshpotfzlcmuiwgj +sauekziobrthjgxfcpwl +eifjhkwgpcltsxozvu +okenjhgscxqfuzwtpl +uhcjxzowitsdlegpkf + +kzwdconulqtrvihsgp +qwmhutnpyrsxbvgzokdeicl + +x +x +i + +umvbcenh +egun +tnue +ktuen +wgneu + +wysximljeua +uiwxleymsja +iemlyxjsawu + +r +wt + +hcvos +xv + +enzmuaxc +jcdnvzam +nltvobeaym +mfnahipgswr + +hsnmlpkujoigaftc +fslotjmpghacnkiu +cbfjlkohumapsngt +lsutoajknfpgchmi + +xisn +insxw +nixs + +eunflkcda +gcnxefzlud +lspcndufea +onwjutcefdlm + +hrivmxpatkgd +hdmxigtprakv +dvpmgcrthkiax +gkdraxithpmv +rvmutdbixpklehga + +elmdxqwn +mqlwedn +mwnleqd +qldwnem +qemlwdn + +wpjfrlqbs +vwqjlsfbr +srqwbjflk +fpjlqwsrb + +u +j +l +w +l + +kr +rk +kr +rkd +rk + +irpxjsmqgf +bhqpendrjfc +pmwryfjql +mpfqjryux + +kjgheiqcox +iklufxgcjeh +gynvizspjhmebakxt + +udwlimhqsorbpeynctva +qzxobjpsckyfmtr + +xqyjwueda +juehakzxygq +nexjlqumsyra + +mvsyaec +xalsmwvyr +msyuav +awsmvy + +tyfrcibenxdvgum +diptcfwuroegnlvx + +c +i +g +arelmvpoz +n + +q +pq +q +asq + +oxrchtjsekpw +twoesdckuhnpxml +xkovyetpwschai +tsjwecqzxhgfopk +fspcxrtdoewhk + +urjh +njd + +ygo +syog +gfoyr + +lrvkw +dwarkyg +cphkiqfjsut +xk +vwk + +chlog +wughvb +cngh +hlgc + +hlu +luh + +tgfsbj +btgjf + +yflqdgp +dqpflg +dlgpfq +qgdlfp +lfgdpumq + +dybxtrizvhcksalqpungfwmeoj +lpotsjiaydfbqwzruxhemcnvgk +qletwyopaivjkgcbszrudmxfnh + +rowgvahemlyjkbupxct +jrewbpmktlvxaouhcy + +soerhzknbijd +oekgznidsrhj +oihrkaduezsnjf + +axthin +ojhtxa +tnahxv + +t +f +cv + +yjkatqum +eksumriab +wksmhvuaeb + +wz +w +wfb + +ruvglckjpomqthy +afjbuxevlqiwog + +zpyfolacrnqgvhksmjdeuw +ebctoamjkusdrnpyxwih + +fxs +sfirlxm +swfx + +imftqohzgjcpdlsrebxuv +agptlnyxujfzwkoqmdh + +mkbqsgaxojivpyrzwtn +svhgocwbazkyqtxrfnlmu +nozrjkdabxwitqmvegys + +tuzmyvqgnsekbwo +vmqgbozknywetus +ymsnwuqoezktgvb +euzowmbqtskgynv +uzesoybkngwmqtv + +khgx +xhz +aclrne + +kq +qk +qk + +i +gmf +dh +owqjb + +pstycjadezlbnqwxrig +rbhdpqysicgnlwa +ryhibaqwdclpngs +npdcyqsbrhawiglko +cbsdiwpnqgylra + +quvsagtxw +uatvcx +vutax + +ndbrlpzxasmto +sdbxjyrofatqlpmnz +bolmatxdszpnr +wplobctzsmxdnra + +boxmgljp +xfap + +cndeqvy +mzneys +eyn +sieyn +eynm + +kbuwp +bqpkh + +ljngohfvtpdmw +iwctogfnmvuzlhd + +napvy +gaczoidwybm +ysaet + +wrnixgyv +wnrxgvyi +vxirywgn +iwryxvng +gvwinxyr + +ygtbiqfuornlx +ieuwpgzxhbo +vubi + +ohxbkqgsj +qalpsfmiwtzyrdc + +fyakzqidcpswn +qwkizfdpyacn + +lxf +ifxl +njuxfl + +yxqzebvsgpwl +mnjcftohyi +adycurkmo + +nxdfptvebg +swjzqh +kwyasj +oljz + +lrzunheqgjvcs +kiqshjmgdvuz + +feyljcgrqmsdbz +qsgnumzhiayfbcle +pcwfstmkvgeqloxy + +qnwcftx +hyewofcl +cwhfi +clfehw + +kjuebdvpgqs +ahpubjyske +zksejxbuwp +juboekswp + +u +bcytf + +rpvshwmn +djnshvmwr +wrshnvm + +itpduvwechnrk +ntirkpvdelcuhws +vrcktepindwuqhf + +q +q +q + +mzhrygf +zhfygmr +msofhrygz +rqfymhzg +ygfmhqrz + +nwbpshv +twspladobu +hzinpwbqs + +c +c +xecuy +c +c + +y +y +o +y + +qauijgxfhbztlpvecrk +ljhcamkegxbqyptnzrfoviu +ejibuzlprhtcxaqfgvk +biczvdhgqlxrktjafuep +hpsxgwujqakbrltzevcfi + +cmfryo +froyc +dcofgye + +dcrbjnza +jdirzacb +bzrdacj +cbadrzj + +fnjryzvtxlsdioepm +ldxfzcjtovyisepbmrn +mtoxdilwfrvjespyzn + +omqxjypgin +bcrdezl +vflwkrzt + +dkabj +ntwpy +jb + +krjawyexhnlmcspizoufgt +ryebdifmlhwxgasvkoqjztcn + +lrctmfu +clzrmtfu + +ivagzecmwyl +xgkrojtfc + +bsalmjthvwgxirpqcnyue +ymtqgcsjrxnvaepfhwiolb + +tgwkeapzjo +oewgpzjkati +hejoalxzmgprkwb +nojwgazkpet +asoedjkzgpw + +zpjncustlhb +nswvlbtzphcjf +pzjlnebcmtfhs +cljbzfinthkps +aoplbczxrstjhyd + +ulvwcxg +bsvqwelud +dmxwioulv +nuwqvlb +ulwvpjft + +fmlvprndhxa +hmapdxvrnfl +npavmrgfxhdl +mhlanxrdpvf + +vfgwzy +yjgfzqxovu +wzbyfgvj +rvfkpdslzthngmyice +qfyzxavg + +hzfjbs +sjhzb +nhsjmzgw + +gmtvalyn +igtmvlyn +ymgtvn +gueftonmvxcy + +j +jge +jm +qwbj +j + +oftpvnykgdxrels +nrvksolftepdxy +xopknvbwltdeysrf +dkexlnhprtysfov + +gwcvu +wuec +cuw +wcvu +cuw + +cndywt +ntdwcy +cqtyngd + +noayvkcdsu +yaedfcjozs + +rzfhlitjvwdnp +hzxntilvwfprjd +ljinfmrdtpvwzh + +zylgudcfbxprwaqokmtjnsi +bosdnqlyjxgwkmrutcifpaz +kqwuipcfsdnzagojrxymbtl +wbixmynrjkgoaztslupqfcd +bnearosgumfildkjtcyxpqzw + +fherd +dfreh +hredf +dfrhe + +aysber +se +sze +seo + +cjofniwx +zxieaocf +uipxrgodcf +bsjtveoizwfxc +jfcoxinzt + +wzoegvhldfibmcj +ohurkdjcvifbazew +sxqzjwioefhbdvc + +ifrstw +btkqyfscx +lgvedonzjphu + +buw +wubhop +zrfwsbu +ucwhb +wbcu + +bdpn +wdpnb +dpbn +bdpn +padnb + +ukgziahpfyq +etvsrnjilx + +w +w +w + +kdjrc +kjcd +cqpjidh +tjdmc + +fihjqetkprmbgzl +hgjrtqiefompbzkld +amqipgtlebkjrfzh +elgqwbmpkjvzfihrt +mfjcpszthlirkbeqg + +vpfmytuob +bftvyoup +zobynvutpf +uypbftov +ubotpfyv + +t +k +k +t +po + +he +eh +he +he +he + +jwkorfnpqhlxvbziedcasm +vzsfxlkqarmhnjpidcboe +lpzkacexvthbfrojsinqmd +mcnzqiekusafdpvoylxbrhj + +doqcnfpshrgwxkjubyval +bdjuhgnlvpkcrfawqsyx +pnasqwryjfvduhbtcklxg + +pyba +bacs +autxkrgm +bwfa +eiola + +bhfrtklucjpinqoexmdgz +orchqmilekjbupzfgdnt +klhbtnzuomxegdivcjqfp +itfgdqualjokhnbspzemc + +kjz +jkoz +kzj +zkj + +w +v + +qfytlkjconpsw +ltfpyjcskqown +wqsfkcoyjpltn +nckhwtpofjyslq + +bvsqmnyjkur +qrukybsjvmn +bnkyvusrmqj +ykqumnrsvjb +bjvyursmnkq + +ykmabugfjtqdwpevrzx +maezkwtbvxdqupojfyg +mqyvxasgkezudpwtjfb +fumzpyxtdwqjgabveks + +wcntqs +sntbcwq + +tywbgnf +gbuynfcrt +sygnrufbt +gabfiznmhtpy +ltbfngy + +ngkfqmv +gnqavfm +qgmnavf +qgmvfn +gvmqnf + +w +a +id +uj + +zvqypkadneblrf +vaeqpldzkfrbny +friaqcvdsexyhbnlp +ezflrdqkbnypva + +tlhucpwyzrex +lcpwrhqe +pkehrwlc +ewcpfhrl +chlpwerm + +wrtljgy +ygqjlw + +jvygmx +qxmyg +myxgqr +gmyx +xmgqy + +nvmufjzsb +amnzthf + +ujgebphztf +hezupfjbt +zjxfubelsphdt +pthbzefju +bzfuhpjte + +xhfj +fhgdx +uifoxqwh +hnexaylbfk +fphux + +jiqhofdlwkgas +wftrvupnze +bwfmu +muenywfct + +mzrf +gkxsqcwo + +uaewm +ewmua +muaew +umwea +awmue + +njduohc +hndcjou +chndoju + +sqrdgapl +dqgpasrl +gdqplsra + +aunzfm +munah + +paqvw +qp +fqs +vpq +qwp + +gfmbcvriax +dlcmbwvfeyp +bixcrmvaf + +uczi +bzi +izwrb +wiz +zi + +s +j + +khqea +qehxka + +mj +dj +j + +uibwnrakt +torn +rtevnlh + +ghwzt +tghz +gzht +zvgcuqh +hzg + +t +t +t +mt +t + +cszjtfdulmprbawqkexv +fbwnhigouy + +eq +feq +eqo + +tyvjnf +tfnsvj +bftngjkv + +bpxwhjcmogyq +tnfezpk + +as +as +as +as + +ybqntwcfld +qytlfbdcwn +wtcqdbfnyl +ltywfcbdqn + +fzshuktvwp +ukrbmxvyelindgq + +fjoweph +tbvfmscxe +aofzek + +axjyiwok +mviqawyxutnjbd +xawiyjc +jhwziyxa + +xgwq +mohv +w +ertbzsjk +udf + +crozvbt +btzvroc + +tvnqzmiouaeslxyw +taymuelowxqsviz + +jv +xjwv + +npohlyejtkbuvca +ytlokvaebhucjn +kutvyngeclaohbj + +nbvwheisoxpa +evlntxsmowighb +kwnaviojeshxb +owvphiexbfns +jwbnheyqvsxio + +fkvcteqsgd +bzcftexmvwohp + +srwf +frnwsj +swafr +rswf +fwrs + +iovjntkewabzumpxryqdfcgh +gskjxpotluzqycrifwbdne + +luokigf +nuherolcyiqxam +ugiobls +lwtduoi +ligwou + +gbfiqhdmpwjo +fwdqmbpjhig +bwjdrqhmfpaig + +ulzyiqamhxvpgbj +ftdrcnewhgszp + +oakzwdjupviqn +rgdelufhymik + +clxpqaryjkt +qycujtlpxa +xulpctqjya +ucjlatypqx + +zckf +fvek + +zncuxhaeli +nalhizkcuex +xaceinzulh +acuixzelhn +aczqnxhulie + +wrzuljei +lnremi +hrikyacgf + +odnqfwpugy +ptlwnydoqhmf +fyovwdpqn +oznwbfpykdqecs + +gchqvjlypom +kcwtvxdoiu +cvwzfkoe + +xw +wmzx + +mfihkroznydqp +kfpzqdinhrovym +hnrzqpyfdmiok +rtqdphyfonizmk +fimnyphzdrkqo + +nsbiyukormjhdclvaptw +bcrsitpxdklunmajvhwyo +dktbwvmfyrlhisjnacuop +ztcdupvhgjaboqinsylrmkw +clovapfbyhsukwmdtrjni + +bgq +gq +egqk +qxg +wfjulqgzo + +foc +ocf +fco +vofc +fco + +oitbdfympxjw +jfbowrptimh +ftoimpbwj +ktufiojpwbm +yiwbjpmfout + +adznvugpirxyfwkeml +uyefgikmdxrznvwap +gwxdmkyiavrpfnzeu + +mi +mi +mi +im +mi + +redwqtcgofk +apuhyrsdkbf +kfsrnuvmhbxd +rijdfk + +ekxfaqmhbptj +efayqhb +wqfuhabecy +qbfheac +eafbuhoq + +yxzarums +yzqforucaxs + +cwlqfxdrmp +dxipzcambwoveglk +twhmqspdcxl +cjwxpdsumnrfly + +zxdgqawjntukphsfbievrloc +twslhaqxoenmzrfybckdijv + +abzlckqrnsgfijdtvy +cgdteqlkbzinyrvasjf +dikaynsgrflzjcqbvt + +kptwqavin +wkviqxptn +swpvmgnqbiktl +qpvdtkuiwn +vrjikpytnqewo + +evjqxlktmroh +tjmelkoxrq +jlekomtqxr +molerxtkjq +njxkltqermo + +wkacmijsrponf +rwvpcsu +wzyplbstrc +cdhwylserpx + +jocqfpgmy +qjfpgmc +cfpqjmg +zcqjhfpgme +gjcmfqp + +evchkgpdqourmtlzbs +plvdteqmjzurk + +fgwbxpihnrz +cdktfvmljbeiwr + +mhdcqiaswfpeyogjkbtzvxn +xdyifpqzevknmcoathjsgwb +ndvlyzretgkqbswmpxcjiafho +mstqzycowgjhbnaxepvkidf +aygkezvcxowbjfqithmnspd + +qdmetvs +dmslt + +vaxsreikfulbohwc +avxeiolbkhcswrfu + +wiukdyzvenogj +nouyvkdrwagij +yewvhtjkgndqoiu +dnvfswojigkuey + +gnuatzydv +amzvnutgy +cvuengaywtz +zmdgvpyntaohu +oayngzstxfhvu + +jed +jefn +mjkch + +uojxteazifrsch +kaurlehco +ceuaohr +chkauwero +hacuekrno + +ygopsthm +fzduxalqjk + +hkdu +khdu +dhpuk +duhk +hudk + +mtoqrcgzxuavek +mntwviorack +frtmkyaocv + +pstolmvrqkwxz +rsipltjxqnmagvwuk +kspmrxtlyqebwv +twqmlexkprvsf + +lacfoveut +ocafve +acvjofbresx + +ohgclnjdz +ejsyzdolg +riqbwtkjfdgl +zdgjyvxhl +jldaug + +weqdtuvmfnygaskb +lsugyqfvnkebmj + +zdcpefjvaly +azcjfvdelpy +tayfqbdzlcepjvk +jedazcvfply +zdplceafyjv + +jw +j +chj + +cda +ja +yaxn +ja + +cfrqx +vlju +v +untv +uy + +cowiekfanus +wjgdupicnsfr + +sh +foywprquj + +b +u + +dhezbkx +nwyvlisjpr +jqcotumgfa + +eoh +oe +oe +xoe + +cjdhmxuyg +gjmxhdyuc +huedcxymgj +dugjxyhcm + +srctb +crstb +bvlezstprc +trbcs +rctsbj + +fbdvkeltq +lotm +nojtl +tl +rtl + +nryhkvetf +xkhrtnfycv +rhtvfynk +rfnvhtky + +qabfkzotdyjieghumplxs +sqtuhaxjgdkfliymeozbpv +lqgpjmeofdkaxuhtsyizb +usbyhegwtzlpkxidjqfmoa +pyjdkigtbafqohmsxuelz + +zolurkepnsm +ymplgvtrond + +skgedcfiqz +gfqzsckdei +ckgsdeqzif + +uazvbnlgtiscdmfjreq +iszgbjrnqfdtveauclm +nsilqzuamtgjcbrdfev +zmquiblfsgrvjetdcan + +faghxbimzvkcqsy +ikzagfmxbqvycsh +fbsxakqcghymviz + +ztvufgy +vzftgey + +g +g +g +kg +g + +cdihy +tsb + +ibl +l + +cpdatberqxhugms +rgaxceqptsmhdbu +emcrsdbhtxqapgu +drechgxtmapbqus +xqdpcmshbgeatru + +f +poj +f +z +u + +ezagw +usolp + +jagq +qgajs +gjasqk +jqagm + +josgetlqimcdxruyazvf +riclqagoskmwuyxdetpfjz +surlmyegxdnactoqzifj +lcydfrxusmvqjagzbeiot +lcrsoyavzubgimfeqxtdj + +qevptljankmhs +qmjukehpsatvo +vzmsaqgwetjphkr + +e +s +m +iaxgyd + +isn +nis +uisn +nis +sni + +bvjza +bv +bdv +dvb + +betqjy +nqbetj +tjvqe +hqkraxcp + +dbhzkpt +pzdhtk +thdkzp +pzthkd + +gyrfsaox +xafgkysh +sgxfapy +gmjuitsbcafyxq +xsgafy + +mvenpfxkwc +wpstxfev + +rftiyogqvue +gucfjnskpxzqoba + +htoyrpesdvnbg +rohysvgpetn + +yxntbv +vbxynt +vbyuxqn +ynbfxtav +myxnbdv + +v +v +vs +fv + +exodvrya +vomacygxduis +wajloydxvp +fyxokvadj + +qxipfbwly +wpxtlfcibyq +pylqfibwx +lxpyqbifw + +bydioqrcftehkaznlvgsx +ypklfesavizqxgohmtnbcrd +dagnriqsexyvflcbtkohz + +uhsjxyfniqbvw +auzbviynqgsjxwf +vfjsbqxurwadinlyt +yevixlqfnsbojwu + +y +y +y +zh +d + +etyjmxdwkfosbqzhigrpacuvn +uktqciyfbnrosaedlzgpwhjvmx + +w +wim +w +w + +zlkgwbseno +zqngksb +zgnbsk +gobztsnqkp +kcainfghdxzyubmvsjr + +qywhjzxlarbutdnvimc +vrbyjhtqlxmcnzui +tljuhyrnqbpzvxcm +tezubhyjxnqlfrvmc +quhxlzrvbmnctjy + +mwqlo +xqonftwmacj +gwrodqum +imwoqre + +q +q +zq + +tgnvlhc +nhcvtgl +clvhgtn +chvlntg +cnhvdgmbftlq + +pmfreuoyzdlhsgvcwb +exahjnytqcgk + +ayglbtwcxiopqh +ifxvqhtpbyowa +uqyhwaimtfkbxvpjdo + +mcwt +tdrckp +ct + +hskjp +fihpjksl + +rlvixasmotuqcye +tcyvolauqxsmeri +tpsvmceoailuyxrq + +ckvego +ecgokv + +bu +b +mjb +by +b + +odsbf +odbfs +fsdbo +bsdfo +obsfd + +tofgjlhuvmyzcnd +uyljsxtdpbewoqnvg + +bcfgaorvwqnmdup +rcvxaunwmdpszjfqgyob +fcrmabgqdwonpvue + +z +h + +cgbpk +uyzbop + +ptzqufrekvilxwmgn +qigueptylvckrnxzfhmd +nrxlezgmqoivkfupt +bpexuzmltqifgvrkns +aeglzqrbotpkvximfjnu + +cradozehb +dhslfoqrezca + +mpzkgcnbot +cemogtbpzn +lozwngjtbpcm +znlwpbgtmco + +lodrywvcxjgp +jxgyclpwrvdo +xrcpljogyvdw +pygvwrodcjxl + +bfrmhpiuwxznslcdqke +wikulxhrfdnbsmeqzc +dnhurewbcxsqzifkml +mibcendxwshkulrzqf +frnkcszlqmwbxiudeh + +pny +ypd +pyg + +msgwzuoydtaxkpqhbj +aknbtivsjgupozme + +uizgp +gpizau +gpzxu +aupzgi + +zkohbpscea +losacbgm +bogytalcs +owtysabnc + +swjkz +kszjw +zksqwj + +m +mdtqyw +bsnlkfjprv +demi +itdao + +gkwqdnaosmvyrbz +brpomnqgk +qotikclbrnemg +rkgqomnpb + +pyoclwjxrmibhgaqu +laymqhioubrpgcwxj +qbhuypxogwrjlamci +muicbghjwoyplqarx + +xfut +utfx +vfztuhxd +tuyxf +uxtf + +foabejk +wugejvkoca +qjazoxli +ahojt + +pqzk +zrkp +adihs + +xqcigryhkevpfmutwanlds +ecdqztaxonbiprugfmk +rqnpatukmefgoxdic + +ewtfcyagsizj +wyfgtviej +stejyfigrw +ctgajeyfwki +jdbeoyqhitufglpnxw + +krmsglcbi +kgbmilc +blkgicm +inxkcqglohwmb +kiblcmg + +tubipv +ejwrgfqci +nishoxzp + +hoqxjktugmrclzywedi +utgiceynvphszkmodrl +cdbihmzolufgea + +ichtmwx +cwmuvixtb + +qihgfsxnydtwcrkoeamupzvb +goizemfwhaxcdtknubypqsrv +ovshacfrekugzbwipymtxqnd +rqgntzkwxihovbedpsfumacy +oryitqesazgnckxhdvfpwmub + +qafihpdwy +saikmrbxecjgnvoy + +devizumtxonjhrkpq +zidmnptujoqhkvxre +gqjmkuohnrtxziedvp +pqoixumtdvrzjkhnbe + +fmtbrhsynpkxu +npsmubhyktfrx +sbhyxkumnprft +nhpusmfkbrxty + +je +x + +dagmxqbfvz +sxkur +xkptl +jixu + +e +e +hits +q + +tko +qtkhoy +topk +otk + +r +erh +r +r +r + +agrkjyfcw +ktryaw +whyirak + +pgzhswrvxumqlai +skgvdxwp +pgvjxdnws +wpnkgjxvs + +risotwzapm +eytfvlx + +ocdw +dowlc + +mlspy +ylpsmn + +rxf +xfr + +jaecdxiptnzrlomgwuqyhvf +mexsutcqaviywjzhgnropdl +imeufcjtvwyonxpzardlgqh + +dxqtwsvaernygbu +unceigjraxzbqwkvd + +skogcitreyx +xewqysmchvikduzj +ycxebsrlki + +gqdyaw +skxclpvq + +uja +kaju +jau + +xnjhqlyvgod +odlvnyxf +yndolkxv +vnldxyo + +ksmuqpily +oanrztfwjxvu + +gulobnahfmjdpkrqvecsz +lnymgsxrcpheqobjdavkf + +mgtdqzrebiswvcfnlopaukh +nbomqafeulrtvigdcpwszk +ginlmsraopdukxftbewqzcv +iamtqzvowldfnuscpkrgeb + +ipkonymxsvhjcu +iypevgxdhcnl +xhcinvply + +d +qbwhp +r +r + +hrdmq +qxld +hcqd +dqfc + +pqrgvxtzcbmws +xomdqytbiwzr + +eo +eo +oe +oe +oe + +dwgmk +mrwjdgk +gwmdk + +nspfzvdhocirwyebma +bfdcnzoswyermahivp +minwdycaephzsbvrfo + +iydcwfzaxlnret +qlusgcyk +lgcyjs + +tmjsecngzxfiq +vhzbyoedfu + +o +s +s + +ubfrgyp +vybfpkrg +erfybg +nbgyrf +zfwrgby + +gjnbfartdoiem +ajbtgermdqnfio +mfijcthadgnobuew diff --git a/tests/aoc-2020/input/day7.txt b/tests/aoc-2020/input/day7.txt new file mode 100644 index 00000000..d52a49d9 --- /dev/null +++ b/tests/aoc-2020/input/day7.txt @@ -0,0 +1,594 @@ +dotted salmon bags contain 2 dark lavender bags, 1 muted red bag, 1 vibrant magenta bag. +vibrant purple bags contain 1 pale cyan bag, 1 dotted lavender bag, 3 striped blue bags, 5 clear magenta bags. +vibrant fuchsia bags contain 4 posh violet bags, 3 bright aqua bags, 1 light silver bag. +mirrored purple bags contain 2 dim yellow bags, 4 dim green bags, 3 vibrant beige bags. +faded coral bags contain 1 vibrant plum bag, 3 pale gold bags, 5 dim purple bags, 1 drab teal bag. +wavy cyan bags contain 4 dark teal bags, 1 dotted magenta bag. +dotted gold bags contain 3 dotted gray bags. +shiny maroon bags contain 2 light white bags, 5 bright salmon bags. +vibrant cyan bags contain 2 dull beige bags. +clear fuchsia bags contain 5 bright bronze bags. +clear violet bags contain 4 clear white bags, 2 drab fuchsia bags, 4 plaid lavender bags, 4 drab beige bags. +wavy tomato bags contain 3 wavy yellow bags, 4 plaid maroon bags, 1 dark beige bag. +shiny indigo bags contain 4 posh aqua bags, 2 dim salmon bags, 3 dotted olive bags, 1 dull gray bag. +dotted indigo bags contain 3 muted bronze bags, 1 striped salmon bag, 5 vibrant violet bags, 3 drab crimson bags. +mirrored magenta bags contain 1 shiny aqua bag. +pale green bags contain 4 striped orange bags, 3 plaid red bags, 3 clear olive bags. +dim crimson bags contain 5 posh violet bags, 3 mirrored crimson bags, 2 striped white bags, 1 dark indigo bag. +light white bags contain 1 dark indigo bag, 1 wavy orange bag. +striped green bags contain 2 clear beige bags, 4 dim coral bags. +dotted lavender bags contain 1 striped white bag, 5 dotted coral bags, 3 striped orange bags, 1 dotted gray bag. +light purple bags contain 5 dim tomato bags, 4 dull plum bags, 1 dim green bag, 3 dotted magenta bags. +shiny violet bags contain 1 shiny white bag. +dark lime bags contain 4 mirrored crimson bags, 2 wavy crimson bags, 4 dim green bags. +dark teal bags contain 3 mirrored orange bags. +muted maroon bags contain 5 dim fuchsia bags. +posh tomato bags contain 3 bright violet bags, 3 dim crimson bags, 4 mirrored beige bags, 3 drab lime bags. +plaid violet bags contain 1 shiny tomato bag, 5 dotted gray bags, 1 muted magenta bag, 5 mirrored crimson bags. +shiny bronze bags contain 3 dim red bags, 2 drab plum bags, 3 striped yellow bags, 1 mirrored yellow bag. +muted tomato bags contain 2 vibrant maroon bags, 3 vibrant beige bags, 5 light coral bags. +muted fuchsia bags contain 2 clear violet bags, 4 shiny gray bags, 1 shiny gold bag, 3 wavy crimson bags. +pale teal bags contain 2 bright beige bags, 3 vibrant cyan bags, 4 bright salmon bags, 3 plaid red bags. +posh salmon bags contain 2 dull beige bags, 1 faded maroon bag. +dim white bags contain 2 dull tan bags, 3 dotted coral bags, 1 light silver bag, 1 dim gold bag. +posh tan bags contain 4 clear blue bags, 4 dim olive bags, 4 striped green bags. +dim lime bags contain 2 drab chartreuse bags, 5 striped magenta bags, 4 striped purple bags. +mirrored white bags contain 2 dotted white bags, 3 striped salmon bags, 3 dull green bags, 3 plaid orange bags. +shiny fuchsia bags contain 3 striped bronze bags, 1 plaid violet bag. +dull indigo bags contain 5 wavy tomato bags. +posh maroon bags contain 2 dark green bags, 4 posh red bags, 3 drab tomato bags. +clear coral bags contain 5 pale yellow bags, 2 muted green bags, 3 faded black bags, 1 striped teal bag. +posh gold bags contain 3 wavy yellow bags, 5 mirrored crimson bags, 1 dotted lavender bag, 2 plaid purple bags. +muted yellow bags contain 3 wavy tan bags, 1 dark beige bag, 3 drab lavender bags. +pale cyan bags contain 5 clear black bags, 3 dull lime bags, 3 wavy olive bags, 5 plaid indigo bags. +drab white bags contain 2 dull green bags, 3 wavy aqua bags, 4 dark indigo bags. +drab lime bags contain 2 drab aqua bags, 5 light turquoise bags. +dotted tan bags contain 1 dotted beige bag, 5 faded maroon bags, 5 light indigo bags, 3 light bronze bags. +muted crimson bags contain 5 faded gold bags. +striped turquoise bags contain 1 shiny silver bag, 4 vibrant salmon bags, 5 dotted yellow bags. +plaid yellow bags contain 2 dim crimson bags, 5 bright tan bags, 3 wavy yellow bags, 1 clear silver bag. +shiny salmon bags contain 2 vibrant yellow bags. +pale maroon bags contain 5 faded silver bags, 3 dull lavender bags, 4 dotted magenta bags. +dotted orange bags contain 4 mirrored brown bags, 2 clear fuchsia bags. +muted gray bags contain 5 dim purple bags, 3 wavy yellow bags. +vibrant gold bags contain 2 wavy maroon bags, 5 faded chartreuse bags, 3 light indigo bags, 4 dark brown bags. +bright fuchsia bags contain 4 pale crimson bags, 3 striped orange bags, 1 shiny tomato bag, 5 bright tan bags. +light cyan bags contain 1 dim teal bag, 3 wavy indigo bags. +pale olive bags contain 3 light fuchsia bags. +dim brown bags contain 2 dotted indigo bags. +mirrored silver bags contain 3 plaid violet bags. +posh cyan bags contain 5 wavy maroon bags, 4 dim gold bags. +bright turquoise bags contain 5 posh bronze bags, 4 shiny aqua bags. +faded fuchsia bags contain 3 dotted gray bags. +dull beige bags contain 3 posh bronze bags. +dark purple bags contain 4 dim salmon bags, 4 faded maroon bags, 2 drab red bags, 1 clear bronze bag. +drab tan bags contain 5 striped maroon bags. +faded green bags contain 3 dark lavender bags, 4 posh lime bags, 2 light purple bags, 2 dark plum bags. +posh indigo bags contain 4 dark tan bags, 2 dark lavender bags, 1 shiny cyan bag. +drab maroon bags contain 3 wavy red bags, 1 dim fuchsia bag, 5 mirrored indigo bags, 2 drab lavender bags. +dim magenta bags contain 4 striped orange bags. +striped teal bags contain 2 dark lime bags. +plaid green bags contain 5 mirrored salmon bags, 4 mirrored brown bags, 2 dark lavender bags, 4 faded indigo bags. +dull blue bags contain 3 faded lime bags, 2 faded violet bags, 4 dull tan bags, 1 shiny tan bag. +muted turquoise bags contain 5 dim silver bags, 4 wavy crimson bags. +dull teal bags contain 1 faded blue bag, 3 light violet bags, 3 faded black bags. +mirrored salmon bags contain 4 muted magenta bags, 3 dotted tomato bags, 2 light cyan bags, 2 vibrant lavender bags. +shiny coral bags contain 1 striped teal bag, 1 drab lime bag, 5 mirrored red bags. +muted chartreuse bags contain 2 striped white bags, 3 bright turquoise bags, 2 faded silver bags. +mirrored green bags contain 2 bright maroon bags. +light brown bags contain 2 clear bronze bags, 4 dark lime bags, 3 muted teal bags, 5 wavy yellow bags. +vibrant indigo bags contain 3 dotted bronze bags. +light coral bags contain 2 dotted bronze bags. +dotted turquoise bags contain 3 plaid red bags, 3 shiny fuchsia bags, 4 faded lime bags. +dark white bags contain 1 dull blue bag, 5 shiny cyan bags, 3 dark beige bags, 2 mirrored brown bags. +pale purple bags contain 5 faded gold bags, 2 drab maroon bags. +wavy beige bags contain 3 faded violet bags, 4 mirrored silver bags, 4 clear gray bags, 2 dotted tomato bags. +light teal bags contain 4 bright magenta bags, 2 drab coral bags. +bright tomato bags contain 3 mirrored crimson bags, 1 muted blue bag, 4 dim brown bags. +plaid turquoise bags contain 4 vibrant blue bags, 1 wavy chartreuse bag, 2 pale magenta bags. +faded tomato bags contain 3 light salmon bags, 2 wavy chartreuse bags. +faded salmon bags contain 5 dark aqua bags, 4 faded bronze bags, 5 bright crimson bags. +light salmon bags contain 2 mirrored silver bags, 3 dotted coral bags, 3 wavy crimson bags. +mirrored lavender bags contain 4 shiny silver bags, 1 wavy crimson bag. +vibrant plum bags contain 5 light orange bags, 4 dull lime bags, 2 dim aqua bags, 5 shiny violet bags. +vibrant tan bags contain 1 drab salmon bag, 2 dull beige bags, 3 dotted bronze bags. +faded red bags contain 3 light indigo bags, 2 dotted tomato bags. +bright purple bags contain 3 light tomato bags, 3 clear gold bags. +plaid magenta bags contain 5 muted orange bags, 3 pale plum bags, 5 faded plum bags. +wavy tan bags contain 1 dull lavender bag. +faded olive bags contain 5 mirrored silver bags. +plaid white bags contain 4 bright bronze bags, 2 dotted cyan bags, 2 dark lavender bags, 5 shiny lavender bags. +striped aqua bags contain 5 light salmon bags. +drab tomato bags contain 1 dark lime bag, 2 muted magenta bags, 5 clear gray bags, 3 dotted gray bags. +clear tomato bags contain 5 plaid bronze bags. +posh teal bags contain 1 plaid maroon bag, 3 light tan bags, 1 clear crimson bag, 5 vibrant aqua bags. +dim tan bags contain 2 drab fuchsia bags, 3 dark beige bags, 3 plaid green bags. +dotted lime bags contain 4 dim red bags. +mirrored beige bags contain 1 bright orange bag, 3 light purple bags. +plaid silver bags contain 2 bright gold bags. +faded orange bags contain 5 faded plum bags. +dim indigo bags contain 4 muted orange bags, 5 vibrant tomato bags. +shiny blue bags contain 3 drab crimson bags, 2 dim green bags, 1 clear violet bag. +dull olive bags contain 2 plaid lime bags, 5 muted maroon bags, 4 shiny crimson bags, 3 dim plum bags. +striped maroon bags contain 1 dim tomato bag, 2 dotted tomato bags, 1 muted magenta bag, 5 faded maroon bags. +dull green bags contain 4 light salmon bags, 1 dim green bag. +vibrant crimson bags contain 4 clear plum bags, 2 faded white bags, 4 wavy crimson bags. +striped chartreuse bags contain 2 plaid lavender bags. +bright chartreuse bags contain 2 vibrant orange bags. +drab lavender bags contain 4 dotted coral bags. +dull crimson bags contain 2 faded silver bags, 2 bright magenta bags. +striped magenta bags contain 4 dull crimson bags, 4 faded maroon bags. +clear bronze bags contain 1 bright bronze bag, 2 shiny red bags. +plaid tan bags contain 5 pale silver bags, 5 muted teal bags, 3 faded beige bags, 2 faded chartreuse bags. +dim black bags contain 2 faded indigo bags. +shiny black bags contain 3 dotted bronze bags, 5 clear olive bags, 3 dark orange bags, 4 pale coral bags. +striped gold bags contain 3 dotted coral bags, 4 faded orange bags, 2 striped purple bags, 4 light cyan bags. +drab chartreuse bags contain 4 dull crimson bags. +bright yellow bags contain 3 wavy crimson bags, 4 bright turquoise bags, 3 plaid red bags. +dark orange bags contain 3 wavy yellow bags. +clear salmon bags contain 5 wavy turquoise bags, 4 shiny aqua bags, 1 shiny brown bag, 1 vibrant tomato bag. +plaid fuchsia bags contain 1 posh olive bag. +wavy magenta bags contain 5 vibrant beige bags, 5 faded chartreuse bags, 5 light purple bags, 4 wavy indigo bags. +dull gold bags contain 2 shiny bronze bags, 4 plaid beige bags, 4 mirrored silver bags, 2 bright lavender bags. +drab magenta bags contain 1 posh red bag. +shiny silver bags contain 4 dark lavender bags, 2 dull tan bags. +shiny crimson bags contain 3 plaid violet bags, 4 muted purple bags. +posh black bags contain 2 dotted magenta bags, 4 dotted gray bags. +vibrant salmon bags contain 1 clear silver bag. +dotted tomato bags contain 4 wavy crimson bags, 3 faded plum bags, 4 muted magenta bags. +dark turquoise bags contain 1 dim beige bag, 3 dotted coral bags. +pale orange bags contain 2 striped silver bags, 1 dotted salmon bag, 3 dim black bags, 4 posh turquoise bags. +mirrored indigo bags contain 5 posh yellow bags. +muted lavender bags contain 5 striped olive bags, 1 muted indigo bag. +light yellow bags contain 5 dark chartreuse bags. +drab bronze bags contain 3 clear beige bags, 3 bright purple bags, 3 bright brown bags. +mirrored blue bags contain 5 dotted bronze bags, 1 dark green bag, 5 clear silver bags, 5 dim maroon bags. +wavy violet bags contain 4 light tan bags, 1 vibrant lavender bag. +clear red bags contain 4 faded orange bags, 1 drab gold bag, 4 dim teal bags, 4 dotted indigo bags. +striped indigo bags contain 5 dim indigo bags. +striped olive bags contain 3 dotted green bags, 4 mirrored cyan bags. +dim fuchsia bags contain 3 vibrant gray bags, 5 wavy brown bags, 2 muted beige bags. +plaid plum bags contain 3 shiny tomato bags, 4 striped orange bags. +striped white bags contain 1 plaid red bag. +mirrored coral bags contain 5 drab teal bags, 4 dotted coral bags, 4 striped chartreuse bags, 5 dotted gold bags. +dull bronze bags contain 4 dim olive bags, 5 posh turquoise bags, 2 clear gold bags. +pale white bags contain 3 vibrant gray bags, 4 wavy coral bags, 5 drab purple bags. +drab green bags contain 1 dim teal bag, 1 faded bronze bag, 3 clear silver bags. +dotted black bags contain 3 drab tan bags, 2 vibrant orange bags, 3 striped maroon bags. +light gold bags contain 5 posh olive bags, 3 striped orange bags, 3 dull orange bags. +pale tan bags contain 1 mirrored fuchsia bag, 4 light silver bags, 5 dim plum bags. +plaid lavender bags contain 1 dim teal bag, 5 shiny aqua bags, 5 wavy crimson bags. +wavy lime bags contain 1 pale chartreuse bag, 5 mirrored white bags, 4 faded olive bags. +bright crimson bags contain 1 plaid green bag. +pale fuchsia bags contain 4 light aqua bags. +striped crimson bags contain 4 shiny plum bags, 3 dull violet bags, 5 clear tan bags. +mirrored fuchsia bags contain 3 posh red bags, 3 plaid violet bags, 5 shiny brown bags, 5 striped chartreuse bags. +faded cyan bags contain 3 striped yellow bags, 3 clear indigo bags. +mirrored plum bags contain 2 vibrant silver bags. +dull turquoise bags contain 2 plaid white bags, 5 striped salmon bags, 5 clear purple bags. +dim orange bags contain 5 dim black bags. +dull orange bags contain 3 dotted magenta bags, 2 mirrored crimson bags, 3 striped bronze bags. +dark gray bags contain 4 dotted crimson bags, 2 vibrant salmon bags. +drab orange bags contain 5 dotted gray bags, 5 muted maroon bags, 5 faded aqua bags, 2 pale maroon bags. +striped bronze bags contain 3 striped white bags, 5 striped orange bags. +light bronze bags contain 2 plaid red bags, 2 faded olive bags. +drab olive bags contain 2 striped salmon bags, 3 drab white bags, 4 pale silver bags. +bright cyan bags contain 5 muted blue bags. +drab black bags contain 1 shiny blue bag, 1 drab yellow bag, 5 muted tan bags, 2 drab violet bags. +shiny green bags contain 5 dim purple bags, 1 dotted crimson bag. +wavy blue bags contain 3 shiny white bags. +pale lime bags contain 1 dotted maroon bag. +dotted red bags contain 1 dotted bronze bag, 1 vibrant lime bag, 4 clear plum bags. +faded bronze bags contain 4 pale magenta bags, 1 faded black bag, 1 faded orange bag, 3 dark crimson bags. +dark green bags contain 1 striped magenta bag. +faded blue bags contain 2 dim maroon bags. +dim violet bags contain 4 posh yellow bags, 5 dim lime bags, 5 faded olive bags. +dark tan bags contain 2 mirrored green bags. +dim teal bags contain 5 mirrored yellow bags, 2 dull tan bags, 2 vibrant lavender bags, 4 clear lime bags. +plaid crimson bags contain 3 striped black bags, 1 faded plum bag, 3 muted red bags. +clear white bags contain 1 shiny gold bag. +dim silver bags contain 5 dull tan bags. +dark cyan bags contain 2 clear black bags, 5 plaid yellow bags, 2 posh coral bags. +dull violet bags contain 5 wavy teal bags, 5 shiny white bags. +muted coral bags contain 5 faded violet bags, 2 drab red bags, 3 muted olive bags, 4 mirrored tomato bags. +vibrant white bags contain 3 muted brown bags, 4 mirrored red bags, 4 dull orange bags, 4 dark crimson bags. +posh red bags contain 2 clear gray bags, 2 bright turquoise bags. +wavy chartreuse bags contain 5 light tomato bags, 5 posh black bags. +striped black bags contain 1 faded green bag, 1 wavy green bag, 4 wavy orange bags. +drab indigo bags contain 4 clear cyan bags, 4 mirrored crimson bags, 4 clear silver bags. +pale gold bags contain 1 dim lime bag. +dark olive bags contain 5 bright white bags, 5 clear lavender bags, 2 vibrant coral bags. +muted salmon bags contain 4 drab beige bags, 3 plaid violet bags, 4 mirrored brown bags, 3 dark lime bags. +posh gray bags contain 1 clear beige bag, 4 vibrant blue bags, 1 shiny aqua bag, 5 dim tan bags. +bright white bags contain 5 muted bronze bags, 5 clear cyan bags. +dull white bags contain 1 vibrant tomato bag. +striped tan bags contain 4 mirrored brown bags, 5 faded chartreuse bags. +wavy teal bags contain 3 plaid red bags. +faded purple bags contain 4 muted orange bags, 3 clear salmon bags, 5 drab cyan bags. +dotted yellow bags contain 4 light indigo bags, 5 drab violet bags, 3 dull tan bags, 3 bright lime bags. +wavy plum bags contain 2 dim aqua bags, 5 dark brown bags, 1 bright gold bag, 2 dull orange bags. +muted blue bags contain 5 plaid tan bags, 4 dim salmon bags, 5 striped tomato bags. +dim green bags contain no other bags. +light lime bags contain 3 mirrored orange bags, 2 muted red bags, 1 dim black bag, 4 posh maroon bags. +mirrored brown bags contain 4 dotted gray bags, 3 clear lime bags, 2 dim green bags. +drab fuchsia bags contain 5 mirrored yellow bags, 5 plaid plum bags. +drab gray bags contain 2 dim violet bags, 4 posh purple bags. +vibrant teal bags contain 4 pale tomato bags, 2 posh lime bags, 2 mirrored silver bags, 1 wavy crimson bag. +dotted plum bags contain 5 bright gold bags. +shiny gold bags contain 4 shiny tomato bags, 5 wavy indigo bags. +bright bronze bags contain 2 faded maroon bags, 2 dim white bags, 5 drab violet bags. +drab yellow bags contain 4 mirrored green bags, 5 faded fuchsia bags, 1 drab turquoise bag. +dark bronze bags contain 5 muted salmon bags, 3 posh cyan bags, 2 shiny tan bags. +light magenta bags contain 3 dark silver bags, 2 striped tan bags. +pale yellow bags contain 5 drab tomato bags, 3 striped orange bags, 4 striped maroon bags. +shiny cyan bags contain 2 light tomato bags, 3 clear purple bags, 2 shiny tan bags, 3 dull tan bags. +pale gray bags contain 2 drab purple bags, 5 dotted turquoise bags, 3 pale salmon bags. +mirrored cyan bags contain 4 faded chartreuse bags. +dotted bronze bags contain 2 faded silver bags. +faded beige bags contain 1 bright red bag, 3 dotted red bags, 2 striped lime bags. +dotted beige bags contain 4 muted turquoise bags, 1 dull beige bag, 3 bright gold bags. +drab plum bags contain 4 clear chartreuse bags. +pale blue bags contain 1 dim chartreuse bag, 1 dark lavender bag, 1 drab tan bag. +faded teal bags contain 1 vibrant tan bag, 1 dim tan bag, 3 dull gray bags, 4 plaid red bags. +plaid beige bags contain 3 plaid tomato bags. +dotted chartreuse bags contain 1 pale maroon bag. +bright gray bags contain 2 bright coral bags, 3 bright turquoise bags, 4 posh tan bags. +bright olive bags contain 1 dotted bronze bag, 4 mirrored yellow bags, 4 light bronze bags. +dotted olive bags contain 5 clear purple bags, 5 muted bronze bags, 5 vibrant tomato bags. +pale tomato bags contain 4 clear gold bags, 4 clear tomato bags. +clear gold bags contain 1 striped lime bag, 1 striped chartreuse bag, 2 muted fuchsia bags, 5 clear salmon bags. +dotted gray bags contain no other bags. +striped brown bags contain 3 pale maroon bags, 5 faded gold bags, 4 wavy yellow bags, 3 bright turquoise bags. +shiny lime bags contain 4 pale violet bags, 4 clear violet bags. +mirrored tan bags contain 1 vibrant magenta bag, 3 mirrored violet bags, 5 faded plum bags. +dull maroon bags contain 5 posh salmon bags, 5 dull coral bags, 2 plaid plum bags, 3 striped teal bags. +dim purple bags contain 1 light tomato bag, 3 shiny violet bags. +bright brown bags contain 1 shiny aqua bag, 1 shiny lavender bag, 1 drab fuchsia bag, 3 faded olive bags. +light maroon bags contain 4 mirrored brown bags. +pale violet bags contain 4 wavy turquoise bags, 5 dull orange bags, 4 dotted black bags, 5 muted fuchsia bags. +mirrored black bags contain 3 dotted silver bags, 2 bright crimson bags. +drab aqua bags contain 3 plaid red bags, 1 plaid violet bag, 5 dim tomato bags. +clear green bags contain 4 dark coral bags. +mirrored aqua bags contain 4 shiny crimson bags, 4 wavy bronze bags. +pale coral bags contain 2 wavy olive bags, 2 muted silver bags, 4 dim tan bags. +mirrored gray bags contain 5 clear plum bags, 5 dark yellow bags. +light blue bags contain 3 dull bronze bags, 3 dotted plum bags. +dark silver bags contain 2 plaid chartreuse bags, 5 plaid lavender bags, 1 wavy indigo bag, 4 dark brown bags. +posh silver bags contain 4 shiny lavender bags. +shiny orange bags contain 4 light magenta bags. +dark blue bags contain 5 pale purple bags. +wavy white bags contain 1 posh olive bag, 1 dotted fuchsia bag, 4 muted maroon bags. +striped orange bags contain 2 faded plum bags. +dull lime bags contain 1 pale yellow bag, 1 clear turquoise bag, 5 faded silver bags, 4 dim beige bags. +dull red bags contain 1 bright aqua bag, 3 light maroon bags, 5 light tomato bags. +light tomato bags contain 3 dull crimson bags, 1 dim beige bag. +bright blue bags contain 3 plaid olive bags. +bright red bags contain 4 muted teal bags, 5 dotted magenta bags. +striped gray bags contain 2 dotted purple bags, 4 dull green bags, 4 dull salmon bags, 4 muted silver bags. +drab salmon bags contain 4 mirrored indigo bags, 5 mirrored silver bags, 5 shiny cyan bags, 1 plaid brown bag. +posh olive bags contain 3 faded silver bags, 5 plaid violet bags, 2 striped bronze bags. +dim salmon bags contain 5 vibrant lavender bags. +mirrored orange bags contain 2 bright white bags, 5 plaid orange bags. +posh fuchsia bags contain 5 vibrant coral bags, 2 shiny plum bags, 5 pale silver bags. +wavy fuchsia bags contain 5 posh cyan bags, 2 bright silver bags, 1 wavy tomato bag, 1 wavy plum bag. +clear olive bags contain 4 pale maroon bags, 2 muted bronze bags, 4 mirrored crimson bags, 2 dull blue bags. +clear blue bags contain 5 shiny white bags, 5 plaid lime bags. +dotted coral bags contain no other bags. +clear black bags contain 4 dull beige bags, 2 mirrored crimson bags, 2 dim beige bags. +mirrored turquoise bags contain 2 light green bags, 4 dull lime bags, 2 drab olive bags, 3 drab purple bags. +muted teal bags contain 2 dim gold bags, 1 light salmon bag, 3 dark crimson bags, 3 muted olive bags. +clear gray bags contain 2 dotted coral bags, 5 shiny tomato bags. +vibrant black bags contain 2 dull blue bags, 1 light magenta bag. +clear yellow bags contain 3 vibrant yellow bags, 2 plaid red bags, 1 dull plum bag, 4 faded violet bags. +dull fuchsia bags contain 4 dim maroon bags, 4 wavy plum bags, 5 dim teal bags. +mirrored gold bags contain 4 mirrored brown bags, 3 dotted coral bags, 4 faded plum bags, 1 mirrored indigo bag. +faded lime bags contain 3 plaid violet bags, 2 drab tan bags. +wavy olive bags contain 3 muted silver bags, 1 pale maroon bag, 5 posh silver bags. +pale bronze bags contain 2 striped purple bags, 5 bright magenta bags, 4 pale crimson bags. +posh crimson bags contain 4 mirrored purple bags, 2 shiny silver bags, 4 bright tan bags. +clear plum bags contain 1 mirrored indigo bag, 4 clear purple bags, 2 dull blue bags, 5 striped bronze bags. +vibrant chartreuse bags contain 5 vibrant yellow bags, 1 faded red bag. +plaid red bags contain no other bags. +dim maroon bags contain 2 pale yellow bags, 4 dotted cyan bags. +pale silver bags contain 2 dark crimson bags. +bright magenta bags contain 5 plaid red bags, 4 faded maroon bags. +dark crimson bags contain 2 bright magenta bags, 1 mirrored silver bag, 2 mirrored brown bags, 1 shiny lavender bag. +dull yellow bags contain 1 dull salmon bag. +dark maroon bags contain 5 muted turquoise bags. +clear indigo bags contain 5 posh purple bags, 3 striped magenta bags. +shiny olive bags contain 3 drab yellow bags. +vibrant bronze bags contain 4 plaid indigo bags. +light plum bags contain 5 faded aqua bags. +dim lavender bags contain 3 drab purple bags, 2 clear salmon bags, 1 wavy bronze bag, 1 plaid tan bag. +mirrored chartreuse bags contain 3 wavy plum bags, 2 muted tan bags. +bright teal bags contain 2 bright lavender bags, 5 plaid plum bags, 3 clear bronze bags. +dull tan bags contain 4 clear gray bags. +shiny magenta bags contain 2 plaid gold bags, 2 dotted turquoise bags, 4 muted teal bags, 3 shiny gold bags. +clear aqua bags contain 4 dim cyan bags, 3 dim plum bags, 5 dim violet bags, 1 plaid yellow bag. +clear tan bags contain 1 shiny brown bag. +faded lavender bags contain 3 faded white bags, 1 faded purple bag. +plaid maroon bags contain 5 plaid orange bags, 4 striped green bags, 2 striped gold bags, 5 bright bronze bags. +wavy lavender bags contain 5 dim black bags, 5 clear fuchsia bags. +plaid olive bags contain 3 dotted crimson bags, 2 pale plum bags, 3 bright orange bags, 1 clear coral bag. +shiny lavender bags contain 3 faded plum bags, 2 mirrored crimson bags, 5 striped orange bags, 5 bright magenta bags. +plaid chartreuse bags contain 5 clear silver bags, 5 pale crimson bags. +bright coral bags contain 4 vibrant orange bags. +wavy yellow bags contain 3 dull plum bags, 4 bright yellow bags, 5 mirrored violet bags, 3 plaid red bags. +dark chartreuse bags contain 4 striped bronze bags, 2 bright tan bags. +mirrored tomato bags contain 1 clear yellow bag, 1 dark lime bag, 2 mirrored silver bags. +plaid gray bags contain 4 muted cyan bags, 4 dark silver bags, 1 wavy orange bag, 4 muted tomato bags. +mirrored red bags contain 5 pale crimson bags, 5 light cyan bags, 1 posh yellow bag. +vibrant silver bags contain 2 dull brown bags, 1 vibrant orange bag, 5 striped red bags. +plaid purple bags contain 2 striped maroon bags, 1 faded olive bag. +dull silver bags contain 4 shiny lavender bags, 5 plaid fuchsia bags, 1 plaid plum bag, 2 light cyan bags. +dark plum bags contain 2 vibrant gold bags, 4 plaid brown bags, 1 drab teal bag, 4 dotted yellow bags. +mirrored teal bags contain 3 drab orange bags, 4 shiny fuchsia bags, 4 mirrored lavender bags, 1 clear brown bag. +light red bags contain 5 striped violet bags. +shiny aqua bags contain 4 wavy indigo bags, 3 posh olive bags, 2 clear gray bags, 2 dim tomato bags. +dull magenta bags contain 1 bright crimson bag, 1 bright bronze bag, 2 drab gold bags, 2 clear lavender bags. +muted gold bags contain 1 striped chartreuse bag, 3 posh olive bags. +dark brown bags contain 1 bright yellow bag. +dull brown bags contain 5 dark brown bags, 1 dim gold bag. +shiny chartreuse bags contain 1 shiny aqua bag, 5 faded chartreuse bags, 4 wavy beige bags. +vibrant maroon bags contain 1 dotted yellow bag, 2 striped green bags, 2 muted olive bags, 2 muted turquoise bags. +faded maroon bags contain 1 striped bronze bag, 5 dotted coral bags, 4 dim green bags, 1 faded plum bag. +wavy salmon bags contain 1 dim white bag, 4 clear purple bags, 5 dark fuchsia bags, 5 vibrant cyan bags. +light beige bags contain 3 dull lime bags, 1 plaid lavender bag. +plaid teal bags contain 2 muted black bags, 2 dull salmon bags, 5 faded red bags, 2 muted turquoise bags. +plaid cyan bags contain 5 faded maroon bags, 2 posh chartreuse bags. +dim chartreuse bags contain 5 muted red bags, 4 dark lime bags. +clear magenta bags contain 1 clear tomato bag, 1 striped orange bag, 3 striped chartreuse bags. +dotted blue bags contain 5 plaid green bags, 3 mirrored crimson bags, 4 dotted magenta bags, 3 clear bronze bags. +clear silver bags contain 4 vibrant lavender bags, 1 wavy turquoise bag, 2 posh purple bags, 5 dull blue bags. +posh beige bags contain 4 muted aqua bags, 3 wavy orange bags, 1 muted coral bag. +dim coral bags contain 1 clear purple bag, 2 plaid purple bags, 5 light gold bags. +faded white bags contain 2 striped orange bags, 3 posh silver bags, 4 shiny tan bags, 5 faded green bags. +pale aqua bags contain 5 shiny tan bags, 5 drab violet bags. +clear brown bags contain 5 shiny tomato bags. +faded tan bags contain 1 pale gray bag, 2 dull beige bags, 3 wavy teal bags, 1 bright maroon bag. +striped silver bags contain 3 shiny green bags. +vibrant brown bags contain 5 shiny aqua bags, 2 pale violet bags, 5 drab indigo bags. +dark yellow bags contain 1 wavy white bag, 3 posh violet bags, 4 bright magenta bags. +dull gray bags contain 3 dark silver bags, 3 mirrored green bags. +dark violet bags contain 2 dark maroon bags, 5 dull aqua bags. +muted brown bags contain 5 dim aqua bags, 3 dim teal bags, 4 faded olive bags, 1 plaid purple bag. +posh chartreuse bags contain 3 dark tan bags, 1 striped salmon bag, 2 dark lime bags, 5 vibrant beige bags. +mirrored maroon bags contain 1 dark red bag. +faded yellow bags contain 5 mirrored beige bags, 1 drab chartreuse bag, 3 vibrant lavender bags. +dotted aqua bags contain 4 vibrant lavender bags, 4 shiny fuchsia bags. +bright maroon bags contain 5 faded maroon bags, 2 dark lime bags, 4 dim beige bags. +dark salmon bags contain 5 clear tan bags. +wavy bronze bags contain 3 dark beige bags. +wavy crimson bags contain no other bags. +drab gold bags contain 2 faded violet bags, 4 faded silver bags. +dark black bags contain 3 wavy bronze bags, 2 dark aqua bags, 4 dotted beige bags. +striped lavender bags contain 2 wavy aqua bags. +vibrant red bags contain 1 plaid aqua bag. +shiny yellow bags contain 5 clear silver bags, 2 dull magenta bags, 5 clear turquoise bags. +dull chartreuse bags contain 5 light tan bags. +bright beige bags contain 2 dim tomato bags. +mirrored yellow bags contain 5 drab aqua bags, 5 mirrored silver bags, 3 dark lime bags. +striped beige bags contain 4 dim white bags. +muted orange bags contain 3 drab beige bags, 5 faded olive bags. +drab turquoise bags contain 1 light green bag, 1 drab tomato bag, 4 clear purple bags. +plaid salmon bags contain 3 posh gray bags, 1 dim beige bag, 1 plaid brown bag. +faded gray bags contain 3 plaid fuchsia bags, 5 plaid magenta bags, 5 plaid white bags, 1 dull beige bag. +posh aqua bags contain 2 mirrored turquoise bags. +mirrored crimson bags contain no other bags. +vibrant magenta bags contain 1 dull purple bag, 4 shiny red bags, 5 drab chartreuse bags, 4 bright red bags. +striped yellow bags contain 1 shiny tan bag. +vibrant orange bags contain 4 plaid silver bags, 5 dim teal bags, 1 striped maroon bag, 3 plaid red bags. +dark indigo bags contain 3 drab purple bags. +shiny gray bags contain 1 wavy yellow bag. +faded plum bags contain no other bags. +dim blue bags contain 2 dotted crimson bags, 5 muted chartreuse bags, 3 dark silver bags, 4 vibrant lime bags. +muted white bags contain 4 muted teal bags, 3 posh purple bags, 1 dull lavender bag, 5 pale crimson bags. +muted lime bags contain 1 shiny turquoise bag, 2 faded indigo bags, 2 vibrant silver bags, 1 pale turquoise bag. +posh coral bags contain 5 faded violet bags. +dotted fuchsia bags contain 1 clear tan bag, 1 striped lavender bag. +wavy brown bags contain 2 dim aqua bags. +posh brown bags contain 1 shiny cyan bag, 5 plaid orange bags, 3 light coral bags. +drab purple bags contain 5 faded orange bags. +muted tan bags contain 2 wavy teal bags, 3 dim salmon bags, 1 bright gold bag, 3 clear gray bags. +dim yellow bags contain 1 vibrant gray bag, 4 vibrant lavender bags, 1 muted magenta bag. +pale salmon bags contain 2 vibrant beige bags, 3 bright maroon bags. +faded turquoise bags contain 4 plaid purple bags, 2 light tomato bags, 3 light salmon bags. +clear teal bags contain 4 muted yellow bags, 3 dim beige bags, 5 faded tomato bags, 1 dim red bag. +vibrant olive bags contain 3 muted lime bags, 5 shiny blue bags, 3 light gold bags, 3 dark olive bags. +dim beige bags contain 1 light cyan bag, 3 faded plum bags. +dull black bags contain 2 striped black bags, 5 wavy brown bags, 1 bright red bag, 1 drab teal bag. +pale turquoise bags contain 5 vibrant violet bags, 3 dotted fuchsia bags, 2 striped blue bags, 4 posh purple bags. +wavy red bags contain 3 drab teal bags. +faded gold bags contain 5 dull lavender bags. +faded black bags contain 5 wavy turquoise bags, 5 mirrored crimson bags. +bright orange bags contain 2 striped maroon bags, 4 light cyan bags, 5 light silver bags, 5 wavy indigo bags. +drab teal bags contain 4 wavy aqua bags, 5 light bronze bags, 1 drab red bag. +dull salmon bags contain 4 dull orange bags. +bright lavender bags contain 2 plaid silver bags, 3 bright crimson bags. +drab cyan bags contain 2 bright bronze bags, 5 bright crimson bags, 2 wavy yellow bags. +dull plum bags contain 3 shiny lavender bags, 2 bright magenta bags, 2 mirrored crimson bags, 4 mirrored silver bags. +dotted teal bags contain 3 muted yellow bags, 3 dotted turquoise bags, 5 mirrored white bags. +vibrant turquoise bags contain 5 clear magenta bags, 5 dark beige bags, 2 vibrant tan bags, 3 plaid blue bags. +pale crimson bags contain 2 bright turquoise bags, 4 dark lime bags. +pale plum bags contain 1 shiny chartreuse bag, 3 vibrant gold bags, 5 plaid violet bags, 5 dim salmon bags. +mirrored lime bags contain 2 plaid green bags. +pale lavender bags contain 5 dotted gold bags, 1 striped maroon bag, 3 shiny tan bags, 5 drab white bags. +muted olive bags contain 3 drab crimson bags, 2 dotted gray bags, 5 dotted tomato bags, 3 posh bronze bags. +drab brown bags contain 3 dull orange bags, 4 posh gold bags, 2 pale crimson bags, 1 plaid white bag. +bright tan bags contain 1 dark white bag, 5 bright turquoise bags. +faded indigo bags contain 3 pale yellow bags, 2 mirrored brown bags, 1 shiny gray bag, 5 bright turquoise bags. +dark aqua bags contain 1 posh gray bag, 4 striped coral bags, 2 posh olive bags, 2 bright white bags. +light tan bags contain 2 faded purple bags, 5 muted fuchsia bags. +dark magenta bags contain 4 posh silver bags, 5 pale plum bags, 5 muted violet bags, 2 faded green bags. +clear maroon bags contain 3 muted maroon bags, 1 clear olive bag, 2 faded black bags. +posh purple bags contain 4 faded orange bags, 4 shiny salmon bags. +bright gold bags contain 1 dull crimson bag, 1 shiny lavender bag. +dull purple bags contain 3 clear silver bags, 1 drab aqua bag, 3 wavy beige bags. +muted cyan bags contain 1 plaid green bag. +vibrant yellow bags contain 3 faded plum bags, 4 vibrant lavender bags, 2 muted magenta bags. +vibrant green bags contain 5 dim chartreuse bags, 2 posh lavender bags. +plaid bronze bags contain 4 dim tomato bags, 3 shiny silver bags. +striped blue bags contain 5 vibrant gold bags. +plaid coral bags contain 4 faded purple bags, 3 drab turquoise bags, 1 light teal bag, 2 posh indigo bags. +posh turquoise bags contain 5 posh cyan bags, 5 mirrored violet bags. +faded crimson bags contain 2 plaid salmon bags, 1 striped magenta bag, 1 striped maroon bag. +striped purple bags contain 1 drab violet bag, 2 pale maroon bags, 2 drab beige bags, 4 faded maroon bags. +clear orange bags contain 5 dotted red bags, 4 mirrored red bags. +striped fuchsia bags contain 2 bright tomato bags, 4 dull magenta bags. +wavy purple bags contain 5 wavy olive bags, 3 shiny silver bags. +dotted crimson bags contain 1 striped teal bag, 5 shiny tomato bags. +dull lavender bags contain 1 dotted tomato bag, 3 wavy indigo bags, 1 faded silver bag. +dotted magenta bags contain 3 dotted coral bags. +drab silver bags contain 5 dark indigo bags, 4 bright bronze bags, 1 dim lime bag, 3 bright aqua bags. +clear cyan bags contain 1 bright maroon bag. +shiny beige bags contain 2 plaid beige bags, 2 striped magenta bags, 4 drab yellow bags, 4 muted yellow bags. +dim turquoise bags contain 2 dull tan bags. +drab coral bags contain 4 striped bronze bags, 3 dull orange bags, 5 plaid silver bags. +light lavender bags contain 1 wavy plum bag, 4 posh purple bags. +posh yellow bags contain 3 dark lime bags, 3 light cyan bags, 4 dull crimson bags. +posh violet bags contain 2 faded chartreuse bags. +shiny teal bags contain 5 mirrored salmon bags, 1 wavy plum bag, 3 posh purple bags, 2 posh cyan bags. +vibrant lime bags contain 1 dotted tomato bag, 1 drab fuchsia bag, 1 mirrored brown bag. +dark fuchsia bags contain 1 vibrant blue bag. +bright green bags contain 4 dark purple bags, 4 bright tan bags, 5 drab turquoise bags. +dull coral bags contain 2 dotted tomato bags. +posh white bags contain 3 dull bronze bags, 1 faded salmon bag, 3 pale tomato bags, 3 vibrant salmon bags. +plaid black bags contain 4 vibrant aqua bags, 2 shiny teal bags. +posh lavender bags contain 4 wavy beige bags, 1 dim silver bag, 2 faded white bags. +posh orange bags contain 4 dim orange bags, 3 faded chartreuse bags. +plaid brown bags contain 5 shiny fuchsia bags, 5 striped magenta bags, 2 wavy coral bags, 1 vibrant beige bag. +shiny plum bags contain 3 light green bags, 4 bright orange bags. +dim aqua bags contain 4 faded gold bags, 1 dotted lavender bag, 3 light gold bags, 4 shiny aqua bags. +wavy gold bags contain 4 clear violet bags, 5 dim red bags, 5 drab crimson bags, 2 dull coral bags. +vibrant tomato bags contain 3 faded olive bags. +bright silver bags contain 2 dull lavender bags, 4 faded aqua bags, 4 dim coral bags. +wavy turquoise bags contain 4 dull lavender bags, 1 drab aqua bag. +wavy aqua bags contain 3 wavy yellow bags. +light indigo bags contain 5 dim beige bags, 3 drab fuchsia bags, 1 plaid violet bag, 5 bright yellow bags. +striped red bags contain 3 bright violet bags, 5 dark indigo bags, 5 dim silver bags. +posh lime bags contain 5 striped teal bags, 3 dark brown bags, 4 bright crimson bags, 2 posh violet bags. +faded magenta bags contain 5 light gold bags, 1 posh indigo bag, 3 plaid lime bags. +vibrant lavender bags contain 5 faded maroon bags, 3 striped orange bags, 3 dull crimson bags. +clear purple bags contain 5 dark green bags, 3 light cyan bags, 3 clear white bags, 4 pale silver bags. +muted purple bags contain 5 drab fuchsia bags, 1 vibrant salmon bag, 5 bright yellow bags. +bright lime bags contain 5 vibrant violet bags, 5 wavy maroon bags. +bright black bags contain 5 dark silver bags, 2 vibrant green bags. +muted magenta bags contain no other bags. +striped tomato bags contain 4 shiny gold bags. +pale black bags contain 3 dull brown bags, 2 wavy coral bags, 2 posh purple bags, 4 faded beige bags. +dim red bags contain 1 dotted tomato bag, 2 wavy beige bags. +light black bags contain 4 dull maroon bags, 3 dotted aqua bags, 3 drab purple bags. +shiny turquoise bags contain 3 dull blue bags, 4 posh bronze bags. +pale indigo bags contain 4 dotted tomato bags. +shiny white bags contain 5 vibrant tomato bags, 4 dotted magenta bags, 3 dull aqua bags. +dark lavender bags contain 4 faded orange bags. +shiny brown bags contain 3 bright orange bags, 2 dotted crimson bags, 2 wavy aqua bags. +light chartreuse bags contain 1 muted lavender bag. +faded aqua bags contain 4 dull green bags, 4 faded violet bags, 4 clear gray bags. +light olive bags contain 4 shiny purple bags, 3 shiny plum bags. +wavy indigo bags contain 3 dim green bags, 5 shiny lavender bags, 3 posh olive bags, 1 dull crimson bag. +dull tomato bags contain 3 light coral bags, 2 light cyan bags, 3 plaid silver bags. +clear turquoise bags contain 1 wavy crimson bag, 4 dim tomato bags. +dim tomato bags contain 5 shiny lavender bags, 2 dim gold bags. +wavy black bags contain 4 wavy chartreuse bags, 4 dull coral bags. +dotted maroon bags contain 5 pale violet bags, 5 vibrant aqua bags, 5 plaid cyan bags. +clear lavender bags contain 2 dotted turquoise bags, 4 light purple bags, 1 plaid plum bag. +dotted cyan bags contain 2 dotted turquoise bags, 4 plaid gold bags, 5 drab red bags, 5 faded orange bags. +muted violet bags contain 3 light teal bags, 2 striped gold bags. +wavy silver bags contain 2 dim coral bags, 1 shiny chartreuse bag, 4 shiny turquoise bags. +drab crimson bags contain 2 drab beige bags. +dull aqua bags contain 4 striped maroon bags, 5 vibrant beige bags, 3 faded gold bags, 3 dark lime bags. +vibrant coral bags contain 4 faded gold bags, 2 dotted black bags, 5 drab tomato bags. +pale beige bags contain 1 dotted coral bag. +dim olive bags contain 5 clear gray bags, 2 muted violet bags, 3 clear gold bags, 4 shiny red bags. +dim cyan bags contain 4 plaid silver bags. +muted bronze bags contain 4 wavy yellow bags, 1 vibrant yellow bag, 5 dim tomato bags, 2 mirrored silver bags. +dim gold bags contain 2 dim green bags, 4 shiny tomato bags, 4 striped white bags, 4 mirrored crimson bags. +vibrant gray bags contain 4 dotted turquoise bags, 4 posh violet bags. +plaid orange bags contain 2 dotted turquoise bags. +posh magenta bags contain 4 dotted lime bags. +light silver bags contain 5 shiny gold bags, 3 dull tan bags. +bright plum bags contain 5 pale magenta bags, 5 dull aqua bags. +drab red bags contain 1 dim gold bag. +striped salmon bags contain 1 vibrant lavender bag, 3 wavy crimson bags, 5 posh olive bags. +dotted purple bags contain 3 dull lavender bags. +bright violet bags contain 2 dotted indigo bags, 4 shiny violet bags. +muted red bags contain 2 mirrored silver bags. +dotted green bags contain 5 muted plum bags. +clear lime bags contain no other bags. +wavy gray bags contain 1 posh cyan bag, 5 dim bronze bags, 5 posh lime bags, 4 drab silver bags. +dotted brown bags contain 4 striped tomato bags. +plaid indigo bags contain 1 plaid purple bag, 3 dark turquoise bags, 3 light purple bags, 5 dotted cyan bags. +mirrored olive bags contain 5 bright gold bags, 3 dotted gold bags, 4 drab gray bags, 4 drab tomato bags. +wavy green bags contain 3 mirrored indigo bags, 4 wavy chartreuse bags, 2 clear cyan bags, 5 bright violet bags. +light gray bags contain 4 vibrant yellow bags, 2 dull blue bags. +posh plum bags contain 3 wavy yellow bags, 5 dim yellow bags, 2 clear chartreuse bags. +posh bronze bags contain 2 clear lime bags. +bright indigo bags contain 4 muted salmon bags, 2 posh violet bags. +mirrored violet bags contain 1 faded plum bag, 3 dull orange bags. +muted silver bags contain 3 mirrored indigo bags, 4 shiny fuchsia bags. +striped coral bags contain 2 posh turquoise bags. +plaid tomato bags contain 1 wavy beige bag, 5 muted green bags. +dark gold bags contain 1 clear gold bag, 2 light maroon bags, 3 pale teal bags. +light green bags contain 1 dull aqua bag, 4 dotted magenta bags, 4 dull purple bags. +plaid lime bags contain 1 faded fuchsia bag. +muted beige bags contain 1 dotted coral bag, 1 plaid fuchsia bag, 2 posh bronze bags. +pale red bags contain 2 wavy gold bags, 1 striped lavender bag. +striped lime bags contain 1 wavy turquoise bag, 4 dim aqua bags. +muted black bags contain 3 dotted black bags. +faded brown bags contain 1 dim turquoise bag, 2 plaid brown bags. +plaid blue bags contain 2 muted salmon bags. +muted indigo bags contain 2 dull fuchsia bags, 2 dull lime bags. +dark coral bags contain 2 faded indigo bags, 3 shiny tomato bags, 2 mirrored salmon bags. +vibrant beige bags contain 4 vibrant lavender bags. +mirrored bronze bags contain 1 mirrored orange bag, 5 plaid red bags, 1 mirrored cyan bag. +shiny red bags contain 1 bright yellow bag. +light crimson bags contain 5 plaid crimson bags, 3 pale white bags, 3 drab fuchsia bags, 3 muted olive bags. +drab blue bags contain 1 mirrored black bag, 3 striped fuchsia bags, 3 drab tan bags. +striped violet bags contain 2 muted gray bags, 5 faded white bags, 5 striped black bags, 3 mirrored tomato bags. +wavy maroon bags contain 2 light cyan bags, 3 muted teal bags, 2 vibrant lavender bags. +pale brown bags contain 2 wavy black bags. +bright aqua bags contain 3 plaid tan bags. +muted plum bags contain 5 light bronze bags, 1 dotted beige bag, 3 vibrant cyan bags. +posh green bags contain 4 faded lime bags, 1 dull coral bag, 4 mirrored silver bags. +dark beige bags contain 3 wavy yellow bags, 5 dim salmon bags. +light fuchsia bags contain 4 plaid coral bags. +shiny tan bags contain 2 drab tan bags, 4 clear gray bags, 2 mirrored crimson bags, 1 vibrant beige bag. +clear crimson bags contain 3 vibrant aqua bags, 4 dotted indigo bags. +clear beige bags contain 4 posh olive bags, 4 bright lime bags, 3 dark green bags. +dim gray bags contain 1 drab beige bag, 3 clear tomato bags, 2 mirrored fuchsia bags. +light violet bags contain 3 plaid purple bags. +faded silver bags contain 5 striped bronze bags, 4 dotted lavender bags. +dotted white bags contain 5 drab green bags. +shiny purple bags contain 3 posh turquoise bags, 2 dark brown bags. +posh blue bags contain 2 vibrant chartreuse bags, 2 muted olive bags, 4 dull brown bags, 5 wavy magenta bags. +striped cyan bags contain 1 pale plum bag, 3 dim maroon bags, 5 light salmon bags, 3 dim crimson bags. +shiny tomato bags contain no other bags. +plaid aqua bags contain 4 clear maroon bags, 4 plaid white bags, 2 posh chartreuse bags. +pale magenta bags contain 5 muted teal bags, 1 vibrant lavender bag. +dim plum bags contain 4 drab coral bags. +drab beige bags contain 4 wavy crimson bags, 1 dull tan bag, 3 dotted tomato bags. +wavy coral bags contain 1 mirrored yellow bag, 1 dull tan bag, 5 drab gold bags, 2 muted bronze bags. +drab violet bags contain 4 faded maroon bags, 2 posh gold bags, 3 wavy maroon bags, 3 bright lime bags. +light aqua bags contain 5 light bronze bags, 1 light tan bag, 1 dull beige bag. +light orange bags contain 1 dark tan bag, 3 dim white bags, 3 plaid plum bags. +pale chartreuse bags contain 3 pale violet bags, 1 drab fuchsia bag, 1 shiny indigo bag, 2 dull turquoise bags. +faded chartreuse bags contain 4 vibrant lime bags, 3 drab tomato bags, 1 vibrant violet bag, 1 vibrant tomato bag. +clear chartreuse bags contain 2 dotted plum bags, 1 muted brown bag, 2 wavy chartreuse bags, 4 faded green bags. +dotted silver bags contain 3 mirrored yellow bags. +dotted violet bags contain 4 muted turquoise bags, 4 light black bags. +wavy orange bags contain 3 shiny fuchsia bags, 4 clear beige bags. +dark red bags contain 1 faded salmon bag, 3 muted purple bags. +dim bronze bags contain 2 clear turquoise bags. +light turquoise bags contain 5 dark red bags. +muted green bags contain 5 bright turquoise bags, 2 wavy coral bags, 3 faded chartreuse bags. +vibrant violet bags contain 3 wavy indigo bags, 1 dotted gray bag, 4 vibrant beige bags. +dull cyan bags contain 3 light maroon bags, 2 posh plum bags. +muted aqua bags contain 2 dotted beige bags, 2 faded yellow bags, 3 plaid gray bags, 3 bright chartreuse bags. +dark tomato bags contain 2 striped purple bags, 2 dark maroon bags, 2 dim silver bags. +vibrant blue bags contain 4 dull orange bags. +faded violet bags contain 2 vibrant lavender bags, 5 plaid plum bags, 4 bright magenta bags, 4 faded silver bags. +bright salmon bags contain 1 dull crimson bag, 2 light maroon bags. +vibrant aqua bags contain 4 dotted aqua bags, 3 vibrant gray bags, 3 dotted lavender bags. +striped plum bags contain 2 mirrored lime bags, 2 dark salmon bags. +plaid gold bags contain 4 dark lime bags, 3 drab aqua bags, 3 dim white bags, 2 mirrored brown bags. diff --git a/tests/aoc-2020/input/day8.txt b/tests/aoc-2020/input/day8.txt new file mode 100644 index 00000000..5ef799e4 --- /dev/null +++ b/tests/aoc-2020/input/day8.txt @@ -0,0 +1,626 @@ +acc +48 +nop +308 +acc +33 +acc +48 +jmp +379 +acc +27 +acc +23 +acc +29 +acc +3 +jmp +326 +acc -12 +nop +248 +nop +146 +jmp +293 +acc +8 +acc -16 +acc +18 +jmp +255 +jmp +390 +jmp +442 +acc +38 +jmp +451 +jmp +499 +acc +41 +acc +44 +nop +298 +acc +31 +jmp +337 +acc -3 +acc +34 +nop +266 +acc -19 +jmp +281 +jmp +232 +acc -9 +acc +25 +acc -8 +nop +228 +jmp +79 +jmp +58 +acc +38 +nop +318 +jmp +17 +acc +44 +jmp +298 +acc -4 +jmp +196 +jmp +249 +acc -9 +acc -3 +acc +17 +jmp +556 +jmp +1 +acc -15 +jmp +166 +acc +23 +acc +10 +acc +39 +jmp +475 +acc +28 +jmp +41 +jmp +322 +acc +48 +acc -11 +acc -13 +acc +12 +jmp +92 +jmp +1 +acc +9 +jmp -26 +acc +4 +acc -8 +nop +484 +acc -14 +jmp +526 +acc -13 +acc -2 +acc -13 +jmp +419 +acc +22 +acc -17 +jmp +1 +jmp +151 +acc +3 +acc +2 +acc -13 +acc -11 +jmp +352 +acc +24 +jmp -27 +nop +206 +acc +22 +nop +225 +jmp +360 +acc +48 +jmp +105 +jmp +80 +acc -16 +jmp +89 +acc +0 +jmp +339 +acc +37 +acc +41 +nop +156 +jmp +452 +jmp +208 +nop +60 +jmp +155 +acc -16 +jmp +274 +nop -77 +acc -16 +acc +21 +jmp +508 +acc -7 +acc -1 +jmp -83 +acc -11 +jmp +28 +acc +3 +acc +32 +acc -18 +jmp -89 +acc +4 +acc -14 +acc -1 +acc +33 +jmp -75 +nop +185 +acc +8 +acc +22 +acc +26 +jmp +164 +acc -19 +jmp +260 +jmp +174 +acc +2 +acc +34 +jmp -120 +acc -15 +acc +48 +jmp +165 +acc +5 +nop +240 +jmp -121 +jmp +114 +jmp -36 +nop +432 +jmp +1 +acc -18 +jmp +429 +acc +44 +nop +110 +jmp +198 +acc -18 +acc +32 +acc +41 +jmp +102 +nop +177 +acc +35 +acc +24 +acc +46 +jmp +121 +acc +20 +jmp +1 +jmp +407 +jmp +1 +acc +35 +acc +46 +nop -18 +jmp +6 +jmp +422 +acc -19 +jmp -85 +acc +33 +jmp -116 +nop +79 +jmp +284 +acc +3 +acc +49 +nop +317 +jmp +6 +acc +6 +jmp +295 +nop -141 +acc -4 +jmp -44 +nop +155 +acc +48 +acc -17 +jmp +188 +acc +22 +jmp +286 +nop +103 +acc -2 +acc +45 +jmp +20 +acc +21 +acc +37 +jmp +235 +jmp +42 +acc -11 +nop -15 +acc -5 +jmp +235 +jmp +178 +acc +12 +acc -15 +jmp +25 +acc +9 +acc +11 +nop +389 +acc +50 +jmp +146 +acc +26 +jmp +144 +acc -14 +jmp +304 +nop +254 +jmp +337 +jmp +17 +jmp +1 +acc +6 +acc -4 +acc +42 +jmp +117 +acc +25 +acc +50 +acc +45 +jmp -112 +acc +14 +acc +27 +jmp +347 +nop +15 +jmp +14 +acc +29 +jmp +236 +jmp -71 +acc -11 +acc +21 +nop +32 +jmp -162 +acc -15 +jmp +322 +acc -4 +acc +16 +jmp +1 +jmp +100 +jmp +1 +jmp -77 +acc +21 +nop -199 +acc +49 +acc -1 +jmp -231 +jmp +230 +acc -19 +jmp +1 +jmp -49 +jmp -11 +acc +6 +jmp -110 +jmp +331 +acc +44 +jmp +292 +acc -7 +acc -18 +acc +50 +jmp +221 +acc +33 +acc +7 +jmp -45 +jmp +342 +acc -19 +acc +36 +acc +15 +jmp -229 +nop -5 +jmp +57 +acc +26 +acc +43 +nop -175 +jmp +82 +acc +45 +jmp -161 +acc -16 +acc +35 +acc +46 +acc +43 +jmp +1 +nop +195 +acc +39 +acc +27 +acc +32 +jmp +227 +jmp -272 +nop +201 +acc +6 +acc +13 +acc +12 +jmp -177 +acc -9 +acc +46 +nop +199 +acc -1 +jmp +1 +jmp +3 +acc +42 +jmp +75 +jmp +305 +acc +49 +acc -16 +jmp -92 +acc +3 +nop +279 +jmp +54 +jmp +31 +acc +50 +jmp -125 +acc +21 +nop -178 +acc +40 +jmp +193 +acc +39 +acc -5 +jmp +261 +nop -3 +acc -13 +jmp -310 +acc +6 +acc -17 +acc +12 +acc +38 +jmp +267 +jmp -311 +acc -2 +jmp -7 +nop +77 +acc -2 +acc +39 +acc -16 +jmp +10 +nop +59 +jmp -296 +acc -4 +acc +41 +jmp -249 +acc +43 +nop +35 +jmp +95 +jmp +171 +acc +10 +nop +169 +acc -17 +jmp +47 +acc +49 +acc +38 +nop +199 +jmp +249 +jmp -53 +nop -194 +acc +19 +acc +18 +jmp -16 +acc +33 +jmp +194 +nop -194 +acc +49 +jmp +85 +acc +50 +nop -318 +acc -7 +jmp -49 +acc -6 +acc +48 +acc -13 +acc -14 +jmp +67 +acc +12 +acc +19 +acc +3 +jmp -371 +jmp -149 +acc +49 +nop -202 +jmp -315 +acc -6 +jmp -171 +acc -7 +jmp +113 +acc +34 +acc +36 +acc +17 +jmp -97 +acc +3 +jmp -244 +acc +25 +acc +30 +acc +25 +acc -19 +jmp +44 +nop +84 +jmp +124 +nop +17 +acc -11 +acc -8 +acc +4 +jmp +193 +jmp -388 +acc +36 +acc +17 +jmp +1 +acc -5 +jmp +166 +acc +39 +acc -10 +jmp -280 +acc +15 +jmp +1 +jmp -396 +jmp +113 +acc +37 +acc +13 +jmp -35 +nop +109 +acc +8 +acc +6 +acc +19 +jmp +39 +jmp +1 +jmp +1 +acc +39 +acc -14 +jmp -291 +acc +39 +acc +31 +jmp -231 +acc +41 +jmp -55 +nop -167 +jmp +105 +acc -8 +acc +34 +jmp -114 +nop +58 +jmp +1 +nop -270 +acc +31 +jmp -135 +acc +8 +acc +33 +jmp +1 +jmp -64 +acc +24 +acc +16 +jmp +117 +acc +35 +acc -11 +nop +44 +acc +18 +jmp +1 +jmp +88 +acc +29 +nop +34 +jmp +1 +nop -118 +jmp -404 +jmp -144 +acc -12 +nop -372 +acc -14 +jmp -209 +acc +12 +jmp +1 +acc -1 +jmp +132 +nop -93 +jmp -130 +acc +23 +acc +30 +acc +3 +jmp -209 +nop -381 +acc -19 +jmp +23 +nop +87 +jmp -277 +acc +39 +jmp -391 +acc +14 +acc +18 +acc +24 +nop -459 +jmp -267 +acc +35 +nop +84 +jmp -231 +acc +5 +acc +0 +acc +45 +jmp -210 +jmp -211 +acc +7 +acc +8 +nop -249 +jmp -8 +jmp -105 +nop -455 +acc -19 +acc +36 +jmp -368 +acc +33 +acc +10 +acc +9 +jmp -259 +nop +41 +acc -14 +acc +2 +jmp -336 +acc +46 +jmp -261 +nop -284 +acc +21 +nop -154 +jmp -485 +jmp -505 +acc +32 +nop -327 +acc +1 +nop +43 +jmp -23 +acc -7 +jmp -88 +acc +10 +jmp -440 +acc +12 +jmp -430 +jmp +1 +acc +46 +nop -105 +jmp -87 +acc +49 +acc -10 +acc -6 +jmp -411 +jmp -268 +acc +35 +acc +15 +jmp +45 +acc -14 +acc +0 +jmp -234 +nop -67 +acc +32 +acc +1 +jmp -476 +jmp -297 +nop -274 +jmp -435 +acc +36 +acc -2 +acc +33 +acc +9 +jmp -26 +jmp +50 +acc +23 +jmp -172 +jmp +1 +acc +34 +acc +32 +acc -4 +jmp -312 +acc -11 +acc +26 +jmp -150 +acc +41 +nop -79 +acc +25 +jmp -76 +acc -2 +acc +29 +acc +12 +jmp -549 +nop -357 +nop -438 +jmp -320 +acc +7 +acc -6 +jmp -149 +nop -74 +acc +7 +acc +45 +jmp -383 +acc -8 +acc +5 +acc +12 +jmp -463 +acc -17 +acc +5 +jmp -34 +jmp +1 +acc +18 +jmp -523 +acc +38 +acc +35 +nop -222 +jmp -424 +nop -365 +jmp -188 +acc +0 +acc +7 +nop -167 +acc +27 +jmp -351 +acc +26 +jmp -201 +nop -208 +nop -466 +acc +50 +nop -531 +jmp -273 +acc +21 +acc +25 +nop -397 +acc +29 +jmp +1 diff --git a/tests/aoc-2020/input/day9.txt b/tests/aoc-2020/input/day9.txt new file mode 100644 index 00000000..300bfe3d --- /dev/null +++ b/tests/aoc-2020/input/day9.txt @@ -0,0 +1,1000 @@ +36 +10 +13 +25 +30 +28 +2 +16 +24 +49 +32 +14 +47 +46 +39 +5 +35 +3 +34 +20 +8 +41 +40 +43 +19 +7 +15 +38 +37 +9 +30 +10 +27 +13 +23 +70 +11 +26 +18 +14 +28 +61 +12 +16 +22 +21 +17 +35 +20 +24 +19 +25 +40 +29 +43 +34 +39 +30 +31 +32 +46 +38 +33 +26 +48 +36 +37 +89 +49 +78 +41 +55 +69 +44 +45 +63 +51 +60 +56 +57 +70 +58 +61 +107 +59 +71 +85 +62 +74 +95 +73 +106 +86 +94 +89 +102 +96 +100 +105 +115 +117 +108 +113 +159 +143 +119 +185 +120 +121 +132 +208 +163 +177 +147 +162 +192 +175 +180 +292 +189 +196 +238 +205 +435 +221 +229 +227 +404 +367 +477 +350 +279 +434 +253 +294 +343 +338 +309 +322 +337 +355 +449 +385 +394 +401 +555 +426 +612 +448 +562 +608 +549 +532 +547 +660 +603 +573 +728 +591 +681 +1153 +631 +646 +659 +1082 +996 +926 +779 +795 +827 +1094 +975 +1079 +1382 +1359 +1761 +1081 +1194 +1807 +1272 +1863 +1222 +1703 +1237 +1741 +1881 +1277 +1305 +2051 +2173 +1823 +1873 +1606 +1622 +2476 +2054 +2197 +3001 +2275 +2303 +2431 +2318 +2416 +2459 +2494 +2499 +3736 +4100 +4734 +3799 +2582 +2883 +5622 +3228 +4105 +3429 +3479 +3660 +6235 +4691 +4251 +5013 +4578 +4774 +4621 +4993 +4777 +5978 +5081 +6599 +5382 +5465 +5810 +6011 +6061 +8005 +6312 +7806 +8356 +7680 +6908 +8560 +7911 +8872 +13691 +8829 +12886 +9199 +15798 +9398 +13649 +16834 +10546 +20248 +12323 +11192 +11275 +14066 +12072 +15459 +13220 +14819 +16240 +15737 +24358 +15468 +17958 +22478 +29864 +19375 +33753 +18597 +19745 +30306 +28679 +21738 +23347 +29872 +25258 +23264 +22467 +28312 +25292 +26891 +28688 +28039 +32777 +31205 +33426 +48424 +58096 +36555 +37972 +41483 +43092 +38342 +66284 +42212 +44205 +45002 +51303 +45731 +68384 +50779 +48556 +106726 +52183 +53980 +54930 +59244 +69332 +63982 +82974 +81064 +132367 +74527 +80184 +76314 +189700 +80554 +82547 +93515 +114334 +89207 +90733 +111427 +96510 +99335 +165970 +100739 +126710 +179519 +123226 +131244 +128576 +133314 +146956 +172824 +362524 +162731 +150841 +202160 +156868 +169761 +163101 +263557 +182722 +273666 +292987 +187243 +195845 +307709 +254470 +266709 +223965 +294345 +338084 +251802 +410513 +319599 +385116 +313572 +360067 +384882 +313942 +627308 +345823 +434524 +332862 +350344 +369965 +378567 +383088 +509787 +411208 +419810 +490674 +879752 +518310 +607053 +546147 +584664 +659765 +627514 +796090 +683206 +646434 +692509 +1375715 +646804 +678685 +696167 +997479 +929597 +720309 +748532 +789775 +1038722 +1323681 +831018 +910484 +1008984 +1244429 +1196995 +1130811 +1472981 +1843429 +1273948 +1310720 +2402578 +1293238 +1325119 +1325489 +1957524 +3282643 +1374852 +1444699 +1468841 +1510084 +1538307 +1579550 +1919468 +1741502 +1840002 +1961829 +2537667 +2139795 +2849027 +2327806 +3214483 +2798470 +2635839 +2567186 +2835203 +6012953 +2618357 +3117857 +2770188 +3048391 +2954783 +4610190 +3541379 +2978925 +3089634 +4174146 +4717938 +5484866 +4279169 +4167808 +4101624 +4467601 +6049686 +5471042 +4894992 +5185543 +7553141 +6096782 +5337374 +6068559 +5388545 +5573140 +5724971 +7056407 +7564973 +7258094 +7263780 +9740948 +10522917 +11457104 +8275770 +9353351 +8269432 +8380793 +15809507 +8569225 +9362593 +10619963 +10080535 +10232366 +14823067 +10725919 +10910514 +10961685 +11113516 +11298111 +12781378 +12983065 +14314501 +14521874 +15527526 +15833005 +20854464 +19092142 +16844995 +17622783 +17922576 +16650225 +19189188 +17931818 +19479739 +20088512 +37504689 +25784752 +28836375 +21636433 +26946521 +21872199 +33459344 +26825637 +25612612 +25764443 +34619668 +30049400 +30354879 +31360531 +35854394 +34467778 +33495220 +34776813 +39568251 +55782896 +34582043 +39804017 +65828309 +46914149 +41724945 +55834152 +43508632 +47484811 +47249045 +52227078 +63850099 +52590080 +51377055 +63544620 +55813843 +64631443 +60404279 +87288828 +78845342 +81381927 +67962998 +76306988 +69358856 +115771698 +74386060 +78090675 +81528962 +163020743 +85233577 +133208955 +119340053 +90757677 +116218122 +193862373 +116134700 +103967135 +159780978 +143102671 +172031965 +185493556 +125035722 +128367277 +137321854 +154397663 +142349058 +145665844 +143744916 +201005275 +233860348 +224631633 +197430728 +200869015 +246316193 +175991254 +194724812 +206892377 +206975799 +370716066 +546707320 +268780638 +229002857 +400713856 +253402999 +262357576 +288014902 +265689131 +270716335 +279670912 +286093974 +248131121 +289410760 +441680385 +607606233 +464006156 +431607432 +382883631 +441041005 +465441147 +382967053 +611969910 +636286630 +435978656 +482405856 +477133978 +700388070 +1090012089 +501534120 +536146023 +510488697 +908741410 +513820252 +534225095 +711278344 +952169082 +1429303060 +672294391 +765850684 +814491063 +965832527 +865372909 +818862287 +959539834 +1046634720 +917192148 +946467353 +913112634 +1486394177 +1855862773 +978668098 +1620019754 +1718929111 +1678963318 +1024308949 +1044713792 +1048045347 +1558534044 +1206519486 +2925448597 +1438145075 +1810564476 +1486785454 +2373025107 +2416813173 +1959747354 +1684235196 +1736054435 +1830304782 +2152986839 +1863659501 +1859579987 +1891780732 +2185187584 +2002977047 +2023381890 +3346365441 +2743238060 +2069022741 +3222839889 +2092759139 +3828813574 +2644664561 +2693304940 +5315599028 +2924930529 +4573542842 +3595634422 +3547894697 +4280472674 +4095736186 +3921242019 +3566359217 +3984539871 +7051653463 +4668046451 +4044767571 +10647287885 +4188164631 +4026358937 +4092404631 +4161781880 +4713687302 +4737423700 +5337969501 +7592976980 +6522118514 +5569595090 +5618235469 +6472825226 +8254186511 +7143529119 +7114253914 +7550899088 +7487601236 +7592718154 +7611126788 +8232932202 +8010898808 +8071126508 +8118763568 +9382737072 +8188140817 +10283282392 +9710640100 +14601855150 +8875469182 +12042420316 +13169134557 +10907564591 +11187830559 +12091060695 +12683849004 +14483724034 +13587079140 +14257783033 +15038500324 +29640355474 +15080319390 +15498500044 +17876000546 +15622025596 +16082025316 +22044603739 +24153151824 +19666019464 +43227434614 +24133481011 +18586109282 +27167573038 +20063299741 +19783033773 +29918420862 +22095395150 +22998625286 +26226330883 +24774909699 +33253098604 +28625579464 +27844862173 +29296283357 +30118819714 +30578819434 +36145325057 +31120525640 +31704050912 +34208134878 +34668134598 +38252128746 +38369143055 +42719590293 +39846333514 +66214005228 +38649409023 +41878428923 +42158694891 +42781659059 +54119150926 +61250754032 +70353459935 +51001240582 +63371918318 +69398423661 +81150802114 +61239345354 +59415103071 +60697639148 +66724144491 +99491474100 +103117774277 +65912185790 +85501249352 +95918888630 +166652051466 +120031336716 +122490099386 +80808103914 +84660087982 +102856334039 +102576068071 +130096062809 +108693844849 +150206527575 +142058857946 +110416343653 +127421783639 +156616527778 +163815413425 +180642276214 +120112742219 +125327288861 +169841918768 +244915191985 +146720289704 +414757110753 +229727599215 +165468191896 +183384171985 +187516422021 +183664437953 +200920846133 +320048446343 +205432402110 +211269912920 +237838127292 +228806587068 +235743632514 +296926817279 +372336975624 +230529085872 +245440031080 +333657332193 +565488477423 +441176034624 +266833031923 +272047578565 +686091226609 +375526876772 +312188481600 +348852363881 +370900594006 +349132629849 +367048609938 +406353248243 +412190759053 +435961487982 +459335672940 +540995068668 +474246618148 +464550219582 +818544007296 +785094117831 +475969116952 +497362117795 +502576664437 +808468302789 +579021513523 +621180208414 +584236060165 +777253842249 +718541729843 +716181239787 +661040845481 +720033223855 +715900973819 +737949203944 +761323388902 +773401858181 +842314736225 +848152247035 +910208106130 +923885892522 +967126884019 +978545781389 +1054990630475 +973331234747 +1163257573688 +1081598177960 +999938782232 +1086812724602 +1685668613862 +1200201721937 +1205416268579 +1639226690640 +1376941819300 +1377222085268 +1381074069336 +1398990049425 +1580263940169 +2138545474170 +1923912914185 +2033536411864 +1615716594406 +3254943285046 +1758360353165 +2355767866657 +1891012776541 +1978484563621 +3732989951925 +1973270016979 +2458539997260 +2839428412577 +2604406318004 +2086751506834 +2287014446539 +3359558632957 +2405617990516 +4977973886747 +2776212134693 +2754163904568 +2758296154604 +5819741458759 +4835207225215 +3195980534575 +3736844916786 +5706259968904 +3374076947571 +3506729370947 +5212703901828 +10541467194119 +8578037613363 +3864282793520 +5169250551554 +5654520531835 +4060021523813 +5534508289297 +7256002058388 +4373765953373 +4492369497350 +4692632437055 +5159781895084 +5163914145120 +7754186021440 +5512460059172 +7238359741091 +6132373102175 +8675979922501 +8896626811870 +9271353206083 +7924304317333 +8199361808002 +9161249902782 +7371012164467 +9533547848457 +13589259248925 +13266646080612 +8238048746893 +8433787477186 +13221271426595 +9185001934405 +8866135450723 +9066398390428 +9656283642470 +9652151392434 +17618789411591 +16650812833310 +10676374204292 +11644833161347 +12750819800263 +13370732843266 +13503385266642 +15295316481800 +18051137385128 +15570373972469 +17027295806937 +25856838158484 +15609060911360 +17932533841151 +16671836224079 +17104184197616 +17299922927909 +17304447137321 +18251400324833 +18518286843157 +18522419093193 +18718549782862 +19742772594720 +19308435034904 +28359880711623 +33621511357597 +22321207365639 +26246748176761 +27253894072707 +26121552643529 +35313146567189 +29112446178002 +30865690454269 +32242210196548 +32674558170085 +33699132031016 +32908983839269 +32280897135439 +59030536482798 +44765035019918 +34404107125525 +50760497039705 +35555847462154 +70868994029343 +45864325238249 +65583542009354 +38026984817766 +58402449778968 +64073470054822 +48442760009168 +48567955542400 +49575101438346 +52368300820290 +61787004348087 +55233998821531 +63146587589708 +59978136632271 +66685004260964 +64916768366633 +65980029166455 +81476939381669 +68464831301423 +112346437452561 +69959954587679 +80268432363774 +73582832279920 +110229764357255