X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=advent04.hs;h=b8c095ed4ca033040652a89564093a72a69e4c09;hb=4a19cfd5c078d9d06e061518e7c33b5b6969f85d;hp=5ad205e9add09859cb00fc9d9c6fc5514349d4d5;hpb=9986e588bc989c177db98f5e5f4a233afdca17ad;p=advent-of-code-16.git diff --git a/advent04.hs b/advent04.hs index 5ad205e..b8c095e 100644 --- a/advent04.hs +++ b/advent04.hs @@ -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.Tuple (swap) data Room = Room { name :: String , sector :: Int @@ -26,7 +27,7 @@ part1 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 @@ -37,14 +38,14 @@ part2 rooms = do 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 - 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)