diff --git a/2018/day20/day20.go b/2018/day20/day20.go new file mode 100644 index 0000000..fafa156 --- /dev/null +++ b/2018/day20/day20.go @@ -0,0 +1,157 @@ +package main + +import ( + "bufio" + "fmt" + "os" +) + +const ( + CLEAR_SCREEN = "\033[H\033[2J" + + MAX_INT = int(^uint(0) >> 1) + MIN_INT = -MAX_INT - 1 +) + +var input []byte +var currRoom *Room +var facility *Facility +var pathStack []Room + +func main() { + input = stdinToByteSlice() + input = input[1 : len(input)-1] // Trim ^...$ + part1() + part2() +} + +func part1() { + facility = NewFacility() + currRoom = &Room{0, 0, 0} + for _, v := range input { + switch v { + case 'N': + facility.move(0, -1) + case 'E': + facility.move(1, 0) + case 'S': + facility.move(0, 1) + case 'W': + facility.move(-1, 0) + case '(': + pathStack = append(pathStack, *currRoom) + case ')': + currRoom, pathStack = &pathStack[len(pathStack)-1], pathStack[:len(pathStack)-1] + case '|': + currRoom = &pathStack[len(pathStack)-1] + } + } + var longest int + for _, v := range facility.rooms { + if v.dist > longest { + longest = v.dist + } + } + fmt.Println("= Part 1 =") + fmt.Println(longest) +} + +func part2() { + var kilo int + for _, v := range facility.rooms { + if v.dist >= 1000 { + kilo++ + } + } + fmt.Println("= Part 2 =") + fmt.Println(kilo) +} + +type Facility struct { + minX, maxX int + minY, maxY int + rooms map[string]*Room +} + +func NewFacility() *Facility { + f := Facility{ + minX: MAX_INT, + maxX: MIN_INT, + minY: MAX_INT, + maxY: MIN_INT, + rooms: make(map[string]*Room), + } + return &f +} + +func (f *Facility) key(x, y int) string { + return fmt.Sprintf("%d,%d", x, y) +} + +func (f *Facility) move(xd, yd int) { + n := f.getRoom(currRoom.x+xd, currRoom.y+yd) + n.dist = min(n.dist, currRoom.dist+1) + currRoom = n + f.setRoom(n) +} + +func (f *Facility) getRoom(x, y int) *Room { + if v, ok := f.rooms[f.key(x, y)]; ok { + return v + } + return &Room{x, y, MAX_INT} +} + +func (f *Facility) setRoom(r *Room) { + f.minX = min(f.minX, r.x) + f.maxX = max(f.maxX, r.x) + f.minY = min(f.minY, r.y) + f.maxY = max(f.maxY, r.y) + f.rooms[r.key()] = r +} + +func (f *Facility) string() string { + var ret string + for y := f.minY; y < f.maxY; y++ { + for x := f.minX; x < f.maxX; x++ { + if r, ok := f.rooms[f.key(x, y)]; !ok { + ret += " " + r.key() + " " + } + } + ret += "\n" + } + return ret +} + +type Room struct { + x, y int + dist int +} + +func (r *Room) key() string { + return fmt.Sprintf("%d,%d", r.x, r.y) +} + +func min(i, j int) int { + if j < i { + return j + } + return i +} + +func max(i, j int) int { + if j > i { + return j + } + return i +} + +func stdinToByteSlice() []byte { + var ret []byte + scanner := bufio.NewScanner(os.Stdin) + for scanner.Scan() { + data := scanner.Bytes() + ret = append(input, data...) + } + return ret +} diff --git a/2018/day20/input b/2018/day20/input new file mode 100644 index 0000000..6c2e5fc --- /dev/null +++ b/2018/day20/input @@ -0,0 +1 @@ +^NESEESSSESENNNW(NENNNNESENNWWWWNWWNNNWWSESSSSEE(NWES|)ESWWS(ESEEN(W|NN)|WWSSWWWSEESWWSWNNNNEENE(NNNE(SSEWNN|)NWN(E|WNWWSSWSWNWWWWSSESSWNWWWWSWWWNENWWSSWWSWWNENWWWWSWSSWSSSSWWWSEEEESSSSESSEESSSWNNWWWSWSEENESSEESEEESSSWWSWWSSWSESWWNWWNNEE(SWEN|)NWWWSSSSSESWWNNNNNNNEENENNE(NWWSSWNWNWSWNNNNNEEES(ENNNWNNWWN(NNWNENNWNNENWWWSWSWNNWWSSE(N|SEEEE(S(WWSSENESSSE(N|SWWWSEEESS(WNWWSSSWSWSSSWNWWWSWSESWWSESEEN(W|ESSWWWSEESWWSESSSSSESSWWWSEESWWWNWSSEEEEESWWSWSWNWWSSE(N|EEENESSENENN(W(W|S)|NNENNW(WSEWNE|)NEENWNEENWNNWNWW(NEEESEENENWW(S|WWN(WSNE|)NESENEES(W|ENEE(SWSSSSE(SWWNN(NN|WSWWSESE(N|ESSENESSWSWNWWW(NENESNWSWS|)SWSESEEN(NWSNES|)ESEEN(W|EEENEESSW(SWSWWN(WSWSSESESEEENWWNEEN(WWW(W|S)|NENESSESSSENESSSSEESSEEESWWWWSESWWNNWWWNNNWNWSSSE(N|SSWS(WWWWWNENWNWWSESWS(WNNNWWSWSS(WWWNWWWNNEENWNWWWWSWW(SESSS(WNNSSE|)EEE(EEE|NNNW(SSWNN|NEE))|NNNES(S|ENESENENN(EESEESWWW(N|S(ESEESSW(N|S(WW|ESENNNNES(S|EENESEEENNNWWWNWWNW(NENEENWWN(WSSNNE|)(EEEE(E|SWSESSES(ESSESENE(N(EEE(SENESSWSSEEN(ESNW|)W|NNW(S|N(E|N)))|WW)|SSSWNWW(N|SESEE(SWWEEN|)E))|WWNWWNEE(WWSEESNWWNEE|)))|N)|WSESS(E(NESEEESW(ENWWWNSEEESW|)|S)|W(WW|N))))))|W))|WWWWNW(SSEEEE|NNESE(S|NNE(NWWNW(SSEWNN|)NNNNENENENNWNWSS(SW(NNNNNEES(ENESS(W|SSSSSES(ENE(SEWN|)NNWNW(SSEWNN|)NE(ESNW|)NNNNNWS(SSS|WNWWNNWW(SESWSEEE(WWWNENSWSEEE|)|NEEENWNNWSSWNNNENNW(NNEENNNEEEESWWWSSSSSEEENESESS(WNWWWW(WNNNWESSSE|)SEESSW(NWES|)SSE(SWWNSEEN|)NENN(E|N)|EEENNWSWNNWNEESENNESE(SWSNEN|)NNNWWS(E|WSWWNW(SWS(WW(SEWN|)NEN(E|W)|E)|NEE(S|NNWNEEESWS(EENNE(NNWSWNWSWWWWNENNNNWWWWNWSSESESE(ENWN(W|E)|SWWSSWWS(W(NNNNEN(NNNNW(NEENWWNNNNNEESWSESS(WNSE|)ESSS(ESEEEENNEEESEES(E(ENNESSEEENENNWWW(SE(SWEN|)E|WWNNWSWWS(SEE(NWES|)S|WWNENENE(S|NNESES(W|EEESEENWNNEENWNNENWWNNNESEENWNEEEESWWSEESWWW(WW|SEEESWSSEESESSENEENNENNWWS(SSWNWNW(NEE(NENWWW(SEWN|)NNENWNNEES(ENNEENESSEESSESENESSSWWN(WNWWSSWS(WNNENWWN(WSS(W|E)|ENNESSENES(NWSWNNSSENES|))|ESSENNE(NWNSES|)SEEEEN(WWW|ENENNNNWW(SSE(SWSNEN|)N|NNWNNENNNWNEEESESSENNNWNNNNWSSSWWNWWWNWNWSWWSWNWNWNNWSSWNNWSSWWSWWSSESWWNWNWNNNNWWWNENWWSSSEESWSESWWWSSSENNESEESSSWNNWSWWSSSSSESSWSSSSSSWWNWNNNWNNESEE(SWSSE(S|N)|NN(NNWNNE(NWNNWSWWSWNNWNWNWSSSSWSSSWWNNNE(SS|NWNW(NENENNEEEENNEESESSWNW(SS(WNWWWSSWSES(NWNENNSSWSES|)|SENES(SWEN|)ENESE(NNNEN(ESNW|)NNNNNWNENNNWSSWWWSWNNEEENNENWNNWNNWSWNWSSESSSEE(NNW(S|N)|SWWWWNNWSSWNNWWSESWWSSSW(SESSSW(SEEENNEEEEENWN(NNNWSWNWSSSWW(S(EEENE(NWES|)S|SS)|NENNWS)|EEEE(NWES|)SWWSESS(WNWWWWWSS(ENSW|)WWWWSS(ENSW|)S|SE(SWSEWNEN|)NNE(N(N|W)|SS)))|NN)|NNNNENNENENNESSES(WW|E(ESSNNW|)NNWNENNWWWS(WWNW(SSES(ENSW|)WS(SS|E)|NNESE(S|NESENEEEESW(SSEEEEESENESEEEEESESESWWWN(E|NWSWWWWS(EESEE(NWES|)ESWWWSESEESSSSEENWNNESEENNEENWNWN(EEENWWNW(S|NEEEEENEENWNNWSSWNNWWN(EEEEESENESEEEEN(WWW|ESSWWSWSWWW(NEN(E(S|E)|WW)|SSENEESWSWSESENNENNEN(EN(W|EESWSESSSEESSSEENNW(NNWWNNNNNWNN(WSSNNE|)ESEEEEN(ESEEESWSEEEENWWNN(EEEEESSWSW(SSWSESWSWSSEEN(NESSEEEESSWSEEEESESENNNNWNNWNWSW(WWNEENNWWS(WW(SESWENWN|)NENEEEEESES(WWNSEE|)EEENNNNESSSSSEEEENNNNNENWWNEEN(WWWWWWSES(ENESSWSEE(N|SSSWNW(NEWS|)S)|WWSSSSWNNNNNN(ESNW|)WSSSS(S|WNNWSWWS(EE|WWN(WSWS(E|SS)|ENEENEENWWWSWNWSS(NNESENSWNWSS|)))))|ESESSEESWWW(NN|WSEESSESESWWWSEEEENENWNWNEN(WWSNEE|)NNNNEN(WWSW(NW|SE)|EESESWW(N|WSSEEESESESSWNWWW(SSSSSWSSWSWWSWNWSWNNEENENN(WWS(SWWNENWNN(E(NE(NNWSNESS|)E|S)|WSSSWSESWSESWWWSWWN(NNES(EENWNWNNNW(SSS|NW(N(EESEEESWS(W(SESNWN|)N|E)|W)|S))|S)|WSSESWSEENNESSESEESWSEESEEESSESWSSSWSEESSSSSENEENESSSWSWSWSESESWWWSSSWNWNWNEE(NNWSWNWSSSWNNWSWNWSSEESSENEESWSESWWSWSSSSSWNNWNNNNE(SSS|EN(WNWWS(E|WNWNENWWWNNENNESESS(W(W|N)|E(SSEEWWNN|)NNNESENNEENNESENENE(NNWWWNNWNNWWNEEESE(ENNW(S|WWWNNN(WSSSWNNNNN(ESNW|)NWWSSE(SWSWSESWSWSWNWNWNNWSSWWNWNNNENENNWNNWNNEES(SES(W|SESWSEESWWS(W(S(WNSE|)S|N)|EEEE(SWS(SEN|WN)|ENWWNNE(ESWENW|)NWNENWNENWNWNWWWWS(WNWSSWSSWWWNENE(S|NWWNWWSWWSSWNWSS(WWWNNWNWWSESSSE(S(WWNWNN(ESNW|)NNWNWNWWSWNNNWSWSWWSEESE(NN|S(SSEES(W|ENEENWN(NW(N|SWNWSSEE(WWNNESNWSSEE|))|E))|WWWWN(EE|NWSWWSW(NNEENNEE(SWEN|)NNN(EESE(SWW(SEWN|)N|NENE(SS(W|E(N|SSENNESSENNNNEENN(WSNE|)(N|ESSSWSW(N|SEENESE(NNWESS|)SSWNWWSS(E(N|EEEENEN(WWSNEE|)ESS(WS(WSW(SE|NW)|E)|ENE(S|ENESENESSEE(NWNN(EEEE(SSWWN(W|E)|E)|WWWNWWS(E|SWNWNENNNWNW(SSESNWNN|)WNNESEENE(EEESWSSSE(NEN(NNEWSS|)W|S(S|WWNW(S|NN(NESSNNWS|)W)))|NWN(E|WS(S|WWN(WSSSSNNNNE|)E)))))|S))))|WN(W|N))))))|NWNNWSSWS(WNN(E|WW)|E)))|W)|SWW(SES(S(WNSE|)S|ENE(S|EENNWSW(ENESSWENNWSW|)))|N(E|WWNNNNWSSWWNENNW(NNWNEWSESS|)S))))))|E(N|S))|NN)|SENEESENNN(WSNE|)E(E|N|SSSEEESENE(NN|ESWSWWWSSWSWSESEENWNENEN(W|E(ENEWSW|)SSWSESSSWN(WWSESEEEEEEN(WWWNSEEE|)ESSSWWN(WSWSSWWSWWNWWWSEESSENESESESSSWS(ESSSENNNNENNW(S|NNWN(NEENNEESWSSENEEENNNN(W(SSWSEWNENN|)N|EESEENE(EESSESWSEEE(E|SWWWWSESWWSWW(WWWSWNNWSSWSSW(WSSENESEE(SS(WWWWNEEE(WWWSEEWWNEEE|)|EE(NWES|)SWSEE(N|SENESSWWWWW(N(EE|NN)|WWSSENESSSENESEENNE(NWWS(WNWSNESE|)S|SSE(N|SEESESWSWWSWWSEESWSSENENENWNEEEN(W|EEEESSSSEESSSEENNW(NNWNW(S|NNESENESS(W|SEESSEEENWWNNWWNNESENNNWWNWWWSS(WWNWSWNWW(SEWN|)NNEEENWWNNWSW(NNENEENESSESWS(WNNWESSE|)EEENWNEEESWSESEEEENEENNESSESSENENWNNNNENESESEESESSENENWNNEES(W|SENNNWWNWWWWS(WNNNNENWWSSSWNWNWNWNEEE(S(W|S)|EENESEENEEESSEENENEE(NNWNWWNWNEESEE(NWNENNNNWSSSWSWWWSWWSSEE(NWES|)SE(EES(E|WW(S(S|E)|WWWN(WSW(NWSWWWWWNENWNEENNNNNESEEESWWWSSSES(SWNWSNESEN|)ENESENNN(EENNNNWWWWW(SEEESSENN(SSWNNWESSENN|)|NWSWWSSSWSESWWNNNENNNWSWWNENNWNWWSWNNNWWNWSWWW(SEESSSSW(NNNWESSS|)WSSEEN(W|ENENE(SEEE(SSWWSSESENN(W|ESSE(SSWSWNWN(WNW(SSESSW(SWSWSEENEEN(N(N|EESEE(NN(WSNE|)N|S(WSSSSWSESWSSENEE(EN(WWNE(NWNSES|)E|EE)|SS(SS|W(N|WWSSWWNNWW(NEENE(NNWSWNNENNW(WWSSWSEE(NNEWSS|)SWWWSEE(SWWWS(WNN(WWNSEE|)ENNNES|EEE)|EE)|NEEE(NWNSES|)SSW(N|S))|SSS)|SSSE(NN|E)))))|EEEE)))|W)|N)|NWSWNN(WWSSE(SWEN|)N|NEE(SWEN|)N(EE|W)))|EE)|NNN(W|E)))|N(N|E|WW))|NWNN(ES|WSSS)))|NNWSSWWNENNNWSW(S(E|S)|WWNWNNEEE(S(SWNWESEN|)ENEEESW(SSENENESESS(WNWSSE|EENNENESENNEEESWSESSSSSESW(WNWNNNE(NW(NN|WSSSW(SEWN|)NNW(NE|SW))|SS)|SSEESENEENNWWNENNESES(SSESES(WWNSEE|)ENNENWW(S|NNNW(WNENWWSWWSSW(NNNNW(NNNWNENNWWNWSSWSWNNWSSWNN(WSSSW(WWSEEEE(SW(W|SS)|NEE(SWEN|)EEEN(NEWS|)W)|N)|NENNW(S|NNESESENESEEESENESSW(SESSSW(NN|SEEEEESS(ENESSWSEESSW(N|SEEEESSWSSW(WNENNE|SESSW(N|SEENNE(S|NNEENNWW(NEENWNW(WNNEENE(NWWNNENWWWNWNENNESSEEE(NNWSWNNNWSWNNEEESE(SWEN|)NNWWNNWSSWWWSSSWWWNNESENNWNEEEENNEENEE(SWSESW|NWNENNWWS(E|SWS(E|SWWSSWWNNNNENEN(WWSWSWSWWSWSSSSWWWS(EEEEE(SSSWNW(NEWS|)SSESSS(WNNSSE|)ENESEEE(S(WW|SSSESE(SWSEWNEN|)NNE(SEWN|)NNWW(N|S(S|E)))|NWWNENE(N(WWSW(SWNSEN|)N|E(NNN|S))|S))|NWNEE(NWWNEEN(W|E(N|SS))|S))|WNW(S|WNEEEENWNNEE(S(SS|W)|NWWWSWWW(WN(ENNW(N(W|EESES(WSEWNE|)ENN(W|ESSEEE(S|EENEN(E|WWWWS(WNSE|)EE))))|S)|WWW)|SESENES(NWSWNWESENES|)))))|EESWSSW(WSSNNE|)N))))|S(SSSWENNN|)WWW)|SS(WW|S))|S)|S(WSSNNE|)E)))))|WWN(E|WW(SSENSWNN|)W)))|WWNWWWWSES(NWNEEEWWWSES|))))|SSSS)|SSS(W|EE))|SSS))|W)))|W)|NNN))))|WWWSEE)|S)|E)))|N)|S)|SSW(N|WSESWSWS(WNNWS(WWWWN(WSNE|)EEEN(EEESNWWW|)WN(WSWN|ENW)|S)|SESWSESSW(SESWSEESSE(NNNWNNNNNE(SSSS|NWN(EN(W|NN)|W))|SSSWNNWSSSSENESSWSESSWSESWWNNWSWNWNNEES(E(E|NNWNNWSSWNNWNWWSESESWWNWSWSSENEEESWWSEESSSSSSWSSSWNWSSSEEESEESENNWNW(NENNESSSENNEE(SWSESWWSESSW(N|SEE(NNN|SSSSWSWSSSENE(N(N|W)|SSWSWNWWWSESE(SWSSESWWSESESWWSWS(WWNWWS(E|WWWNNENNESS(SWEN|)EEENNEE(S(E|WS(E|S))|NNWNEE(S|NNWSWNNENWNEEENE(NNNENENNWSWNWNWSWSSWWWWSSWWSEESENNNESSS(EEENNE(NW(NE(NWES|)E|WSSWNN)|S)|SSWWN(E|WSSWNWSSEEENEESWSSSWWS(WWWWSEESWWSESWWNNNNNEENWWWNWNENESENNWNENES(EN(NWWNNESENENE(NENWNNENN(EESSW(S(SSENNE(SS|ENWN(EESEES|N))|W)|N)|WSWSSSWS(E|WWWS(EEE|WNWWNNNWWWWWWNWWWSSSSENESSEENEESENNE(SSEESWWSEESES(ENNNWS|WWNWSWWWSESSWWSSWSESESENNNW(NEEEE(SSWSW(NNEWSS|)SSWSSENESSWWS(WNNNWSWSESWWWNWSWNWWWS(WNWWWWWNEEENWNWNNWWWWSWWNWSSESWSSS(WNWNNWNEE(SS|NWWWNWWWSWNWNEEENWNWSWNWSWNNEENNWWS(WNNWWSWWWWWSEESESEEEE(SWWWSWNWSWSSWWNWWNWNENWNNESENNNNENNEEENNNNWSWSS(ENSW|)WNNNWWSESWWSWWNNE(S|ENNENNWSWNNNNNNESSSES(EEEEESEENEESWSEESSSSESSSWNWSWNWNNW(NEENWN(EESSSWSEE(WWNENNSSWSEE|)|NWS(WWN(WN(E|WSS(ES|WNN))|E)|S))|SSSWWWSS(WSSSSSW(N|SEE(S|NEN(NWSNES|)E))|ENEES(EN(EEEESENNNENNW(NNNNW(SSS|NNNESSENENNNWS(S|WNNWNENENWWNNNWSWNWNWNNWSSWWNNWWWNWNNNNNWWWWNEEEEENWWWNNNESEES(ENEEEESENNESSSSEEE(NNWW(SEWN|)NNNNENN(WW(N(E|W)|S(SSWWWNWSW(N|S(EEE|WNWSWNWWWSSSSWWNNE(S|NWWWNW(NEWS|)SW(SWSESS(WNSE|)SSESEESWSS(WNNWNSESSE|)ESSENEEEE(NWNWSWNNW(NN(WNN(ESNW|)WW(SESNWN|)NEENNWSWN(SENESSNNWSWN|)|EEESW(W|SEE(NN|S)))|S(S|W))|ESSESWWNWWSESW(SSSENNESSEEESEEEEENWWNEEEEN(ESS(WWSEESSWWSEE(ENSW|)S(SS|WWWW(S|NWWWNEN(WWSWNW(SSESE(N|EEE)|N(WWWSSWSWSWNW(NEENEWSWWS|)SSSENESSWWSSSWWSS(WNNWSSWWW(NEENNWSWN(NEEENEN(WNWESE|)EESSW(N|WS(EE|W))|WW)|S(W|E))|SSSENNENN(WSNE|)ENNESE(SSW(N|SSESEEESS(WNWWSESWSESWW(SESEE(SSE(N|S(WWNNWWN(SEESSEWNNWWN|)|ESEN(NWES|)EESWSWWSES(WWWN(WSNE|)E|ENENESENEENNNESEENNW(W(NEEESSE(NN|ESEESWSEESS(EEE(NWWNE(E|NNWW(SE|NE))|E)|WWWWWNENE(SEEWWN|)NWNWSSWWN(WSSS(ENESNWSW|)WW(NEWS|)WWW|E)))|WWWSESSWNWS(NESENNSSWNWS|))|S))))|N(W|NNN))|NNNNNWN(NN|WSSS(WNSE|)SSENNN))|ENNNWWN(W(S|W)|EEE(NWES|)S)))|NN(WW|E(SENSWN|)NWNENWNEN(SWSESWENWNEN|))))|E))|EEE(EE|S(S|WW)))))|E)|WWWWWNN(EES(E(N|E)|W)|WSSS(SENSWN|)WNN(NNENWW|WW(SESWENWN|)W)))|WWNEN(NEEE|WWSS)))|N))))|E))|EESE(SWW(N|SWSSEN)|NE(S|NNW(SWEN|)N)))|SWSWNWWWSSEE(NWES|)EEESENN(NEN(EEN(EENEE(NWWWSNEEES|)SWSSWNWSSSWSESWSEENEENNESESWSWSW(SWNWWSWWSW(NWWNNWNE(NWWWSES(WWNWS(WWWNWNEENWWNNESENNENE(NWWSWS|S(EENWESWW|)SWSESWS(SWEN|)EE)|SS)|SES(SEEWWN|)W)|EESWSEENE(NNNN(ENW|WSSS)|S))|SSSENNESENEN(EESSSSESENENENESSEENESEENWNWWW(S|NNNEENWWWSSWNNW(SSS(EE|WNN(WSSSE(SWEN|)E|N))|NEENWNNNW(WW(NE(NWES|)EEEESSS(WNNSSE|)ESS(WNSE|)ENEE(NWWNENWNW(SS|NWWNNE(NWES|)SEEES(W|SEES(WSNE|)ENEN(ESNW|)WWN(WSNE|)E))|ESSSSSS(WNNW(WWSEEWWNEE|)NNNESS|EEENESSSEESENNWWNNNWNN(WSWWSSENE(WSWNNEWSSENE|)|EEEESSSS(WNNW(N(W|E)|SS)|SEENESENN(WWNNN(ESSNNW|)W(NWWNN(WWSS(ENSW|)W|EN(ESSWENNW|)W)|SSSS)|ESSENNESEESENNESSESWSSWSWNWSWWWNNN(ESSENNE(NW|SEENW)|WSWSWWNN(E(E|S)|WSSWSSSESSWWSESE(SSWSSWWWWNNESEENWNWNE(ESEWNW|)NNWNNEE(S(W|E)|NNWSWWSSWSWSESS(WSSSWNWSWSWNNNWSWSWNNNNNNWNNWWNNWSSSSWNWSSESWWSSSENEEEESSSWSSWSEESESESENESSENNENENEESENNWNEN(ESESWSSSWWW(N|WSESWSW(NN|SEES(EEENENENNNENNW(NENWN(W|EESEEN(WNNSSE|)ESSEEN(ESEEE(NWWNSEES|)SWWWWWSSWWSEEE(SWWWSWWW(NEENW(W|NENWNEN(ESSENSWNNW|)W)|SWSESESWSWWW(SSEEN(W|EES(W|EEEE(S|NNNWWNW(NN(WSNE|)ESESE(ESS(E(N|E)|S)|NNWNEE)|SS(SEENWESWWN|)W))))|WNWNEESEENWN(SESWWNSEENWN|)))|NNESSE)|W))|SW(N|SSSWNWWSS(W|SEN(N|E))))|WWWWNWN(EESNWW|)WN(WWSSWSS(ENEN(ESESNWNW|)N|WNWNENNWSW(WNWWNNENWWNEN(NENN(ESEEN(NES(ENSW|)SSWSWW(NEWS|)S(WNSE|)EESEESS(SS|WNWWNWSS(W|E(S|E))|E(E|N))|W)|NW(SS|WNNNENE(SSWSEWNENN|)ENNNENWNENN(ES(EEEESS(WNSE|)EENWNEEN(WWW(W|N)|ESSEEENWWNEENEN(W|ESSE(EES(WWWW(SSWWWWW(SESSEENWNEEE(ENNEEWWSSW|)SWSSWWWWSW(NNN(NWS|ES)|S(EEEEN(WW|E(SSWWSNEENN|)E)|S))|N)|N)|E)|NN)))|SSS)|NWN(NE(S|N)|WSSESWW(NNN|S(ESSSS|WN))))))|W)|SS))|E))))|WWSW(N|S(WWS(SWNWW(SEWN|)WNWNEN(NNNNNWWN(WSS(WW|EE)|E(NWNEWSES|)E)|ESEE(SWWEEN|)(EE|N(N|W)))|E)|E))|NNN)|ENN(N|E)))|NEENWNENESESWSEEENNNEESSEEEENESESWWSW(WN(E|WSWW(WW|N(NN|E)))|SSEES(EENWNEE(S|NNW(SWWSWENEEN|)NENNESEE(SWWSNEEN|)NWNWNNEES(W|S|EENNENNWSWWS(ESNW|)WWWWWW(WSESSENEN(W|ESSWSSWNWWWWS(E|WNN(EENESNWSWW|)WWWWS(WNN(N|WWS(E|W(NWSNES|)S))|SS)))|NEEEENWWNWW(SEWN|)NW(S|NN(WSWNWSW(SEWN|)WN(NNWESS|)E|EES(W|ENEENE(SSSS(EE(SWWSNEEN|)EENWWNWS(NESEESNWWNWS|)|WWN(NESNWS|)WW)|NWNWNWSWSEESWWWWNENNNWNNNEESS(WNSE|)ES(WSNE|)ENESES(E(SWEN|)ENWNNNWS(WWWNN(WWNNWSW(N|WS(SSE(NNEWSS|)SWSSSEN(ESNW|)N|WWN(E|WWWWWW(NEEEWWWS|)S(ESNW|)WWW)))|EE(SWEN|)EEEESSEES(WWWNNSSEEE|)EES(W|ENNNENWWSW(SEWN|)WNW(NN(EES(ENNNWSW(ENESSSNNNWSW|)|S|W)|WWNNWNWWW(NEWS|)SEESESWS(EEE|W(NN|W)))|S)))|S)|W))))))))|WW))))))))))|WSSWNN)|S)))|WW|N))|N)|W)|W)|W))|WW)))|S)|N)|W)))|W))|NWN(N|WW(SEWN|)W))|E))|EENN(WSNE|)NNESSESS(WNSE|)E(EEEEE|NNNE(NWN(WSSNNE|)E|E)))|EE)|EEEEE(NWWNNENWWNENE(N|SE(SSSWENNN|)N)|EEE))|NNN(WWSESW|ES(ENSW|)S))|S))|NWWSWWW(S|N(WWNEWSEE|)EE)))))|S)|E(S|E))|SSSS(ESE(SWEN|)EN(ESNW|)W|WW))|ESSENNE(NNN|E))))|S))))|EENESEENNW(S|NN(ENE(SS(W|SSS)|NWNNN(WSS(W|SS)|E(SS|N)))|W)))|N))))|NWWNENNWN(EESSSNNNWW|)WWW(N(N|EE)|SESE(N|E|SWW(SSW(SSWWEENN|)N|N))))|S))|W))|N)))))|ES(E(NEWS|)S|W)))|S(SS|E))|EE(NWES|)EE)))|S)))))))|NNN(WSSNNE|)E)|NNNENN(WSWNNW|ENEEENNESSSS(WWN(W|E)|EENNW(NNESE(NN(WWWWN|NESSS)|SS)|S))))|S))|NWW(W|NE(E|NNN)|S)))|W))|WWNWSS(S|WWNWNEE(NNEEE(S(ENSW|)(S|WW)|NWWWNWWWNWSSWNW(WSESEEEES(ENNWWEESSW|)WSSS(E|WWWNNN(WNW(N|WWSWWW(NEEWWS|)SSSESSWSWS(EENEENE(SSSWW(WWS|NE)|NNENWWW(SS(ENSW|)S|WNEEENESESSSWSEEEEENWWW(EEESWWEENWWW|)))|WNNWWWSEESWWS(SENSWN|)WNWWNNN(NNWWWN(W(SSEEESSSWNNWWSSSSW(SWSES(ENNENEE(NWWNNSSEES|)EE|SSSSWNNW(SS|N(N(ESNW|)N|W)))|NNN(NNNWESSS|)WWWWNWS(NESEEEWWWNWS|))|NENNWSW(ENESSWENNWSW|))|EE)|ESE(SWEN|)NENEEEE(S(S|WWW|E)|NNW(WSE|NE)))))|EESSWN))|NNNNNNEEEEENEE(SWSS(ENEES(W|S|ENE(N(WWWNSEEE|)E|S))|WNWWSSE(N|S(SEEWWN|)WWNW(NENWESWS|)SS))|NWN(E|WSWNNE(E|NWWW(NNENWNN(WSSNNE|)E(N|ES(SENNESS(ENNEWSSW|)SWSW(W|N)|W))|SESSS(WNWWS(WNW(SSEWNN|)(W|NE(EEE|NWN(N|E)))|E)|E)))))))|S)))|E)|N))))))|EESE(N|ESSS(WNNWESSE|)SS)))))|W)|N)|ESES(EENWESWW|)W))|S(SSEEWWNN|)W)|SSSE(S(SSEWNN|)WWWN(ENSW|)WSWSWN|NE(ENEWSW|)S))))|E))|S)))|E)|EE(ENSW|)SWS(SWEN|)E)|NW(NEESEWNWWS|)S)))))|E)|SSENESS(ESNW|)WW)|W)|NN(WW|E))|WWW)|WWW)|S))|W)))|WSWWWSWWWWW(NWWS(WWWW(NEN(W|EE(SWEN|)EEEESEEN(W|E(EEE|S)))|W)|E)|SEEEEESE(S|NEN(EEESWWS(EEE|W)|W)))))|WWWSESS(WNWWEESE|)E(N(N|E)|S))|WNN(WNSE|)EEEE))|WW)))|EE))))|SS))|N)|SSSSSSSENESESSWSWSSESEESWS(ESESWSW(NN|SEEEENEEE(SWSSWWN(ENSW|)WSSESWWNNW(NEWS|)S|ENNN(E(EENNENNNN(WSSSNNNE|)NNNNESSSEE(SSWW(NEWS|)SSEE(NWES|)SWSW(N|SS(WNNSSE|)ENE(SSWWEENN|)EN(N|W))|NEE(SWEN|)ENNESSEENWNEE(EEENWNENESSENNNEEESWWSEESEEE(NWNEENWNWNWN(WW(NEEWWS|)WWWNWNWWSESSWWN(E|WN(NESNWS|)W(SSESESES(SWWS(EE|WWWNNENE(S(SWEN|)E(N|E)|NWWSWNWW(SESSSSE(SWWNW(NWWW(S|NE(NWES|)EEE(N|S))|SS)|NNN)|N(NW(W|NNNN)|E))))|ENN(W|ESENN(WNSE|)EEEES(ES(E|SS)|WWW)))|W))|EE(E|S))|SSS(WNNWW|EN))|SS))|SS)|WSSWNWNWSW(NNNW(SS|NWNEESESSENNE(SS(E|S)|NWNW(WWW(WS(W|S)|NNESEENNNWS(S|WNNNW(SS(S|W)|NEE(NWN(E|N)|ESEEN(E(NWES|)SSSWS(W(NN(WWNSEE|)E|SS)|EE(N|S))|W)))))|S)))|S(SWEN|)EE))))|WNWNW(SSEWNN|)NNNNEN(E|W))))|S)|E)))))|E)|W)|S)|W)|E))))))|S)|WWWW(NEWS|)SSW(N|SSE(SWEN|)E(N(NN|W)|E)))|W)|SSSS)|ES(SWSEWNEN|)E)|SESSWN)|EEEEEE(SEWN|)NWWNWS))|SSEENW)|S)))))|S)))|WWS(SSWNNN(NEN|WSS)|EE)))|W)|S)|E)|EEE))))))|EEN(N|W))|E)|EEEN(ESNW|)W)))|EN(W|E))|N))))|NNN)|NWNWNWSWWS(WNW(S|NN(ESEENEE(NNNNW(NENWNSESWS|)SW(N|WSS(EENWESWW|)S)|ESE(NESEWNWS|)S)|WW(SE|NE)))|EEE))))|SSSE(ENWNSESW|)SS))))|ENNESSE(WNNWSSNNESSE|)))|E)|N(W|N)))|EEESSE(SSSENSWNNN|)NN)|SWNWSSEES(NWWNNEWSSEES|))|SSS(W|E(NEE(SWEN|)N(WNWS|ESEN)|SS))))|S))|S)$ diff --git a/2018/day20/testinput b/2018/day20/testinput new file mode 100644 index 0000000..402c3bb --- /dev/null +++ b/2018/day20/testinput @@ -0,0 +1 @@ +^ESSWWN(E|NNENN(EESS(WNSE|)SSS|WWWSSSSE(SW|NNNE)))$ diff --git a/2018/day20/testinput2 b/2018/day20/testinput2 new file mode 100644 index 0000000..6107601 --- /dev/null +++ b/2018/day20/testinput2 @@ -0,0 +1 @@ +^WSSEESWWWNW(S|NENNEEEENN(ESSSSW(NWSW|SSEN)|WSWWN(E|WWS(E|SS))))$ diff --git a/helpers.go b/helpers.go index ff2feb6..66caadb 100644 --- a/helpers.go +++ b/helpers.go @@ -10,6 +10,23 @@ import ( "strings" ) +// Some handy Constants +const ( + BORDER_NS = "\u2502" + BORDER_WE = "\u2500" + + BORDER_NW = "\u250C" + BORDER_NE = "\u2510" + BORDER_SW = "\u2514" + BORDER_SE = "\u2518" + + FILL_CHAR = "\u2588" + CLEAR_SCREEN = "\033[H\033[2J" + + MAX_INT = int(^uint(0) >> 1) + MIN_INT = -MAX_INT - 1 +) + func ArgIsSet(a string) bool { for i := range os.Args { if os.Args[i] == a || strings.HasPrefix(os.Args[i], a+"=") { @@ -124,17 +141,3 @@ func stringPermHelper(str string, i int) []string { } return ret } - -// Some character code stuff for prettier output -const ( - BorderNS = "\u2502" - BorderWE = "\u2500" - - BorderNW = "\u250C" - BorderNE = "\u2510" - BorderSW = "\u2514" - BorderSE = "\u2518" - - FillChar = "\u2588" - ClearScreen = "\033[H\033[2J" -)