Realised I was doing hillclimbing search, not A*
[advent-of-code-16.git] / advent04.hs
index fb2839ece8accc5aadc20d24d091f5ce39bb9e18..b8c095ed4ca033040652a89564093a72a69e4c09 100644 (file)
@@ -1,4 +1,6 @@
-import Data.List (last, intersperse, sortBy, intercalate, isInfixOf)
+module Main(main) where
+
+import Data.List (last, intersperse, sortBy, intercalate, isInfixOf, init)
 import Data.List.Split (splitOn)
 import Data.Char (isLetter, ord, chr)
 import qualified Data.Map.Lazy as Map
 import Data.List.Split (splitOn)
 import Data.Char (isLetter, ord, chr)
 import qualified Data.Map.Lazy as Map
@@ -36,13 +38,14 @@ part2 rooms = do
 parseLine :: String -> Room
 parseLine line = Room {name=name, sector=sector, checksum=checksum}
     where components = splitOn "-" line
 parseLine :: String -> Room
 parseLine line = Room {name=name, sector=sector, checksum=checksum}
     where components = splitOn "-" line
-          name = intercalate "-" $ reverse $ tail $ reverse components
+          name = intercalate "-" $ init components
           sector = read $ head $ splitOn "[" $ last components
           checksum = filter (isLetter) $ last components
 
 countedLetters :: String -> [(Char, Int)]
 countedLetters name = sortBy sortCLetter $ unsortedCountedLetters name
           sector = read $ head $ splitOn "[" $ last components
           checksum = filter (isLetter) $ last components
 
 countedLetters :: String -> [(Char, Int)]
 countedLetters name = sortBy sortCLetter $ unsortedCountedLetters name
-    where unsortedCountedLetters name = Map.toList $ Map.fromListWith (+) [(c, 1) | c <- filter (isLetter) name]
+    where unsortedCountedLetters name = 
+            Map.toList $ Map.fromListWith (+) [(c, 1) | c <- filter (isLetter) name]
 
 sortCLetter :: (Char, Int) -> (Char, Int) -> Ordering
 sortCLetter (l1, n1) (l2, n2)
 
 sortCLetter :: (Char, Int) -> (Char, Int) -> Ordering
 sortCLetter (l1, n1) (l2, n2)