Updated readme
[advent-of-code-16.git] / advent11.hs
index 5fd4e40b784658a12580906efbbb2cb5774d336f..fd96636830de0ea89fe69ff06fc187d0edbb83a1 100644 (file)
@@ -44,12 +44,13 @@ buildingTest = Building 0 [
 main :: IO ()
 main = do 
     part1 
-    part2 
+    -- part2 
 
 
 part1 :: IO ()
 -- part1 = print $ length $ init $ extractJust $ hillClimb [[buildingTest]] []
-part1 = print $ length $ init $ extractJust $ hillClimb [[building1]] []
+-- part1 = print $ length $ init $ extractJust $ hillClimb [[building1]] []
+part1 = print $ length $ init $ extractJust $ aStar [[building1]] []
 
 part2 :: IO ()
 part2 = print $ length $ init $ extractJust $ hillClimb [[building2]] []
@@ -68,6 +69,17 @@ hillClimb (currentTrail:trails) closed =
             sortBy (\t1 t2 -> (head t1) `compare` (head t2)) $ 
             trails ++ (candidates currentTrail closed)
 
+aStar :: [[Building]] -> [Building] -> Maybe [Building]
+aStar [] _ = Nothing
+aStar (currentTrail:trails) closed = 
+    if isGoal (head currentTrail) then Just currentTrail
+    else aStar newAgenda ((head currentTrail): closed) 
+    where newAgenda = 
+            sortBy (\t1 t2 -> (trailCost t1) `compare` (trailCost t2)) $ 
+            trails ++ (candidates currentTrail closed)
+          trailCost t = estimateCost (head t) + length t - 1
+
+
 candidates :: [Building] -> [Building] -> [[Building]]
 candidates currentTrail closed = newCandidates
     where