diff --git a/day13/input b/day13/input new file mode 100644 index 0000000..0a5136f --- /dev/null +++ b/day13/input @@ -0,0 +1,2 @@ +1000507 +29,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,37,x,x,x,x,x,631,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,13,19,x,x,x,23,x,x,x,x,x,x,x,383,x,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,17 diff --git a/day13/main.hs b/day13/main.hs new file mode 100755 index 0000000..1d83671 --- /dev/null +++ b/day13/main.hs @@ -0,0 +1,39 @@ +#! /usr/bin/env -S"ANSWER=42" nix-shell +#! nix-shell -p ghcid +#! nix-shell -p "haskellPackages.ghcWithPackages (p: with p; [pretty-simple attoparsec])" +#! nix-shell -i "ghcid -c 'ghci' -T main" + +{-# OPTIONS_GHC -Wall -Wincomplete-uni-patterns #-} +{-# OPTIONS_GHC -Wno-unused-top-binds -Wno-unused-imports #-} +{-# OPTIONS_GHC -Wno-unused-matches #-} +{-# LANGUAGE OverloadedStrings #-} + +import Control.Applicative +import Data.Attoparsec.Text (Parser) +import Data.Text (Text) +import Debug.Trace (trace) +import Text.Pretty.Simple +import qualified Data.Attoparsec.Text as A +import qualified Data.Text as T + +exampleData :: String +exampleData = "939\n7,13,x,x,59,x,31,19" + +numOrXParser :: Parser Text +numOrXParser = A.takeWhile (/= ',') + +inputParser :: Parser (Int,[Int]) +inputParser = do + n <- A.decimal + A.skipSpace + xs <- numOrXParser `A.sepBy` "," + pure (n,read <$> T.filter (/= ',') xs) + +parseInput :: String -> Either String (Int,[Int]) +parseInput = (A.parseOnly inputParser) . T.pack + +main :: IO () +main = do + putStrLn ":: Test" + A.parseTest inputParser $ T.pack exampleData + putStrLn ":: Day 13 - Part 1"