From: Brendan Hansen Date: Fri, 11 Dec 2020 14:25:57 +0000 (-0600) Subject: added day 11 and updated all days with string change X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=2a0021b0741a002e8613657f3c3b23af456864b2;p=onyx-aoc-2020.git added day 11 and updated all days with string change --- diff --git a/day1.onyx b/day1.onyx index 8c7f56f..f54127f 100644 --- a/day1.onyx +++ b/day1.onyx @@ -4,7 +4,7 @@ package main use package core -main :: proc (args: [] cstring) { +main :: proc (args: [] cstr) { contents := file.get_contents("input/day1.txt"); contents_orig := contents; defer cfree(contents_orig.data); @@ -15,7 +15,7 @@ main :: proc (args: [] cstring) { while num := 1; num > 0 { // This sets num to be 0 if there is no number - str.read_u32(^contents, ^num); + string.read_u32(^contents, ^num); if num != 0 do array.push(^nums, num); } diff --git a/day10.onyx b/day10.onyx index a2181d0..5349813 100644 --- a/day10.onyx +++ b/day10.onyx @@ -1,7 +1,7 @@ #include_file "core/std/wasi" use package core -use package core.str.reader as reader +use package core.string.reader as reader count_ending_paths :: proc (nums: [..] u32) -> u64 { tally: [..] u64; @@ -24,7 +24,7 @@ count_ending_paths :: proc (nums: [..] u32) -> u64 { return tally[0]; } -main :: proc (args: [] cstring) { +main :: proc (args: [] cstr) { contents := file.get_contents("input/day10.txt"); defer cfree(contents.data); diff --git a/day11.onyx b/day11.onyx new file mode 100644 index 0000000..b637a5c --- /dev/null +++ b/day11.onyx @@ -0,0 +1,107 @@ +#include_file "core/std/wasi" + +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_set_temp :: proc (use gos: ^GameOfSeats, x: i32, y: i32, state: SeatState) { + if x < 0 || y < 0 || x >= width || y >= height do return; + temp[x + y * width] = state; +} + +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 { + gos_set_temp(gos, x, y, SeatState.Occupied); + changed = true; + } + + case SeatState.Occupied do if occ_neighbors >= 5 { + gos_set_temp(gos, x, y, SeatState.Empty); + changed = true; + } + } + } + } + + for i: 0 .. seats.count do seats[i] = temp[i]; + + return changed; +} + +main :: proc (args: [] cstr) { + contents := file.get_contents("input/day11.txt"); + defer cfree(contents.data); + + 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/day2.onyx b/day2.onyx index daa3e80..8eea3de 100644 --- a/day2.onyx +++ b/day2.onyx @@ -4,7 +4,7 @@ package main use package core -main :: proc (args: [] cstring) { +main :: proc (args: [] cstr) { contents := file.get_contents("input/day2.txt"); contents_orig := contents; defer cfree(contents_orig.data); @@ -13,17 +13,17 @@ main :: proc (args: [] cstring) { lo : u32; hi : u32; ch : u8; - pw : string = ""; + pw : str = ""; while true { - str.read_u32(^contents, ^lo); + string.read_u32(^contents, ^lo); if lo == 0 do break; - str.discard_chars(^contents); - str.read_u32(^contents, ^hi); - str.discard_chars(^contents); - str.read_char(^contents, ^ch); - str.discard_chars(^contents, 2); - str.read_line(^contents, ^pw); + 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; diff --git a/day3.onyx b/day3.onyx index e81d9f2..c885126 100644 --- a/day3.onyx +++ b/day3.onyx @@ -18,7 +18,7 @@ line_interp_at :: proc (use li: LineInterp, t: i32) -> Point { return Point.{ ox + dx * t, oy + dy * t }; } -main :: proc (args: [] cstring) { +main :: proc (args: [] cstr) { contents := file.get_contents("input/day3.txt"); contents_orig := contents; defer cfree(contents_orig.data); @@ -30,8 +30,8 @@ main :: proc (args: [] cstring) { width := 0; height := 0; while true { - line: string = ""; - str.read_line(^contents, ^line); + line := ""; + string.read_line(^contents, ^line); if line.count == 0 do break; width = line.count; diff --git a/day4.onyx b/day4.onyx index ba958eb..20bcc33 100644 --- a/day4.onyx +++ b/day4.onyx @@ -3,22 +3,22 @@ use package core // Returns the number of fields -process_passport :: proc (contents: ^string) -> u32 { +process_passport :: proc (contents: ^str) -> u32 { field_count := 0; while true { - line: string; - str.read_line(contents, ^line); + line: str; + string.read_line(contents, ^line); if line.count == 0 do break; - fields := str.split(line, #char " "); + fields := string.split(line, #char " "); defer cfree(fields.data); for field: fields { - data := str.split(field, #char ":"); + data := string.split(field, #char ":"); defer cfree(data.data); - if !str.equal(data[0], "cid") { + if !string.equal(data[0], "cid") { field_count += 1; } } @@ -29,7 +29,7 @@ process_passport :: proc (contents: ^string) -> u32 { // This does not include part 2 because it is gross and // not worth the effort to implement it. -main :: proc (args: [] cstring) { +main :: proc (args: [] cstr) { contents := file.get_contents("input/day4.txt"); contents_data := contents.data; defer cfree(contents_data); diff --git a/day5.onyx b/day5.onyx index 21a913b..b22a009 100644 --- a/day5.onyx +++ b/day5.onyx @@ -2,7 +2,7 @@ use package core -main :: proc (args: [] cstring) { +main :: proc (args: [] cstr) { contents := file.get_contents("input/day5.txt"); contents_data := contents.data; defer cfree(contents_data); @@ -14,8 +14,8 @@ main :: proc (args: [] cstring) { max_val := 0; while true { - line: string; - str.read_line(^contents, ^line); + line: str; + string.read_line(^contents, ^line); if line.count == 0 do break; val := 0; diff --git a/day6.onyx b/day6.onyx index db02e44..9e3de37 100644 --- a/day6.onyx +++ b/day6.onyx @@ -2,13 +2,13 @@ use package core -part_1 :: proc (contents: ^string) -> u32 { +part_1 :: proc (contents: ^str) -> u32 { chars : [26] bool; for ^ch: chars do *ch = false; while true { - line: string; - str.read_line(contents, ^line); + line: str; + string.read_line(contents, ^line); if line.count == 0 do break; for ch: line do chars[~~ch - cast(u32) #char "a"] = true; @@ -20,14 +20,14 @@ part_1 :: proc (contents: ^string) -> u32 { return sum; } -part_2 :: proc (contents: ^string) -> u32 { +part_2 :: proc (contents: ^str) -> u32 { chars : [26] u32; for ^ch: chars do *ch = 0; person_count := 0; while true { - line: string; - str.read_line(contents, ^line); + line: str; + string.read_line(contents, ^line); if line.count == 0 do break; person_count += 1; @@ -40,7 +40,7 @@ part_2 :: proc (contents: ^string) -> u32 { return sum; } -main :: proc (args: [] cstring) { +main :: proc (args: [] cstr) { contents := file.get_contents("input/day6.txt"); contents_data := contents.data; defer cfree(contents_data); diff --git a/day7.onyx b/day7.onyx index c3a8cd4..82622d2 100644 --- a/day7.onyx +++ b/day7.onyx @@ -1,6 +1,7 @@ #include_file "core/std/wasi" use package core +use package core.string.reader as reader BagGraph :: struct { nodes : [..] ^BagNode; @@ -8,7 +9,7 @@ BagGraph :: struct { } BagNode :: struct { - color : string; + color : str; // Part 1 // contained_in : [..] BagContainment; @@ -31,7 +32,7 @@ bg_free :: proc (use graph: ^BagGraph) { strmap.free(^node_map); } -bg_get_node :: proc (use graph: ^BagGraph, name: string) -> ^BagNode { +bg_get_node :: proc (use graph: ^BagGraph, name: str) -> ^BagNode { node := strmap.get(^node_map, name); if node == null { @@ -43,37 +44,37 @@ bg_get_node :: proc (use graph: ^BagGraph, name: string) -> ^BagNode { node.color = name; array.push(^nodes, node); - strmap.put(^node_map, name, node); + strmap.put(^node_map, node.color, node); } return node; } -main :: proc (args: [] cstring) { +main :: proc (args: [] cstr) { contents := file.get_contents("input/day7.txt"); - contents_data := contents.data; - defer cfree(contents_data); + defer cfree(contents.data); + + file := reader.make(contents); graph : BagGraph; bg_init(^graph); defer bg_free(^graph); while true { - name := str.read_until(^contents, #char " ", 1); + name := reader.read_until(^file, 1, #char " "); if name.count == 0 do break; container := bg_get_node(^graph, name); - str.read_until(^contents, #char " ", 2); + reader.read_until(^file, 2, #char " "); while true { - if str.starts_with(contents, " no") do break; + if reader.starts_with(^file, " no") do break; - count : u32; - str.read_u32(^contents, ^count); - str.discard_chars(^contents, 1); + count := reader.read_u32(^file); + reader.skip_bytes(^file, 1); - contained_name := str.read_until(^contents, #char " ", 1); + contained_name := reader.read_until(^file, 1, #char " "); contained := bg_get_node(^graph, contained_name); // Part 1 @@ -88,13 +89,13 @@ main :: proc (args: [] cstring) { count = count }); - bag_word := str.read_until_either(^contents, 1, #char " ", #char "\n"); + bag_word := reader.read_until(^file, 1, #char " ", #char "\n"); if bag_word[bag_word.count - 1] == #char "." do break; } - str.advance_line(^contents); + reader.advance_line(^file); } - + // Part 1 // to_process_bags : [..] ^BagNode; // processed_bags: [..] ^BagNode; diff --git a/day8.onyx b/day8.onyx index 52234c9..111c105 100644 --- a/day8.onyx +++ b/day8.onyx @@ -1,7 +1,7 @@ #include_file "core/std/wasi" use package core -use package core.str.reader as reader +use package core.string.reader as reader OpCode :: enum (u16) { Nop; Acc; Jmp; @@ -44,7 +44,7 @@ get_acc_value :: proc (instrs: [..] Instruction, ret_acc: ^i32) -> bool { return succ; } -main :: proc (args: [] cstring) { +main :: proc (args: [] cstr) { contents := file.get_contents("input/day8.txt"); defer cfree(contents.data); @@ -66,9 +66,9 @@ main :: proc (args: [] cstring) { if sign == #char "-" do val *= -1; opcode : OpCode; - if str.equal(word, "nop") do opcode = OpCode.Nop; - elseif str.equal(word, "acc") do opcode = OpCode.Acc; - elseif str.equal(word, "jmp") do opcode = OpCode.Jmp; + 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, diff --git a/day9.onyx b/day9.onyx index 6040c1d..9dd31af 100644 --- a/day9.onyx +++ b/day9.onyx @@ -1,7 +1,7 @@ #include_file "core/std/wasi" use package core -use package core.str.reader as reader +use package core.string.reader as reader StartEnd :: struct { start: i32; end: i32; } @@ -27,7 +27,7 @@ find_contiguous_subarray_with_sum :: proc (nums: [..] u64, sum: u64) -> StartEnd return StartEnd.{ start, end }; } -main :: proc (args: [] cstring) { +main :: proc (args: [] cstr) { contents := file.get_contents("input/day9.txt"); defer cfree(contents.data); diff --git a/input/day11.txt b/input/day11.txt new file mode 100644 index 0000000..977ae5f --- /dev/null +++ b/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/out.wasm b/out.wasm index ac69ff6..06c3250 100644 Binary files a/out.wasm and b/out.wasm differ