Day 10 eventually
[advent-of-code-16.git] / advent04.hs
index 5ad205e9add09859cb00fc9d9c6fc5514349d4d5..b8c095ed4ca033040652a89564093a72a69e4c09 100644 (file)
@@ -1,8 +1,9 @@
-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
-import Data.Tuple (swap)
 
 data Room = Room { name :: String
                  , sector :: Int
 
 data Room = Room { name :: String
                  , sector :: Int
@@ -26,7 +27,7 @@ part1 rooms = do
 
 part2 :: [Room] -> IO ()
 part2 rooms = do 
 
 part2 :: [Room] -> IO ()
 part2 rooms = do 
-    print $ filter (\sn -> isInfixOf "north" (snd sn)) sectorNames
+    print $ fst $ head $ filter (\sn -> isInfixOf "north" (snd sn)) sectorNames
     where 
         validChecksum room = (checksum room) == makeChecksum (name room)
         validRooms = filter (validChecksum) rooms
     where 
         validChecksum room = (checksum room) == makeChecksum (name room)
         validRooms = filter (validChecksum) rooms
@@ -37,14 +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 = concat $ intersperse "-" $ reverse $ tail $ reverse components
-          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)