From 8ccfd90d80bf65a0cebf28c8e05e42b5ec7e9941 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 24 Dec 2020 08:08:41 -0600 Subject: [PATCH] added day 24 --- day24.onyx | 139 ++++++++++++ input/day24.txt | 547 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 686 insertions(+) create mode 100644 day24.onyx create mode 100644 input/day24.txt diff --git a/day24.onyx b/day24.onyx new file mode 100644 index 0000000..cc86d31 --- /dev/null +++ b/day24.onyx @@ -0,0 +1,139 @@ +#include_file "core/std/wasi" + +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.get_contents("input/day24.txt"); + defer string.free(contents); + + 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 tile_entry: grid.entries { + if tile_entry.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 { + state := map.get(^grid, *cell, Cell.{}); + state.alive = state.next; + map.put(^grid, *cell, state); + } + + array.clear(^cells_to_consider); + } + + black_count = 0; + for tile_entry: grid.entries { + if tile_entry.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; +} \ No newline at end of file diff --git a/input/day24.txt b/input/day24.txt new file mode 100644 index 0000000..44a2f19 --- /dev/null +++ b/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 -- 2.25.1