A Swift Package maze solver using the A* algorithm.
Define an enum
to describe each square type, which implements MazeSquareType
.
e.g.
import Foundation
import MazeSolver
enum MyMazeSquareType: Character, MazeSquareType {
case empty = "."
case wall = "#"
case start = "S" // Optional
case end = "E" // Optional
var isEmpty: Bool {
self == .empty || self == .start || self == .end
}
var isWall: Bool {
self == .wall
}
// Optional
var isStart: Bool {
self == .start
}
// Optional
var isEnd: Bool {
self == .end
}
}
A maze can be initialised in several ways.
let maze = try Maze<MyMazeSquareType>(
squares: [
[
MazeSquare(type: .empty, position: Position(x: 0, y: 0)),
...
],
[
MazeSquare(type: .wall, position: Position(x: 0, y: 1)),
...
],
...
]
)
let input = """
######
#...E#
#.##.#
#S.#.#
######
"""
let maze = try Maze<MyMazeSquareType>(input: input)
let mazeFileURL: URL = ...
let maze = try Maze<MyMazeSquareType>(fileURL: mazeFileURL)
let result = maze.findShortestPath()
print(result.steps)
print(result.path)