Refactor: Let path decide whether a room can be visited
This commit is contained in:
parent
0e3b825b3b
commit
9f919904ab
1 changed files with 11 additions and 13 deletions
22
day12.swift
22
day12.swift
|
@ -21,8 +21,12 @@ struct Day12: Puzzle {
|
|||
struct Path {
|
||||
var rooms: [Int] = []
|
||||
|
||||
func appending(_ room: Int) -> Path {
|
||||
Path(rooms: rooms + [room])
|
||||
func appending(_ room: Int, small: Bool) -> Path? {
|
||||
guard !small || !rooms.contains(room) else {
|
||||
return nil
|
||||
}
|
||||
|
||||
return Path(rooms: rooms + [room])
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -41,19 +45,13 @@ struct Day12: Puzzle {
|
|||
return [continuing]
|
||||
}
|
||||
|
||||
let current = continuing.appending(from)
|
||||
var result: [Path] = []
|
||||
|
||||
for next in neighbors(of: from) {
|
||||
if small.contains(next) && current.rooms.contains(next) {
|
||||
continue
|
||||
guard let current = continuing.appending(from, small: small.contains(from)) else {
|
||||
return []
|
||||
}
|
||||
|
||||
let nextPaths = findPaths(from: next, to: to, continuing: current)
|
||||
result.append(contentsOf: nextPaths)
|
||||
return neighbors(of: from).reduce(into: []) { partialResult, next in
|
||||
partialResult += findPaths(from: next, to: to, continuing: current)
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue