@@ -24,7 +24,6 @@ enum Border: Hashable {
2424 case . west: . west
2525 }
2626 }
27-
2827}
2928
3029enum CardDirection : Int , CustomStringConvertible {
@@ -36,7 +35,6 @@ enum CardDirection: Int, CustomStringConvertible {
3635 case . west: " W "
3736 }
3837 }
39-
4038 case north = 0
4139 case east
4240 case south
@@ -47,7 +45,6 @@ struct Side: CustomStringConvertible {
4745 var description : String {
4846 " Side( \( direction) | \( border) \( values) ) "
4947 }
50-
5148 var direction : CardDirection
5249 var border : Border
5350 var values : [ Int ]
@@ -60,34 +57,15 @@ struct Field {
6057 var coords : [ Coord ] = [ Coord] ( )
6158 var sides : [ Border : [ Int ] ] = [ Border: [ Int] ] ( )
6259 var sideCount : Int {
63- let allSides = sides. values . map { side in
60+ let allSides = sides. map { ( border , side) in
6461 let sortedSide = side. sorted ( )
65- print ( " sorted " , sortedSide)
66- return zip ( sortedSide, sortedSide. dropFirst ( ) ) . map { $1 - $0 } . filter { $0 > 1 } . count + 1
62+ let diffs = zip ( sortedSide, sortedSide. dropFirst ( ) ) . map { $1 - $0 }
63+ let nbSides = diffs. filter { $0 > 1 } . count + 1
64+ return nbSides
6765 }
68- print ( " allsides " , allSides)
69- return allSides. compactMap { $0 } . count
66+ return allSides. sum
7067 }
7168
72- // mutating func extendSides(idx: Int, pos: Coord) {
73- // let (border, otherAxis) = Border.create(direction: idx, coord: pos)
74- // let sideIdx = sides.firstIndex { side in
75- // if side.direction == border.toCardDirection() && side.border == border {
76- // let max = side.values.max() ?? -1
77- // let min = side.values.min() ?? -1
78- // if max + 1 == otherAxis || min - 1 == otherAxis {
79- // return true
80- // }
81- // }
82- // return false
83- // }
84- // if let sideIdx {
85- // sides[sideIdx].values.append(otherAxis)
86- // } else {
87- // sides.append(Side(direction: border.toCardDirection(), border: border, values: [otherAxis]))
88- // }
89- // }
90-
9169 mutating func addSide( idx: Int , pos: Coord ) {
9270 let ( border, otherAxis) = Border . create ( direction: idx, coord: pos)
9371 sides [ border, default: [ ] ] . append ( otherAxis)
@@ -136,15 +114,11 @@ struct Day12: AdventDay {
136114 // this is a frontier
137115 field. perimeter += 1
138116 field. addSide ( idx: idx, pos: neighbor)
139- // print("border found at", pos)
140- // print(field.sides)
141117 }
142118 } else {
143119 // this is the frontier of the grid
144120 field. perimeter += 1
145121 field. addSide ( idx: idx, pos: neighbor)
146- // print(field.sideCount)
147-
148122 }
149123 }
150124 return field
@@ -160,7 +134,6 @@ struct Day12: AdventDay {
160134 guard record [ currentPos] == nil else {
161135 continue
162136 }
163-
164137 if let gridValue = grid [ currentPos] {
165138 // start a new field
166139 let field = exploreField (
@@ -169,22 +142,17 @@ struct Day12: AdventDay {
169142 field. coords. forEach { s in
170143 record [ s] = true
171144 }
172- print ( " sides of " , gridValue, field. sideCount)
173145 }
174146 }
175147 }
176148 return fields
177149 }
178150
179151 func part1( ) -> Int {
180-
181152 return getFields ( ) . map { $0. compute1 ( ) } . sum
182153 }
183154
184155 func part2( ) -> Int {
185- // merge sides that are next to each other
186-
187156 return getFields ( ) . map { $0. compute2 ( ) } . sum
188-
189157 }
190158}
0 commit comments