@@ -127,7 +127,7 @@ object Day20 {
127
127
}
128
128
129
129
private val seaMonster =
130
- """ #
130
+ """ #.
131
131
|# ## ## ###
132
132
| # # # # # # """ .stripMargin
133
133
@@ -144,13 +144,14 @@ object Day20 {
144
144
} yield Pos (x, y)).toSet
145
145
}
146
146
147
- val seaMonsterGrid = seaMonster.linesIterator.map(_.toVector).toVector.mapGrid(_ == '#' )
148
- val seaMonsterPoss = booleanGrid2Poss(seaMonsterGrid)
149
- val seaMonsterSize = Pos (seaMonsterGrid.head.length, seaMonsterGrid.length)
147
+ val gridPoss = booleanGrid2Poss(grid)
148
+ val gridSize = Pos (grid.head.length, grid.length)
149
+
150
+ // orienting sea monster is slightly faster than orienting grid
150
151
151
- def checkSeaMonstersGrid ( grid : Grid [Boolean ]): Option [Int ] = {
152
- val gridPoss = booleanGrid2Poss(grid )
153
- val gridSize = Pos (grid .head.length, grid .length)
152
+ def checkGridSeaMonster ( seaMonsterGrid : Grid [Boolean ]): Option [Int ] = {
153
+ val seaMonsterPoss = booleanGrid2Poss(seaMonsterGrid )
154
+ val seaMonsterSize = Pos (seaMonsterGrid .head.length, seaMonsterGrid .length)
154
155
155
156
Box (Pos .zero, gridSize - seaMonsterSize - Pos (1 , 1 )).iterator
156
157
.map(pos => seaMonsterPoss.map(pos + _))
@@ -159,7 +160,8 @@ object Day20 {
159
160
.map(seaMonsterPoss => (gridPoss -- seaMonsterPoss).size)
160
161
}
161
162
162
- grid.orientations.flatMap(checkSeaMonstersGrid).head
163
+ val seaMonsterGrid = seaMonster.linesIterator.map(_.toVector).toVector.mapGrid(_ == '#' )
164
+ seaMonsterGrid.orientations.flatMap(checkGridSeaMonster).head
163
165
}
164
166
165
167
private val tileIdRegex = """ Tile (\d+):""" .r
0 commit comments