import Criterion.Main import Algorithm.Search type Position = (Int, Int) wall :: Int -> Position -> Bool wall height (x, y) = x == 0 && abs y <= height neighbors :: Position -> [Position] neighbors (x, y) = [ (x - 1, y), (x, y - 1), (x + 1, y), (x, y + 1) ] dist :: Position -> Position -> Int dist (x1, y1) (x2, y2) = abs (x2 - x1) + abs (y2 - y1) aStarWall :: Int -> Maybe (Int, [Position]) aStarWall height = aStar (neighbors `pruning` wall height) -- next (\_ _ -> 1) -- cost (dist end) -- remaining (== end) -- at end start -- initial where start = (-3, 0) end = (3, 0) main :: IO () main = defaultMain [ bgroup "aStar Wall Benchmark" [ bench "Size 2 wall" $ nf aStarWall 2, bench "Size 4 wall" $ nf aStarWall 4, bench "Size 8 wall" $ nf aStarWall 8, bench "Size 16 wall" $ nf aStarWall 16, bench "Size 32 wall" $ nf aStarWall 32, bench "Size 64 wall" $ nf aStarWall 64 ] ]