added day 24
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 24 Dec 2020 14:08:41 +0000 (08:08 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 24 Dec 2020 14:08:41 +0000 (08:08 -0600)
day24.onyx [new file with mode: 0644]
input/day24.txt [new file with mode: 0644]

diff --git a/day24.onyx b/day24.onyx
new file mode 100644 (file)
index 0000000..cc86d31
--- /dev/null
@@ -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 (file)
index 0000000..44a2f19
--- /dev/null
@@ -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