From 49f2419361381880a14e53c6d6a11770b9e763ab Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Wed, 23 Dec 2020 22:44:43 -0800 Subject: [PATCH] day 24 --- 2020/24.rkt | 61 +++++++ 2020/24.rktd | 492 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 553 insertions(+) create mode 100644 2020/24.rkt create mode 100644 2020/24.rktd diff --git a/2020/24.rkt b/2020/24.rkt new file mode 100644 index 0000000..bb9d271 --- /dev/null +++ b/2020/24.rkt @@ -0,0 +1,61 @@ +#lang br +(require racket/file rackunit) + +(define (lex-1 port) + (match (regexp-match #rx"^se|nw|sw|ne|w|e" port) + [#false eof] + [(list str) str])) + +(define tokss (for/list ([ln (in-list (file->lines "24.rktd"))]) + (for/list ([tok (in-port lex-1 (open-input-string ln))]) + tok))) + +(define (tok->delta tok) + (match tok + [#"w" -1] + [#"e" 1] + [#"nw" -i] + [#"ne" 1-i] + [#"sw" -1+i] + [#"se" +i])) + +(define white -1) +(define black 1) +(define black? positive?) + +(define (make-initial-floor tokss) + (define floor (make-hasheqv)) + (for ([toks (in-list tokss)]) + (hash-update! floor (apply + (map tok->delta toks)) - white)) + floor) + +(define deltas '(1 -1 -i 1-i -1+i +i)) + +(define (grow! floor) + (for* ([k (in-list (hash-keys floor))] + [delta (in-list deltas)]) + (hash-ref! floor (+ k delta) white))) + +(define (adjacent-black-tiles floor k) + (for/sum ([delta (in-list deltas)] + #:when (black? (hash-ref floor (+ k delta) white))) + 1)) + +(define (iterate floor num) + (for ([i (in-range num)]) + (grow! floor) + (define fliplist + (for/list ([(k v) (in-hash floor)] + #:when (let ([abt (adjacent-black-tiles floor k)]) + (cond + [(and (black? v) (or (zero? abt) (< 2 abt)))] + [(and (not (black? v)) (= 2 abt))] + [else #false]))) + k)) + (for ([k (in-list fliplist)]) + (hash-update! floor k -))) + floor) + +(define floor (make-initial-floor tokss)) +(check-equal? (count black? (hash-values floor)) 436) +(check-equal? (count black? (hash-values (iterate floor 100))) 4133) \ No newline at end of file diff --git a/2020/24.rktd b/2020/24.rktd new file mode 100644 index 0000000..45c3ff3 --- /dev/null +++ b/2020/24.rktd @@ -0,0 +1,492 @@ +seesweseseeeeeeeeeenweeee +wswneseseseswseswseseseseswsesesesesese +senwnesenenesenwseseswnwnwwnewnenwnew +neseeseseseseseseseseseenwseseeseswe +neswnweweeeeeeweese +nenenwnenwnenenenenenenenenenenesenwne +sesesesesenesesesesenwseseseseseewee +eeeeesesweeweseeeeneeeeenw +neswwnesenenenenenwenenenenesenesenenwne +wseseeseenwsesesesesesesesesesesesese +newneeneeseenweenenee +eeeneeeeneneneneneswneeneenewenw +nwewwnwwwwnwwwwwswnwwnwwewnww +wnwswswwsewnenwnwnweneswnwseenenwnwwnw +enwnwseswnenenwnwnwnwnwnenwnwnenwnwnwnwnw +swsesenewnwsenewseneswswswseseswswsesw +seseswseseneeenwwseeseseswse +sweeeeneneweeeeeeeneeseee +newwwswwnwsewwsewsww +wwswsweneswewseswswswswnwnesweswnesw +neneneneeenewnwnewsweeneeseeneese +swwwswswsewseseswseswenesewseseene +nweeesewwwsweseee +wwnwwnwnesenwsenwnwsenwwnwwnwnwswsenene +esesenwseswnwwseneeseenwswswswswsesese +wswswswswswnwswnweswnwswnwswswseswswese +swswnwneswswswswswswsweswswswswnewswswsw +seneseeswswnwswseswseseseseswswsenesew +swseseseseseseseeswsesesesenwsesese +seswswseseswswenenwswseswseseswnwsewnwse +seswsesesesesesesewseneseneswseseseswsese +sesenewnenenewneneneneenenenenenenwnene +wnenwenwneswsewsesenwwewwswwswe +swwseswswswswneseswseseswneswswsesesewse +nesenenenwneneeswnewneneswnenenenenenene +esesewseeneseneseweenwnwneseeswewe +nwsewwnwnwnwnwnesesenww +nwnwnwnenewnenwnwnwnwnwsenwwnwnwnwenwnw +seenenewneeneneneneneneeewneneew +wseswwswswswswswswswnwswswwwneswewww +wsenwwnwseenwwwwwwwwwnwwwww +eenweeeeeeweswsweeene +newnwseseeeseeewenesewweseeee +neeseseeeswseeneswweeeseeseeee +seseeeseeseeeseeseeesesenwseesw +nweswseseeenenesesweesewsesesenw +seswnwnwneseneneswwnenenwewnesesesenwnw +nwneeeneneneneenenewsweneeeeswne +neswsenwwnwneswnwneswswneswenwnenwnw +swnwnenwwnewswwnwnwswwnwewwwnwnw +nenenwnenenenewneneneneseneneweenww +seneneneneneeneswnenenweewnenene +eeesenweweneeeseese +eneneeesewnenewenewnewseseneee +nenenewsenenenwwnenwneseneenenenwnesee +wswsewwwwwwnwwneswwswwwewwwsw +wswswswwswwwswwwewswswwseswnew +seenwwseseseseesesenwsesesesesesesewne +wswsenwwesewnwnwwnenesenwwseewnenww +senwwsenwswseseswswnwswneswswswswswsenwe +swneseseeseeeeesewnweeeeesee +seeseeweeseseseeeseeseseeenee +eseswneseseseseswwsesesenesesewse +eeneeewneeeeeenweeeeseenese +eeseswenwnwesewnwnwese +seswswwswswswswswswswswswswenwseseswsw +enwwnwewwnwswneswnwwnwnww +nwwnwenwnwwnwwnwnweenwnwwsenwnwnwnw +senwnesewwwnwwswsesesenwsenwwenwnwne +eswswswswwneseswseswswswseeswnesesewsww +wwwwwwwnwnwwwwwnesenwnwsenwwww +nwnwwenewnwnenenwnwnenwsenw +wwwwwnwwwwsewwsewnewwnwewww +wwnwwwnwwwwwwweswwwwwww +nwwwwwwnwwwswnwwwesewnwnwwew +wseweswswswswneswswsw +nwneswneenenenwwnweneneneneneeesesene +nwwwnwnwnwsenenwwnwnwswnwwwnenwnwse +ewwsenwwnwenwenwewwneswwsenwwsw +esesenwswswseseswsenesesewswseseseswse +nenwnwnenwnwneswnenwsweneseenenenenenwnw +sewwewwwwwwwwswwwwnewwsw +swswswswswswswswswswswswswswswneswww +swseseswnwewwswseeswnesweswseswwswswsw +wnwneseswenweneswswweneeseneenenw +wswseseenwsesenwseseewnesesesesesese +eseseewwnwsweneswnwswswwswsesewswesw +neeneneeswneswswwenwwwseneneneene +neneswnwsenwswnenwnenwnwnwswnw +neeenweeeneeneeesweeneeeene +nweeeeeeeeneeeneweenweeswsesw +swwwnwswweswnwwwewnewwwseswwwsw +seseseseseswsesesesesenese +eswneswneewswnwswswswewnweeswwse +seswseswswsenwneswnwseswswswseswnwnesesesw +eeweeswneenweeeneneeeneswseene +nenwnwswnwnwenwnwenenwwnwswnenwnenwnwnw +enwseeneneeeeweswneneenewnee +enewsewwwwneewwwswswwnwwew +eesweenwnwnwseeesenwseswneseseseswe +weseneseeseewnwwswnwneswswsenesewnw +nwnwsenwnewwwnwsenwnwnwwnww +nwnewnesweneneneneneswnenenwnenwenwenwnw +eswswwwswswnwswswswswwswenewswsww +neeneenenenwswnewwsweswswneneenene +nwseswenwnwsenwenwwswesewsesweesw +nwnweeswswnwnwswewnwnenwnwswenenew +swseenweswnesenwswwnwnwwnwnenwswsenenw +eeeeeneseesewesenwnweneeneenee +seseseseenweseeseseeswseseeseseenese +senwwwswswswswswwswswwswswenwswwswsw +eeneeneneeeneneneeeesenewneeneew +wnwnwwnwswsweeseswswswswswwwwswe +sesesesenewseeseseseseseseesesesewse +nenwnwenwnwneswnwnenwenww +nwswswswsewwneswswwwswneenewswwwwsw +eswenwsweeswswnwnwenwewewswnene +neesweneseeeeeneeeseeeeswnwesw +seseeneeweeweeeeseeeewee +nwnwnwnwnwnwnwnwnwnwnenwsenwnwnwnwnw +nenwnwwnwnwnenenwnenwnenenenwseswnenwnwnwse +wwnesenwneneeneeseneewswnwneneeese +senwnwnenenwneswnwnenweswweweneseswse +nwnwnwwnwnwswnwswnwwnenwnwnwwenenwwnw +eswnenenewnenenenesenenenwseewnenwnwsw +wsenenwwwwnwnwwwnwwnwnwwnwnwww +seswseswsenwswswseseswseneswsese +swswswswswswswneswwswnwseseswswswswswsesw +enwneswswswswnenenenenenenenwneenenene +wsesewswwwwwwwnwnwwwswwweww +enwwwsewwwsewwnwnwnwwwnenwww +eeeeeneswsweeeeeeeeenwee +nwwnewnwwswewnwnwnwnwsenwwnwsenwse +nwnwsewwwnwwnwseenwswswenwenenwnwwnw +seswswswswseswswseswswswneneswswswswswswsww +wswnwseswewwwswwwswswswwwswwww +wwnwwnwwwwsenwswenwe +seseseseswseseswnesesw +swswswswswseswneewnwswswswswsw +seswneesewseneewswseswwnewsenesesewnw +nwswwenwnwswneneesenewnwswnenw +seeswswswswswswwswswswswwneenwswswe +wswwseswnenwwseswneneeswsesweseene +eseseeneewseseseewseseeseeseesese +senwnwnwnwswswwneneenwnwnenwsenenwswnese +wnewswnwesewwneswsewswwsewwswnw +sewnwnwseseeewnwesenwwswnwwwsenwww +swenenwswnwnenwseswnwnwnenwnwnenwnwnesew +wswenewwwwnwnwenesweswweswseswsw +eseseeeswwnesesesesesewnweenweseswne +nwnwnwnwnwnwenwnwnwnwwnwnwnwnwwswew +eenwweneeeeeneneeeesweeesee +newsewwwwwwwwwwswwwnewwwew +wsewnewwwwewswswnwwnwwwneww +nenenwneseneenwsewneneswneewwnwnwnw +nenenenenenenenenwswnwseneneewnwne +newnenwnwneneenenenwnenw +swseseseneseswswswswswnwswswswwseswswseese +sewwwnewnwwwwenewwnwwwswwwnwse +weswseseseseeseseseseswseseseesewwsw +swesenenesweseeswneseeswnwseesesee +wswwneneseeeneeeseseseneswsenwswwne +wenewseswsenwnenenwnewnewsesenwnew +swswsweswswswswswswswswswnwswswwswswe +seenwseswswenwwsesenwseneswenw +nwswswswswswseswswnwseneswsesweswwsesw +nwseswseswsenwnesesesweenewnwswwswse +swswswseswsewnweswsesesesee +eeneenesenenwseeneneneneneneneswnenw +swweswsewswnwswwswwswswswswswswswsw +swswseswseswswswswswsene +enewswwsesesewnweeneeswwswesene +seeeeeseweseenweseseseseesenese +swwswnwneswnesenwnenesenesene +seeseneswwswewnwseeeeesenenwwnene +nesesenwswswnwswnwnewnwwsenenewe +neewneeseeeweseeswenwseseeeee +nenesewneseneneneewwnenenenwwe +swnenwnenwnwnwnwnenwnwnenwnwnenwswnwnwe +wswneswseewseneswswenwseswnwswneswwsw +neneeeeneeneneenweseneeeneneneew +seneswwwwwsesenwwnewnenwenwnwew +enwwnwnwnwwwnwwwwsenw +wnewwwwnewwsewwwwsewwsweww +nwwwnwsenwnwnwwwwnwwwnwewwnwww +swswwswswseseswwswwswneswnwswswwwswe +nwenenesweswneenesenwenw +eenwenesweeneweneeweneseeswsee +enwneneneeswnwnewneseeeeswnwewee +neneewnenewwnenenesenenesenene +nwnenwnwenwnwsenwnwnwnenwnewnenwseewnw +ewwsewwswewwnwneeseneswwsweewne +wwnwwnenwswnwwnwnwnwnwwnw +nwnwswnwnwnweswenwnwswnwnwenwwnwnenw +swwnewnwwnwswseswwsweewewwwswwsw +seswswswsewswseseswswneswswswwseneswwne +seseesesesenesesesweseseswesewnwenwe +swenenwnwnenwneneneneswnenenenwnenwnw +nesewnewsewnewenwswsenwneeneswnwswsee +nenwsenwnenwseseswnenenwwnwnwnwswnenene +seswwwwswwswnwwsw +eeeesweeseseneseeeenenwsesesew +nwseseseswseswseseseseseeseweseneseswne +neneseswenewswenwswswneseswnwwswnwene +nwnwnwwwewwnwnwnwnewnwwswnwwwsww +swwwwswwswswsewneswwswswswswwww +wwswnwwswswswnwswswswswswwwswwwese +nwnwnwwnwswnwnwnwnwwnwnweenwnwnwnwnwnwnw +nenwnenenenwnwnwnenenwswnwnwenwnwnwne +seneneneneneneneneenenenweesweneenenwne +senwenwenwsenwnwnwwnewnenwnwsenenenw +esenweesesesenwsenesweneeesewswnw +neneenewneeeneeneneneneneneneeswnee +senwwwneseseseneesesewseseseseeesew +nwwnenwnwnwwnwsewesewwwnwnwwsww +seseseseseswsesenese +neseenenwweswnwnewwsenenwnwwnenenw +nwwwwwwwwwnwnwwwsesewnwwwnw +nweeeeeeeneeswesewsesewneese +nwnwenwwseeneeswswwnwnenenesenenwnwswne +swsesenwesesenweeeeeseseseesweesese +swswswwsenwswwsweswswswswwwswswswswsw +swswnwseseseseswseeseseesenwneseseese +nwnwwsewnwnwwnwnwnwnwwwwnw +nwswswwswswsweswswswwswwswsewswwnw +swnwwseewswnwwswswwsw +nwwnweweseswsewneneswnwswsesenenenwsw +nwneeswneneeeswwswnenweneneneneene +nwnwnenwnenenewnwenesenwnwnenenwnwnew +seseseseseswwseseseseneswsesesw +nenenwneneewnenenwnenwswnwwsenwnwenew +eneneneseneeneneswseenwnenewswswenenwnw +newwswwswwseswenwwwnwnewsenwneew +nwwwnwswnwnwwsenwnwnenwswnwenwnwnwenw +neeneeneseseeneeeneewewewewe +swsweseswseneswsenesenenwswene +wswneeswseseneeesenweseeesesesesesee +nenwnenwnwnwnwnwneeswnenwnwnwnwsw +swswneswnwnweswnwswwswnweswsweswee +nenenenwnenwnwnenenenwswnwnwnwnenenwsee +wswseseneswwwswwswnwswswswswswswwswsw +newnwsesesesewseeneseesesenesewswnw +senwnwwwswnwnwnenwnwnwwnwnwnwnwnwwnenwnw +nenwnenenenwnwnwnewenwnwsenwnwnenwnww +nwnwwwwwwnwwsewnenwwwsewsewww +nwnwwnwwwnwwswwnwwwenwnw +swwnwswnwnwnwnenwewseswnwswwneneww +sewseseseeeseewnwneeweesenesese +swswwneswnwswswswswwswneswswsewswwwse +neswswwseswswswseeswswneswwswneseswsw +swseswseseeswsesesesesenewsewseswseswswse +seeenweeeseeeeenwsesenwnwseee +esesewseswswswswseswseswswnwnwseswsene +wwwnwwwnwwwnwnwnwnwnenwnwsesenwnwwnw +swswsewswseswneswswswseeseswswseswswsw +newseeseeeseseeneeeeseeeewe +neswneswwenwesweneenenesenenweeesw +neeeneneneneeeeweneneneeeswnene +eseseswseseseseseneseeneseswenwwsese +neneneneneeneneenwneneneneeneneswswenw +senwnewnweneeneswseneswwenenewnene +neseeewneenesesewsenwswsenwswsenese +nwswnenwnwnwwenwsesenwwsewnwenese +swswwswneswwswswwswswswwenwswwwsw +nwneneneneneeneneswneeswnenenenenenenenene +neseswswswseseneswseseswswseswswswswsenwse +neswnenenesweswswnenenwneneenwsenwnene +swseseseswswwswswwweneswneesewwne +enwnwnwnwnwnwnwwenwswnwwnwwnwenwnwnw +wwwswwswwwwwswweswwswwwee +seneeeneeneneneswneswnwenwnenwnwswswse +nwnwnwnwnwnwwnwnwnwnenwnenwenwnwnwswnwnw +wwseneneseneswnwneeneneswne +nwwenewswnwsewswswewnwnwnenwwnwwwe +sesesesenwseswsesenesesesesesesesesesese +swenweseeeeesesenweseeseneseswsee +swenwswseneswwseswenwneswswwswnwswe +wswnwwwwwwwwwnwwewswwwwwwe +eseseweneeseeeswseeeseeeseenese +swneswnesweeewnweswnwswnenwswswswsww +nwnwnwseswnwewnwnw +neneswnweeeeneeeneneewneneneenene +eseseweseswsenwswesesenwsesewesenewsw +sesesesesewnenwwswsesesweswsesewee +swsewswseeswnwswseswswswswswswswswswesw +sewnwnwswnwwnwnwnwneswnwnenwnwnwewnwnw +wnwswnenenenenwneneenene +nwwneswswneenwnwenwnwnenwnwnenenenwnenw +newswswwsweenwnesenwnwsenesweeswsw +nwnwnwnwnwnwnwnwnwnwsenwnwnwnwsenwnwnwnw +nwnwwnwseenwnwwnwnwnwnwwnwnwnwwww +wwnwseeeneenweswswwenenesewsesenw +swswsesesenwseeswswswsesenwswseseseseswsw +wwswwwnesenewwwwswwwwnwneww +seseseswnwswswswswseswswswseneswnwsesw +weswwswwwewwenwswwwwwnwwnwww +eeeeeneweeeneeeeewseewee +seseseswneseseseneneneseseseswwsewsesw +neneneneneneneneneeeneneneswneewseenw +wnenwnwwswwnwnwewwwwnwnwswwwww +swenwnwnwnenwnwnenwnenwnwnenwnwnwnwnwne +eeenesweeeenweneeneweseeeswne +ewnweeeswwseneneene +neneswneneneneneneswnwenenenwnw +sewwwwenwnenwwwwwsewwwwnwse +wwwsesesewwnesenenwnewnwwsewwsewne +swswwwnewwswwswwswnewwwwwswsww +seseneweweswneneswseeeeswwenwnwne +eseseseesesweswseseseseeseneeeenw +neneneeeenewnenenenenwneswneneneneenene +nwewewwwsenewswsewswsenenewswwsene +neneneswnenwnwneneeeneneneeneswnenene +enenenwnwnwnwnwswnenwnwnwnwnenenenenwnw +wnewswwwswswswwswswswswswwww +swswswswneswswsweswnwswswswswswneseswsw +eeeeeeeeenweeeesw +seseswseseswsesesesesewsesene +wwwwnewswnwsenwwwwsewnewwwww +newsenenenenesenwenwneneneneenewnenesw +swswswswswswswswnweswswnesenwswswswswsesw +newnenenenenenenwesenenewswswnesene +wswnwnwnwnwseswenwseeenwnw +eewseseseeseseseneseeeneewsewe +nenenenenenenesenwenwenewnenenenwnenesw +wsenwsewnwwwenweseswnwnenewnwswwnw +seswenwswswswswswnwswswswswswswswswsesw +nwwnwwnwwnwnwwwswnwnwwenw +neenenenenenwenwwnenwnwnenewnenenene +eeeeneeneenwnewseeeneeeseene +esenwwnwsenwnwnwnwnwnwnenwnenwnwnwnwswnw +eeeseeseeeseeseeseeesesewsesenew +wweeswnewwnwsewnwwwwwwseewsw +seswwwwewwnwewswwswenwwwnene +eseeeseseseewseseeseeeesenesese +eenwesenwweeneswwnewneeeesenee +eeeneeneneswseneenenenenw +seseseswswseswseswesenwweswneswseswse +nwsewneenenwnenenenenenwnenenenewnenene +nwnenwnwnwnwnenwnwnwswswswnwnwnwnwnwnwe +neswnwnwnwenewwwnewwnwswswesenwwne +nwsewnwwnwnwwsenenenenwnwswwnwswnwnww +eeeeeeweeeseeseneeeenweene +seswswwswwwwwwswneswswswwnwswwwsw +nwnwnwnwwnwnwnwnwnenwnweswnwnwnwnwnwne +swweswswswswswwswswswswswwswwnweswwsw +nesweewnwswnenwnwnenenwnenwseeswnene +neseseseeeeeeswsesewseeneeeesese +swnwswseswneswswswswswswswswswwswseswsese +swwwenwnwnwwnwsenwwnwnewnwwwwnwnww +senwseseseesesesesesesesesese +senwnwnwnesewnweenwwnenenwswswnwswnenwnw +enenweenwnwweseesweeseseeesw +swseswwswenwwswsweswswswsweswweswsw +nenwnenenenewseswnesenwnwwneweeneese +esesesesesewseneseseseseseseswsesesese +wewnwnewsewwwwwswswwwwseenwew +nweeenwswsenwnewwewwnwswnwwnwnww +sewnwwnwwnwnesenewnenesenwnwseeenwne +enenewseeeeeneeeenene +eeeeeneeneeesenweeeeneeeesw +neeswwseewwneewswswnenwwswwwww +wswwswwwseswswwswswneww +nwnwnwwnenenesesesenwnwwwnwsewnwnwwnw +swneneenwswenwnwweswwwwnweesewse +nwnwnwnenwnwnwnenwnwnwnwnenwnwwnwesenenw +wswneswswwswswwneewwnwnwweseewne +swnenwsenwnwnenwnesenwnwnwnwnwnwnwnwnwnw +esweswsweeseeseswenwseenwenwnwnwwne +neswseeeeswsesenw +swnwswnwsesweswseswsweseswswswswswswsww +neswneweneneenwenweeswswnwweee +enwswnwenwnewswwnwnwnwnwesewnwnwesw +swswseswswswseseseseseseseswswswseweswne +eneesenweeeeeneeeenwneeswnenee +neneneneneenenwnenwnenenewsenenenenewne +neneseeswneneeneenenewneneenenenenw +seeswseseswseseeeenwenwseseeesenwee +nwnwswwnwneenwnwswsesenwnwseseeeswnw +nwesewnenwewseeneneeeewneeswenee +swseswseswswewenwswswneswswswnwnwseswse +eenweesesweeeseeweeseeeseeee +nenenenwnwnenenenewneneeswnenenenenenenw +sweesesenweseeeseeseeee +nwsenewenwnwnenenenenw +eneeweseneeeeeeeeeesweseese +nwnwnwwnwnenwnwwnwnwnwnwnwwsesewwnwnw +neswswswswseswswswswweswwswswsw +nwnenwewsenwnenwnwnwnwnwwnwnenwnwnwnwnwnw +seneesewsenesesesesesesesesesewsewsese +nenenweeneneenewwseeeenewseswnenene +nesesenwseeseseewneseseseewswseee +swwswswswswswwwwsweswswnwsww +sesewseseseseseesesesesewseesesesesese +swnwswwswwwsewseswwwneswwswwsww +seswswnewswswswswswswseswseeseseseseswsw +eeenwesesenwseseesesewweeseesee +swswswswswswswwswneswswseseswewswswsw +senwwnwnwnwnwnenwnwnwnwnwnwnwsenwnwwswenw +nweesweeeneeneeeneneeeewnenene +enwwwnwnwwnwnwwnwwnwnesenwsww +swseseneeeweesenwseeenewesewnenew +neesesesewseseesesese +esesenwseseswseesesesesesesesese +swswswswswneseseswswseseswswsenwswswsesww +ewwsesesewesenwnenw +wswwnwwnwwnenwnwnwsenwwwewnwnwnwnwnw +neseseeseweseseseseseesewseseesee +eeeneesenwesewnwsweweeeeenesw +neneeneeneeneeeeeeneewesenesw +eeneneeneneeneewneneseneneneenenwe +wnwnenenwnwnwsenenwnwnwnwnwneseewnwnw +sweswswswswswswwswnwswswswswsw +swneswwswwwswwswwwswswwswsw +wneewswneswswswseswwwnwwwwswswsenw +wneseneeeeneeeeeeeewneesww +swneseenesesweswseseneseseeenwsesese +nenwnwnesenenwnenwnwsenenwnenenwnwnenenwnw +eneneswneneneeeneene +neenewnenwnwnenenenwneswnenwnenenwnwnenw +wwwewwwwwwwsewwwnwwwwww +eeeeeewsesweeeeeeeenenwesw +wnwswwsewwswnesenesenewwwswwwesww +nesenwwwswwwsew +wnwnwneswneswnwnwnwnwnwnenwsenwnwnwesenw +nwneseenwwnenwnenenewnw +eseseeeesweeneeseeweeeseeese +swswseswseseseseseseswsesenewswswsenesesw +nwenenenenwneenenesweeeseseneneswnenww +wwsenesenwnenenweneneswnenwsenwwswe +nenenenesenenenenenenwwnenesweeneenenw +neswsenewnenenenewneeneseneenewnwneesw +swsweswswseswseswswswswseswsweswww +wnewwewwseswwwwwwwsenenwwsew +seswswnewswwwnewwweswwswwswswwsw +wnesweenenenwnwesewsweweeeswnw +wnwnwwswnwnenwwwnwnwwnwenwnwwnwnwnw +neswswseswwswswnwwsewseswnewwswswswsw +neesenwwseneswnwwese +wnwnwnwswnwwswnewwnwnewnwnwswnwenww +nwnenwswnwnenesweneneswnwneeswswnwnee +sesesenwseseseseseseswseseesesesesesewse +wwwwswewwwwnewwseswswswwswww +nenenwneswnwnenwnwnenenenw +eswwwnwnenwwwwwewswwwswnwwnew +wnwswwsweswswnwnwswseweswswswsweswww +swswswswswneswswswneswswswswswswswseswsww +wnwnwnwwwnwnwsenwewnwsenewnwnewsw +seesesesenwseswseswswsesenwseseswseswse +eneswsewesenwwneswwswseswswswwswswsw +seswnwenwsesewnwesesesesesweenenwe +eswseeweeswwsenwesenweeewnwe +seswnwnwewnwnwnwswnwenwnw +swwnwwswwwswwswsewswwwwwweswne +enwnwnwnewnwnwwnewwswwnwswsenewswsw +nenwnenenwnwnwnenewenenwewenwwswse +swewswwwswnewnwswnwseswwwswwwswsw +eeeeeseeewswswswnenwnweeneneene +nwswswswswswewseswswenwseswsweseswswne +neeeswneneneneneeneneneswnenwneeene +neenenenwnenenesweneseneeesewneseew +nwenenenenenwnesenesewnenenenenenewne +weseswwneesenewwsenwnwwsweswwsw +nwnwswwnewnwnwnwwwsenwwwswwneww +nwnwsenwnenenwnenwneenwnwswnewnwnenw +nenwneseswnwswwswwwnweseesesewnwsene +swswswswswswwsweswwswswwnwswswneswse +seswsenwsesweseseseseswseseseswseswswse +seswseseseseseseseseeseseswsenwswsesese +wwnenwwnwnwwwnwwwwnwnwwwwwse +seesesewsesesenwesese +swnenwwnwswsesweswnwnenesewswewwse +seseseswsewwwesesenwsesesweneswenw +senwnwnwwnwnwwnwnwswesenwnwwnwwnwe +wnwwwwwwwwnwwewwwwwwew +neeeneeenesenweeeeneneneeee +swwwseeeneenweeneeeenwseswnwswse +wwnwwswswswewseswswwswwswwnwwe +wswneeeeneewnwneneseseseeewwew +seseeseeswswseesewsenwesesenwse +swseneseseseseswswwesesenwswswseseswnese +wwnewwnwwswwnwwwnw +nwneswnwswswswswswseewswswswswswswesw +seeneseneseseweswwwsesenwwneseesee +wnwsenesesesesesesesenwseseseswsesese +sewwwwewswwwwwsewwwnwnw +wswswsewneeswswswswswswwswwswwwswsww +eeenenwwneneneneneweweneewneswnee +nwwnwsenwwwswwwwnwnwwnwnwnwnwnewnw +swswswswseswswswneswswswseswswswswswswnwsw +sewnenenenwnenenenenenenenenenenesenwnene +swnweswnwnwsenwnenenwswnwswweeeswenw +wnenenwneenwseswnwwswnwswwwswwnwne