11import Algorithms
22
3- func searchInNeighbors( pos: Coord , _ grid: Grid ) -> [ Coord ] {
4- pos . fullNeighbors . included ( in : grid ) . filter { n in
3+ func searchInNeighbors( pos: Coord , _ grid: Grid < Character > ) -> [ Coord ] {
4+ grid . filter ( allInside : pos . fullNeighbors ) . filter { n in
55 grid [ n] == " M "
66 }
77}
88
9- func isMAS( pos: Coord , _ grid: Grid ) -> Bool {
9+ func isMAS( pos: Coord , _ grid: Grid < Character > ) -> Bool {
1010 let candidates = pos. cornerNeighbors
11- if ( candidates . allSatisfy { $0 . isInside ( grid : grid ) } ) {
11+ if grid . filter ( allInside : candidates ) . count == 4 {
1212 let l = candidates. map { grid [ $0] } . compactMap { $0 }
1313 let letterSet = Set ( l)
1414 // same letter can not be on opposite side
@@ -17,7 +17,7 @@ func isMAS(pos: Coord, _ grid: Grid) -> Bool {
1717 return false
1818}
1919
20- func isWhole( pos: Coord , inDir: Coord , grid: Grid ) -> Bool {
20+ func isWhole( pos: Coord , inDir: Coord , grid: Grid < Character > ) -> Bool {
2121 let aPos = pos + inDir
2222 let sPos = aPos + inDir
2323 if let aValue = grid [ aPos] , let sValue = grid [ sPos] {
@@ -27,12 +27,12 @@ func isWhole(pos: Coord, inDir: Coord, grid: Grid) -> Bool {
2727}
2828
2929struct Day04 : AdventDay {
30- var grid : Grid
30+ var grid : Grid < Character >
3131 init ( data: String ) {
3232 grid = Grid ( from: data)
3333 }
3434
35- func countAllWhere( letter search: Character , predicate: ( Coord , Grid ) -> Bool ) -> Int {
35+ func countAllWhere( letter search: Character , predicate: ( Coord , Grid < Character > ) -> Bool ) -> Int {
3636 grid. raw. enumerated ( ) . map { ( y, line) in
3737 line. enumerated ( ) . map { ( x, letter) in
3838 if letter == search {
0 commit comments