diff --git a/day4/Main.hs b/day4/Main.hs new file mode 100644 index 0000000..3e0bf6c --- /dev/null +++ b/day4/Main.hs @@ -0,0 +1,52 @@ +module Main where + +import System.Environment (getArgs) +import Control.Monad (void) +import Data.List (transpose) + +import Text.Parsec (parse, Parsec, endBy, many, char, anyChar, (<|>), try, string, lookAhead, getPosition, sourceName) +import Text.Parsec.Char (oneOf) +import Text.ParserCombinators.Parsec (eof) + +rows :: Parsec String () [String] +rows = endBy (many $ oneOf "XMAS") (void $ char '\n') <* eof + +rotate90 :: [[a]] -> [[a]] +rotate90 = reverse . transpose + +diagonals :: [[a]] -> [[a]] +diagonals = (++) + -- Lower half (excluding the main diagonal) + <$> reverse . transpose . map reverse . zipWith take [1..] . drop 1 + -- Upper half + <*> transpose . zipWith drop [0..] + +-- | counts the number of "XMAS" (as well as the backwards "SAMX") in the input +countLineXMAS :: Parsec String () Int +countLineXMAS = + try (lookAhead (string "XMAS" <|> string "SAMX") + >> anyChar >> (+1) <$> countLineXMAS) + <|> (anyChar >> countLineXMAS) + <|> (eof >> return 0) + +countAllXMAS :: Parsec String () Int +countAllXMAS = do + grid <- rows + let linesOfInterest = grid ++ concatMap ($ grid) [transpose, diagonals, diagonals . rotate90] + sName <- sourceName <$> getPosition + counts <- mapM (either (\p -> fail $ "Parse Error! " ++ show p) return . parse countLineXMAS sName) linesOfInterest + return $ sum counts + +part1 :: FilePath -> IO Int +part1 fp = do + content <- readFile fp + case parse countAllXMAS fp content of + Left e -> fail $ "Oh no! " ++ show e + Right v -> return v + +main :: IO () +main = do + args <- getArgs + (fp:_) <- return args + resPart1 <- part1 fp + putStrLn $ "Solution (Part 1) : " ++ show resPart1 diff --git a/day4/puzzle_input b/day4/puzzle_input new file mode 100644 index 0000000..4857e23 --- /dev/null +++ b/day4/puzzle_input @@ -0,0 +1,140 @@ +MSSMSAMXSAMASMSMSAMMMMMMMXSXSMMSAMXSSSMXMSMMSMXMXSXMMSAMXMSSSSSSMSASMSSMSAMXMSMXSXSMMMXSSMAMXXMXSXMAMSAMXXMXAXXSASAMXMMAMMSSXSXMMXSMMXSXXMXX +AAMAMXAMMAMSAAAAMAMAAAAMMAMMSAAXAAMAAAMAXAMAAAAAASAMXSXMASMAXMAAMMASMAAAMAMAMAAMSAXAAXMXAXMASXSAMASAMXSSMMSSSMASAAAXMASMMAAMMMAMSMSASMSXAMAM +MMSSXSSSSSMAMSMSMMMXXSSSMXSAMMMMAXMMAMSXSSSXMSMMXSAMXMAMXXMMMMSMMXAXMXMSMASASMSMXASMMXMSAMMAMXMASAMXSMXMXAAAAXMXASMMMMSAMMXXAMAMAASAMAXSAMXA +XXAXAXAAAMXMXXAXAMSSMMXAMAMASASAMXMXAXAAAAAMXAMSASXMASMMMMAMAXAXMMMSSXMXMXSXSAMXXAMMAXMAMMSSSXSAMMXXAMXAASMXMMXMMMMASXSAMXSSSSSSMXMAMSMSMAMX +XXMMMMMMMMMXMMMMSMAAAASAMXSXMAXMAXMSSSMMMMMMSASMMXAXASAAXXSSSXSASXMAXAMMSMMAMAMASXMXSXXAXAXAAXMASXSSSSMSMXSSXAAXAASAMXSXMMAAAAMAXSXXXAAXAAXA +SMXSXXXAAAAAXSMAMMSXMMSAMXAMMMMXAAMAMAXMXMAMSXMAMSSMASXMSMXAXAMSMAMASXMAXAXMMAMXMXASAMSSMMMMMMXXMAAAAMAXXAMXXSMSSMMXSXMAXAMMMMMMMMAXSSXMSASM +SASMMAASXSSMAAMXMAXSXMSAMAXMASXMSSMASXMAMSMXSASXMAMMAXAXSXMAMSMASXMXMMMMSXMMSSSSSSMMAXAXAASMASXSMMMMMMMMMSSMMAXAXXSMAAXAMSMMXMXXAMXMAMMMAAAX +XXAAMXMMAMMMSXMXMASAMXSASMMSASXMAXMAMMASAMMASAMXMAXMMSMXMASXMASMMXMMMMAAXMMXAXMAAAMMXMAXMMAXAMXMAXXASAMXAMAMSAMXSXAXSSMXMXASXMMSMMXMASAMMMMX +MSSXMSXMASXMMASXMMXASASXMAXMXMAMXSMXMSAMASXXMMMXMSXSMXXASAMSSXMMSAMAAMMSMMXMASMMXMMMAMXMSAMMMSMMASMMSAXAXSAMMASAMMMMXXAMSMMMAAAAAMXMASASXXXX +XAAXSXXSAMAXXAMXASXMMAXXMSMMMSMMAXMAMMAMAMXAAMMSAXAMMMSMXMSMXAMASMSSSSSXMMAMSMXMSXMSAMXAMMXMXAMXAAAASMMMMSAMXAMMSAXSAMXMAAASMMMSSMAMASMMMXMM +MAXMSAMMMSMMMSMSAMAMMMMXMASAAAXXSAMXMMSMSSSSSMMSAMXMAAAAXSAMSMMASAAAXMAXMAMMMMAMAXMMSMMAASAMMXMMSSMMMXAAAMXSAMXXSXSAMXSSSSMSMSAAXMXMAXMAXASX +AMSAMXMAMAMAXAAMXSXMAAXMMASMSSSMMXSXXSXAAAXXAAAXASASMMSSMMAMXXMASMMSMMAMSAMAAXSSMMSAAXMMMMASAMXAAAAMXSSXXXAXAMMMMMMAAAXMAMAMAMMSSMSSXMSMSASM +MSAMSMSMSASXSMXMASAMSMSAMMSAAAAAAASMMXAMMSMSSMMMXMAXAXXMAMSMMSMMXAMXMAMXSASMSSMAXAMMSSMAXSAMXAMMSSMMMXMASMMMAXSAAAMAMSMSSMSMAMMAAAAAAMAAMAMX +XAAXXASAMMSAAMXMASAMASMXMAMMMSMMMXSASASMSXAAMAMXSMAMSAMXSAAAXAXXXXMSSSSMSAMMMAMAMXSAAAXXMMAMXSSMMAMMAMXAMAMMSXSSSSSMAMAXMAMXMXSMMMMSSMMSMAMM +MMAMMMMAMAMXSMMMXSAMXSMXMAXMAMXXMXSAMAXXXMMMMSMAXAXAMASAXMSMMSSMSSXAAAXXMAMXSAMXAXMMXSMSMXSMMXAXSAMMSAMSSMSAXAMAMAAAAMSMMSMMSASXXMAMAMXAMAXM +XMMMAAAAMASXXAXSMMASAMXXSMMMAXMXSMMAMXMAASXMAXMMMMMASXMASAXXMASMAMMMSMMMSAMMXMSSSXXSSXMXMAXAXSMMSXMXMAXMAXMASMMAMSMMMSMASAMAMASXAMXSAMXAMXSM +XMASMMSSSXSAMXMXAAXMXSAXAMASMXSASASAMMMSMXAMAXAXAXXASASAMXMMMMSMAMAXAXAXSASMAAXAXAXSAXSAMXSMMMSMXMSSMSSSSMMAMASXXMXMMAXMMASAMSMMXSMSASMXSMAX +SSMSAMXAMXMXMASMMMMMXSXSMSASAAMASAMXMXAMXSMMASXMMSMASAMXAMXSAXXMASXSSMMXMMAXXMMAMXMMAMSMSXAAAAAXAAMAAAAXMAMXSAMXMXAXMMXSSMMMMMXMASXMAXAAAAXS +XAXMAMMASAAMSMXAAMAXMXMAMMXMMSMMMAMMSMASAXAAXXMAAAMMMAMXXMSMXSAMXMAAXAXAMMSXSAMSMXXXMMSAMXMXMSSSXSMMMMSMSSMMMMSASXMMASMMAXXAAMAMASAMXMMXSSMA +MSMMAMXAMXMXAMSMMMMSMSSMXSSMXMASXXMAXMAMASAMSMSMMMXAMSMAMSAMMSXSMSMMMSMAXAXAXMXAXMXMXAXAAXXXMXMXAMMSSMAASMMAAASMSAXSAAASXMSMXXAMAXMAXAMAMXAM +AAXXSAMXSASXXMAMMSXAMAAXMAAXMXAAMMMSSMXSASAXAXAMXMMMMAMSXSASAXASAAXXAXSSMAMAMXSSSMAXMSSSMMMMSAMMSMAAASMSMSMMMXSMSAMXMSMMMMAXMSMMMMXSSSMASMSM +SASXMASASASAXXASAMSSMSSMMXSMMMSMMAAMAMAMASMSSXMSSMASXMSXAMXMMMSMSMSMMMAXMXMAMXXXAMAMMMAAMSMAMAMAXMMSMMXMXAXSSMSAMMMMMMMAMSAXXASAMXMMAASAXAAS +MASXMASAMXMAMSAMXMAXMAMXSAMMSAXASMXSAMXMXMAAAASAMAAXAMMMXMMMXMMAAXXAMAMXMASASXMSMMSSMAXMMMMXSSMSSXXXAXMMXXXMAXMMMSSXAXSAMMXXSASMSAMMSMMXXSAS +MAMXMXXAXXMAMAXAMMXSSSSMMASAMSSMMAASXSXMXMMMSMMASMMSSMAASXSMAXMSMSMMMAXAMASMSAMXAAAAXXMMXSMAAAAAAXMSXMASMSAXSMMMMAXXXMSAXSAMMXMASMSMMXSSXMAS +MMMMSMSSMMXMSMMMMMMMMAMASAMAMAXXMMMMASMXAXMXMAMXMAMXXSMXMAASASMMAMAASXXSAMXASXMMMMSSMSAMAAMMSMMMSMMAMASXAXXAMXXAMXSXSAMAMMAXSAMXMXXMMAMXXMXM +XXMAAAAASXXMAXAAAAAAMAMAMXSXMSSSXSXMSMMSSMSAMXMMMSASAMXMMMMMXAAMMMMMSAAMXSMMMMSXAXMXAXAMSSXMXXXMAXXAXSXXMASMXMXASAMXSAMSXSMMXXSAAXSAMASXXMAS +XSXSMMMSXXASMSXSMSSXSAMAXMXMMMAAXSAMAAAAXMMAMSMMAXAAXMAXSSSSSSXXXAXAMXMMSXMXAAMXMMMMSMAXXXMXMMMSMXSMSXXASAMMAMASMXMAMMMMAAXXMASASMSMSASMASAM +MAMMAMSXMSAMXXAXAAAAAXMSMMAXSMMMMSAMSMMSSSMAAAMSMMXMXMXSAAAMAMXSSMSMSMASMAMSMMSASAMXAMXMMMMAAAAAMXXSAXSMMMMSAMMAAXSMMAAMMMAXMXMXMASXMAXXAMAS +AMASAMMMMSAMASAMMMMMMMXMASXMXXAAAMAMXAMAAASMSXMXXXAMMASMMSSMMMSXSAAAMXXAXAMAMXSASAXSAXXMAASXSMSSMAMAMMXXAMAMMSXMXMSASXMXSMMXXASMSMMAMXMMMSSM +XXMAXSAAASAMXAAMXXMAAXASAMASXMMMSSSMSMMMSMXMXMMMXXXXAMXXAXAXXMXAMSMSMMSMSXXASMMMMXMMAMXSSXSXXMAXMAXMXAMXMMAMMAMXMASAMXSAAASMSASMSAMXMXMAMXXX +SSSMASXSMSMMSMASXXXXAXXMASAMAXXAMXMXXXSXXXMMMAAXMAMASMMMMSMMMMMAMAXAXAXXAMXMXXAAMASXXSAMXASASASMSMSXXSMASMMMMAMMAMMMMAMMSMAAMASASAMASAMMXMXM +SAAAASAMAXXAMXAXMASMAMAMAMMSAMASMMSSMAMASMMASXMXAAAXXAAAXAAASMMMSXSSMSSMMMASMSMMSASAMMASMMMAMXMAXMAXMXMAXAAXXAMXXMAXMAMMMXMXMAMMMASXMAMSASMA +MSMMMSAMAMMSSMMSAMAAXAAMMSAMAMXMAXAAMMMXMAXAMAAXSXSAMSSMMMMMXAAASMXAAAXAXMXSAAAXMASAXSXMAMMMMSMXMXMAXAMSSMMXSAMSASXMASAMXASXMASMSAMMMAMSAMAS +AASAAMMMXMAMAMAAMSXSMSMSMMASXMSSXMSMSASASXMSSMMMMAAAXAXXSSSSSSMMSASMMMSXMASMMMMMMXSXMAXMAMXMXMAMMMSSMXXAAXAXMAMXAMASAMXAXSMXSAXXAAASXSAMXMSM +SMSMMSASXMASXMMMXXAMAAXMXSAMXMAAXXMASMSAMMSMAAMAXMSAMXSXSAAAMXAAXMASAAAAXXMASMMSMAXAAMSSMAMMAAXMAMXXXMASXMSSMSMXXSAMAMXSXMAXMASAMXXAAMMXAMAM +AXXAMMAAMSXMAXXXSSSSSXXMAMXAAXSMMXMASMMXMMAMSMMSMXMAAXAMMMMMMMXMXXAXMSMMMSAMXAASMSMSSXAAMSASXSSSSSMAXMAXAAXXAXAXXMMXXMAMMMSMMASXAMMMSMMSMSAS +MMMSMMAMXMASXMSXAAAAXXMMSSMMAMXXMXMMMMAAXXAXAAXAAAMAMMXSAMXMASMSSMSMMMASAXXAMAMSAAAXMMSXMMMAMXXAASMMSXAXMSMMXMXMXMAMSMXSAXMAXAXXSXAAXAXSXSXS +XSAMAXXXAMAMAAAMMMMMMASAMAXSSXSAMXXMAMSSMMXSAMXMXSAMXMASASXXMASAXAAXASAMSMSXMSXMMMSMSAXASMSMMMMMMMXASMXSAXMSASMSAAAAXAMMMSSMMXSMMXMSSMMMMMMS +XMAXAMXSXMXSMSMMAAAAXMMAXAMAMXMAMAASXMXAXAMMMXAXAMXSMMASAMMXXMMSMSMSXMAMXXSAAMAMSXAAMASMMAAXMXAXAXMAXAMMAMSAMXASMSMSMXXAAMAAMSAMXXSAMXAAAAAX +MMSMASXMMMAMXMASXMSSMXSSMSXMAMSAMXXAASMMMXSAASMMXXMAXMASXAMSXSAXMMASAMXMMASXMXAMXSMSMAMMMSMSSSMXMSASMSMMAMXMXMXMXXXMASMASXSMMASAMMMAMSSSSSSM +MAXSAXAXAMAMASMMSAXXAMAMAMMXSMSASXMXAMAAAASXMASMXSAMXMAXXAAXXMASASASMMMAMMMMMSSXMASAMXSXAAXAAAXSXXAXAXMSMSMXMSAXSXAMMASXMAMXSMMMSASAMXMAAAAA +MAMMXSMMSSSSMSAAXMAMMMAMAMXAMXSAMMSASMSMMMSMMASXAXSXSMSXSMSMMMAXAMAMAASAMXMAAAXSAMMXSAMXMXMMSMMAAMSMAMAAMSAMAMMSMMMXMAMMMSMMXAAAXMSAMAMMMMMS +MMSMAMMAMMMAMXMMMXAMXSASAXMASXMXMAAAXAXASXSXMASMMMMMXXAXXAXMAXXMMMMMSMSASASMSSSSXXMAMASAMSSMAAXMXAAMXXSMMXSMXMXAAXMAMASAAAXASMMMXXXMXSMXAAXX +MSAXAMAMMAXAMMMMMSASASASASMMMXSXMSMSMMSXMASAMASASAMASMMAMAMSSSMMXAAMAMXASASMAMMMSMMASXMXSAAXMXMXMSASMMMSAAXMSMSSSMXASMMMSSXMASAMMMXMAXXSXSSM +MSASXSMSSSSMSAAMASXMASAXXAAXASAMMAXXAASXSMSAMASXMAXAXAXMASXMAAXMAMMSXXMAMMMMASASMMSASAAXMMSMMSXXXMXAAAAAMMMAAAXAAASXXMXMAMAXAMXSAAMMASASMMAX +MMAMXMAXAXMASXSMASAMMMAMMXAMXAMXSAMMXMMASASAMXSASXMSMSMXAAAMMMMMXSXMMSMMMXSSMSXSAAMAMMMMMAXAAAASXMXSSMSXMSXMMXMAMXMMXSAXMSMMMSASASMXXMAMXSAM +MMAMXMXMSMMAMXXMMSXSAMXXAXMAMXXAMMSMMAMAMMSAMXSAMXAAAMXMMSXMMSAXAMAAAXAASAAAMMMSMMSMSMXAMSSMMMSMASAMXMXXAMXMSXSAMXMAASXMMAMMMSMXMAXMXXAXMMSS +ASMMXMMMMSMXXSXMASMMXMXMMXMAMSMMSAAMSSMAXXXXMAMAMMMMSMASAMAXAXMMMSSMSSSMSMSAMAAMAMAAAAMSMMAMXXAMXMMMAMAMSAMASAMXSAMMXSAMMASAAMXMXMAXMSMSAAAS +XMXSAAXXAXXAMMAMASASAMXMAASAMXMSAMXMAASXSSMAMASMMMAMMMMMASMMMSMMMAXMAMAAXMMASMSSMMMMMSMXASXMMMSSMXXMAMXMXAAAMAMAXXMAMSAXSASMMXAXXSAAXAMXMMSS +MAAMMMMMMSMXXMAMXMAMSAAMMMXASAMSAMXMMMXMAXSXSAMXAMAMMAXMMMAMAAMAMMMMASMMMXSAMAMAXXXXXMASAMXAXAXAMSXSASMSSXMASMMSXMMAMMAMMAMASASMXMSXMASXXMAM +MMMXMAAAMXMAASMMSMXMXSSSSMSXMAXSAMSSSMMXMMSXMASXMSXSMMMSMMAMSSSSXSASXSMMSAMAMMSAMSAASMMMSSXMMXSAMMASASMAMASMMMAAASMSMMXMMMMMMAMAXMXXSAMAMMMS +XXMASMSXSAMMXAXAAMXSXAXAAMSASXMSAMAAXAASXAMXMAMAAAXSMXAAASXMMMAAAXAXXMAXMAMAMXMMXXXMSAXMASAMXMSAMMAMMMMASAMAAMMMSMAXXXMAAXMXMXMXXXAAMSMMAAMA +XMMMXAAAMMMXMXMSXSAAMXMMMMSAMXXSAMMSMMSAMMSMMASMMMXMAMSSMAMSSMMMSMSMSSSMSAMASXAMSSMXSMMMAXMSMASAMMXSAASXMMSMMMMXMMXMSMASMXSAMMSMMMSSMMSASMSA +MAAMMSMMMMASMAAMAMMSMSMSXXMAMMMMSMAMASAMXMAXSASMXSMMMMAAMMAAAASAMXAAXAAAMXXAMMXMAAAAMMMMMSAAXMXMXMAXMMSMSMSAMXSMMMAMAXMXAAMASAAAAMAXAAXMXMAM +SSXMAAXSXXAASMSMAMSAXXAAXXXXAXXAAMASXMMXSMSXMASMASMMXMAMMXMSSMMASXMSMSSMSMSSSSMXMMXMSAAAMAMASMMMAMMXSAMXAAMXMMXASMMSSSMMMMSSMXSSSMASMMMXMXAM +MASMXSMSAMMXXMMMSMSMAMAMSSMSMSMSMSXSMXSAMAXXMSMMAXASMMMMSMMXAASMMMXXAMAAAAAAAAASXSAMXMXMXAMXAAASMSASMAMSMSMAXSMMMAXAMAAXXXXXAAMAMMAMAMMSSMSA +MAMMAMMMAXSASMSAXAXXXSAMXAAAAAAMASXMAAAAMAMAXXAMMSSMMAAAAAMSMMXMAMAMXMMSMSMMMMXXAXMSSSSMXSXSXSMSASXSMSMXSAMXSXAMSMMMXSAMXSMMMMMMMMMSMMAAMAAM +MASMMSASMMAAAXMASASMXSASMMSMSMSMAMAMSMXSMMXXMSSMMXMASMMSMMXAMSMSSMMSAMXMAMXMXSSMMXSAMXAAAMMMAXAMAMASAMSMXMMMMXMMAXXAXXSMMAMXMASASAMAXMMSSSMX +MASAAMXMMAMAMXMXMAMXXSMMMXMAMMAMASAMXXAMMMSAMAXXMMXAMMAMAMMAMSAAXASXMXMMXMXMAMXAMXMASXMMAXAMAMMMXMAMAXMMASAAXAMMMMMSSMAMSASMSASMSAXAXXAMMXXS +MAMXMXSAMSXSXXXAMXMXXMMXXXMAMSXSASMMMMXSAASAMAMMMMSMMMAMMMSAMMMMSMMSSXSAAMAMASMSMXSAMXXMASMMSSXMSMSSMMXSASMMMASMAMAMAMMMSASAMAMXXXMSMMXSAMMM +MMSMXXSASAAXMMSMSMMMSAASXXMXMAXMMXXAAMMMMMMXMASAAAAAAMASMAMAMXMASAMAMMMSMSASAXMAXMMASXXMAXXAXMASAAAMAAMMASAMSAMXAMASMMXXMAMMMSMSXMXMAMXXMAAX +SAAXMASXMMMMMAAAAASASXMSMXSAMSSSMAXSXMASXMSSSMSMSSSXMSASMSMSMXSXSMMASAAAXMAMXMMXMXSAMXMMSMMMMXMAMXMSMMAMXMAMMASXXSAXMMXSMMMXAMAMMXAXAXMASMSX +MSSXSMMASAAAMSSSMSMASMMXXASXSAAAMMXMMSMSAAAAAASAMXMMAMXXMXAXXAMMSASXSMMSMMAMMMSAMAMMSMMAMAAXAMMXXMAXAXSAMMAMMXMXMMMMSXAXAMXMASAMAMSSSMMMMMMM +XAXXSASAMSSMXAMXMAMXMAAAMXSSMMSMXSAMXMASMMMMMMMXMASMSMSMAMAMMASASXMAXAAAASAMAMMAMSXMAAMASXMMSSXSASXMAXXAXSMSMAMXMASAMMSSMMXSASAMMSAAMXMAAAAA +MSMMSAMXXAMXMMSAMXSXSMMXSAMASXXXAMASMMXMSASMSMSXMAMXXAAMXMAMXXMXSXMASMMSMMAMMMXAXXMSSSMAMAAXAAXSAMXXSAMMMSAAXXSASAMAMXMAAAAMMMMMXSMMMASMSMSS +AAAMXXSSMASAMXMMSMMXMSMAMASAMMXMMSXMASAAXXSAMASAMMSSMSMSXMXMSMMMXXMXXMXXMSXMASXMMXAXAMMSSSMMMSMMAMXMMXMAAMSAMXMASXSSMASXMMSSSSXXAMXXSXXXAAAX +SXSMSXMASAMMAXMMAAMAMAMASAMMAMMXXSASXSMSMMMMMAMAAAAMAAXXXXASAAXMAXXMASXSXMAMASASMMMMAMAAMXMXXAXSAMMXMAAMXXMXXXXAMXAASMSMXSAAAAAASAMMSXMSMMMS +MSMXMASXMXXXMSAXSXSASASXMXSSMXAMMSASAXMAMMAAMAMXMMMSSMSSMSXSXSAMSXMAMXMMASAMXSAASAXSAMXSXSXSSMXSASXMMMSMMXXMAMXMMAXAMXXMSMMXMMMMMASASAXMASMS +SAXMXAMXMSXSASMAMASXSASAMXMAXMXXAMMMMMSAXMXMSMSSMSXAXXAMAAAMAXAMMAMSMSASAMAMXMMMASASASXMAMMMASAXMSASAAXMMSSMSMSMASMMMSAXMASXSXMXSAMASAMMMSAM +MMMSMAXSAMAMAMXAMAMMMMMMXSSSMSMMMMAAAAMASMXXAAAAAAMMSMSXSMSMSMSXMAMMAMXMXSAMAMAXMMXMMMMMAMASAMMMMSAMMMMAAMXAAAAXAMAAAXXXSMMAMAMAMAMXMXMAMSAX +XXASXSMSAMXMMMSSMAMAAAAXMMAAAAAMSMSXSSMXMAASMSMMMMSAMAXAXAAAMAMMSXSMAMAXMSASMSSSXSAXAAXXAMXMMMMAMMXMAMSMMSMMMSMSXSSMMXSMASMASAMASXMAMAXAMSSM +MMMSAMAMAMXMXAAAMXSSXSMMXMMMSMXMMAXXMXMAMXMMAMXMXAXAMSMSMAMXMAMAXMXMAMMSASAMXAAXAXAMSXSSSSXSAASXXMXSXMAAMXMAXMAMXAMAMAAXXMSAXMSXMXSAMAXSMMXM +ASMSMMSSSMASMMSXSXAAAMMSMMSAXMMMMAMAMAXXMMXXXSAMMXSXMXAMXXMASXSMMAMMMAAMXSAXMASMSMSMXAAAAXAMMXXMASAMXXXSMASMSMMMAMSAMSXMSMMMSMXASMSAMSMMAMSS +SMAMXSXAMMASAXAASMMMXMAAAMMAMXAXMASXMMXSMMSSMMAMMMMAMMSMMMSXSXMASMSAMMXSAMXSXAAXMAMAMMMMMMMMMSMSAMASAMSXMXXMAAAXMXMMMMAMXAASAXXAXAMMMMASXMAS +MMAAXAMMMXMSMMMSMAMSMMSMSSMAMSSMMXXMASAAAAAASMXMAAAAXAAXAXAMXXMAAASMSSMMASMMMMSMMMMAMAXAMXMAXAMMASXMASMAXMXSSMMMXSMXASAMMSMSASMAMXMXAXMMSMXS +XSXSMMMAAAXMMSSMMSMAXXAXXAMXXAXAXMAMAMSSMMMAMXMSSXXSMSMSSXMMMXMMMMMAAXASASAXAXAXAMMXSMXMSSSSSMXMAMXXSAMMMMAMAAXXAXAMXMAMXXAMAMXXSAMMMSAAMMAM +MAMXAXSMSXSAAXAXAMSMMMMSAMXSMASMMSAMSXMXXXMSMXMMASXXMXXAMSMAMASMXMMMMXMMASMMSSMSASXXMAXMAMMXAXMXSSMMXXXMAMASXMMMSSSMSSSMAMAMAXMAXAMASAMXMMXS +XMASMMMAAAMMMSAMMXSXMXAAMXAAMXMMASAXMAMMMXMMASAMAMMAAMMASASXSASMAAXASMSMXMXAAAXMAMMAMXSMASMMSMSAMAASXSXSAMXMXAAXMAAAMAMMMSSMMXAMXSMXXXAAXXAA +MMMXMSMMMSMAXXAXMAMAMMMSSMSMSMSMAMXMSSMMMAAMAMMMMSSMMXSMSXSXMAMXASXXMAMXMXMMMXXMAMSXMAXXAMXAAAMMSMMMAMASMSSMSMMSMMMMMMMAAXAAMXSMAXXSMASMSMSS +MASAMSAMXAMSMSAMMMSAMASAXAAXMAXMSSMMAMAASMMMSMXAAXXXMXAASAMXMAMASMMSMAMSAMMSMSAXSAMXMXSMMMXSMSMXSAMMXMAMXAAXMXMXXMAAXXMMXSXMMSMMMSAAMAXAAAAX +SAXAXSMMSAMXAMAXMASASXSXMMMSMSMXMAXSAMMMXAAAMASMSMSAMSSMMMXXMMMMXAASMMMXSXAAASMMMAMXSAMXMAMXXXAASAMAAMXSMSMMMSMAMMSMSMMSASXMXSAAXMXMSMMXMMMM +MMXSMMXMAMMMSMSMMASXMXMASMMMAAAAXXMMASMXSXMMSAXXAASXXAAAASMSXSAXSMMSASXMMMXMMMAMSSMMXXMASMXSAMXXSAMMMSAMMXAXAAMASAMAXAXMASASMSSMSAAMAXSSSMSX +XAAXAMASXMAAAXMAMASAAXMAMAASMSSSSXXSAMXMXAXMMMMSSMMXMSSMMSAAASMXMMSXMMAAXAMMSASXAAAMAMXMAXAXMMSAMMSAAXMSASAMSMSMSAXSSSSMAMAXAXXXSMMSAASAAAMX +MMMSASASAMMSSXSAMXSMXSMSMSMXAXAAXXMMMSXMSSMAAAMXMAMAMMMXMMMMMMXSXXAMSXSMMMMXMAMMXXMMAMAMAMAMXXMASASMSMSMMMXAXMAXMXMXXAAMAXMMSMMMMAXMMMMSMMMA +MSASMMMXMXAAMXSAXXXXAMAMAXAMSMMMMSASASAMAXMSMSXAXASXSMSXMASMXMAMXMSASAXAAMMAMAMXSSXSASASMXASMMSMMASAXXSAXXSSSSSSSXSXMXMAMAMXXAAAMXSMMXXMSMXS +SMMMMMMMSMMSXMSXMSAMMSAMSMXMXAAAASAMASMMMSAMXMXSMMSMAXSASASASMAXXXMAMAMMMASMSXAAASASXXMAXMMMMASAMXMMMASMMXXAMAMXAAAMAAXAMSAMMXSSSMXMAXSAMXAX +SAMSMSAAXAAMAMXAXSAMXMXSXASXXMMXXMAMAMAAASXSASAMAMXMAMSAMXSAXSXMSAMAMAMASXSAMXMXMMMMMMMMSMSAMMSAMMASMXMAXXXMMMMMMMMASASXMXAMXAMAMAXXAMMXMMSS +SAMAASMMSMASAMSSMMXSMMMAMMMMXSSSXSAMXSMMMSASXMASMSSXMAMAMAMXMMMMMXSASXMAXXXAMXMMXAAAAXAMMAMXSAXASXAXMASXMMMXXASMAMXMMMMAMMAMMXMAMSMMMSMAXAMA +SAMMXMAMXMAMAMAXAMAXAXMAAAAXSAAMASXSMMMMAMMMMMMMXAXAXMAMMXSSMSAAAXSASXMSSSSMMXMAXXXSSSMSMMMSMMSAMMXXMMMMAAMMSMMSAXSMSASAMSSMMAMAMAXAAAMAMSSM +XAMSASAMXMASASMSXMASXMXMXSXSMMAMAMXXAAAMAMSASAAAXMSMMSSMXXMAAMSMSXMAMXAXAMXMAMXSSSMAXAAAMXXXAMMAMMMMXAAMMSAAASMMMSXASASAXXMAXSSMSXSMSSMMXMAX +SSMSASMMMXMAAXXSAMXSAAMSMXXXAASMSSXSXMSSSXSASMMXAXAMXAAMXAMMMMMXXXMAMMAMXMMMAMXAAAAMMMSMSSMMXMSAAASXSSMSAMMSMSMMMAMMMAMXMXXSMAAAAXMAXMAXXSAM +XAAMAMMSSMSMXMAMSAMXMSAAASMSXMXAXXXSAMXAXMMXMAXSMXSSMSSMMASXAXXAMMSMXMAMMAASASXMSMMXAXAAXMASAMXSMAAAAAAMMMMXASMSMMAXMAMASXAMMXMMMMXMSSMMXMAS +SMMMMMXXAAXXAMMSASAMXMXMSMAAMMMMMSAMXSMMMXMMMMMASMMXXMAMXAMXMMMXMAAMASASMSMMASMXMAXSSSSXMSAMASXXSSMMMMMMMAAMXMAAAXSXSSSMSMXSAMXMAAAXMAMSMMAM +SAMXMSXSMMMSXXSAMXXXXMXXXAXXAXAMAMMSMAMXSAASAMXAMMSMXSASXXMASAAXMSMXAMAMAMXMMMMAMSMAMMXAXMMSAMXAMMAXXXSSSMSMSMSMSXXMMASXXAMXMXMSMSXXSAMASXAS +SAMSSSMXXAXAXMXMASXMSMASMMMSSSMSXMAAMXXAMMSMAXMASXAAAMASMXAXXXSXMASMXSAMAMXMAAMAMMAXSASXMAXMMSMXMSMXSAAAMMMMMAXAXMSASAMXMMMMAAXXAMXXMASASXMM +SMMXAMMMMMXSXSAXXXAAAXMXAAXAAMXAMMSMSMMXSXMXAMXSMMMSMMXMAAMMSAXXSAMXAAXSXSSSSSSXSAXXMASXXXMAXMASAAMAMMMMMASAMSMAMASXMASMMMAASXSSSXSMSXMASAMX +SMMSXMASASMMASMSMSMSMSMSSMMMMMMSSMAAAAMAMAMMMSXAAXXMAMMMXXAAMXAAMASMMMMSMMAAMAAMXMAMMMMAMSSSMSAMAAMASAAXSAXAMAMXMXMAMSMMAAMMXXAMXAMXAXXASMMA +XAASASXMMMAMXMAAXAAXXAXAMXXMASXMAXXSSSMASAMAAMMMMMXSAMMMAMMXSMMMSXMAMAAXAXMMMMMMSSMSAMMAMMAXAMXSXXSASXSMMMSSMMMMMMMMXXASMXSAXMMMMSMMMMSAMAAA +SMMSAMAMSMXMAMXMXMAMXMASMSMSAMASMMMMMMMMXXSMXSAMMSAXASAXSMXAAXXXXAMAMMSSSMAASAAXMAXMAMSSXMAMSMMXMASAXXMASAAXAXMAAAXXMSAMAXMASAXMXMASAAMAMSMS +AAAMAMSMSAASXSAAMXSXXMAMAMMMMSMSASASASMXSASXAMAASMSSMMMXMAASMMSSMMMSXMMAMASMSSSSMMMSSMMXAMAMAAXXMXMXMXXAMMXXXMSSSSSXMMMMAMXSXXXMAXMMMXXAMAAX +SMMSAMAAXSMMASMSMAXASXAMAMXAXAASASASASAAMAMMSSMMMAXXAASXMMMXAMMMASAXAMMXMAMXXXXMMXAAMAXMMSASXSMMMAMXSSMSMSASAXAAXXXMSAMSMSMMAMMMSMAMAMSSSMSM +AAXSXSMMMAMXMXAMMXMASXXSSXXASMMMAMMMMMMMMAMAXXMAMSMXMASXAXSSXMASAMAXAMSAMXSXMXMSXMXSSSMSAAMSAMAMSMSAXAAAAASAAMMMMMXAMAXAAAAMSMAAAXAMMMAMAXAA +MSMMXMXXMXMAMMMMMAMMMMMAMAAXMMXMXMXAXXXMSMMMSAMXSAAXMSXXXMMAMSASAMASXMSASAAMMAMASMMMAMXMMSSMAMSMAAMXMMMMSMAMAXAAAAASXMMMSMXMXSMSSMXSSMXXMMMS +XXASASXMXAMMXAAMMASAAMMAMXMAAXXSAMSASMSAMAXMMAMXSASMXMAMXXMSMMAXXMASMASAMMSMXAXXSMAMAMMSMMAXXMMMXSASXSAMMMMXMSSSMSMMXASXXMSMXMMAXMMXMXMASXXM +MSAXAXAXMSMAXSSMSASMSXSSSMMSMMMSAMXMXMXASMMSMMSMSMMMXMXMAMMAAMAMXAMXMAMAMXAMSXSAMASMSMMAMMAMXXXMXAAMMSASAAXAMAMXMMMSSXMASAAMAAMMSMSASASAMAAM +MMMMSMMMAMMSMAAAMXSXMXXMAXAXAAASMMAXMSSXMXAMSAAASAAAAXMSAMSAMMAXXAMXMMSSMMMXAMMAMAMMAAXAXSMSXSMSXMAMASXMXSSXASXSXSAAAAMAMMMSSSMXAXMAMAMMMSAM +MSMAMAASMSAMMMMXMASXMAMXMMMSSMXSASXMAMMMAMSMXSMMMSMSMSAXSMXAXSASXMSAAAAAMMXMASAMXASXMSMAXSAXAXAAMXXMAXXMAMMMMMAAAMMMSMMXSSXXAAMMXXMSMSMSXMAS +AAMMSMXSXMAMXMASMMXXAAXSXMXAAMASXMAASAAAMAMXMASAXXMAAMMMMXMMMMASAAXXMMSSMMXSMMMMSMXXAMXSAMXMSMSMSSSMSXMMAXAAXMMMMMXXMAXAMMXMSMMMSMXMAMAAASMM +SMXXAAAMAXAMXXAXAAXMMXSXAMMSSMASMAAMASXSXXAMSASXSXMMMMASXAMAAMMMMXMXXMAMAXAXXAAXAMMMSMAMXAAXAAAAXXAMMASXSSSSSXXAXXMMSSMSXSXMASAAXMAMAMXMAMXA +AAASMSXMAMSAMXXMAMXAXMMMMMXAXMMXAXMXXMMMMXAXMASAAMXMMMASXXMASXSXXMAMAMAXMMMSSSSSMSAAMXAMSSXMMSMSMSMMSXMAMXMAXMSXSXMAXMXMAMXSASMSAMMSMMAXMMSX +MAMXAXMASXXASASXSMSSXMAAXAMXXSAMSXMAMMAAMMSMMXMXMASMSMASASXAMASMASASXSMSAAXXAAXXAMMMMMAMAMXAMAMAAAMASASXSAMAMMMAMAMMXSAMXMMMASXXAMAAAXMSAAMA +SSSMSMSAMAXAMASXXAAAAMSSMMSMXMMSMAXSMSMMSAAXXXAMXMXAAMXMAMMXMAMSXMAXMAAXMMSMMSMSSMSASMXMASMXMASMSMMASASAMAMMMAMXMAXSMXAXXMAXAMASXMSMXMAMMMSX +AAAAXAMXSMMSMMMMMMMSXMMMMMAAAMXAMMMXAAAXMMSMMMSMXMMSMSASAXXXMXMXXMSSMMMXSXAMAAAMAASASXAMSMMMSXMXAXMMSAMMMAMXSXSSXSAAASXMSMXMASMXMAMASMSMXMAA +MSMMMMMXMAMMAAXAAMXXAXAAASMXMSSMMSASXSSMMSAAMAAAASAXXXXMXSASXSMXXAAAXXMASXMMXSSSMMMXMASXAAAXAMSMMMSAMMMXSASMSMAXAMSMMMSXAAASAMXMMAMMSAAXSMSM +XMXXMAMXXXSXSMSSXMASMXMSMSXXSXXAAAMAAAMAXSXSMSMMXMASMSXXAAAXMASAMMSSMMMMMXXMAXXAXSXAASXSMSMSAMXAAAMASASMSASAXMAMXMASAAXSMSMMAMXASXSAMXMMMAAX +MSMSSSMMSMAAXXMASMAMAAXMMMXXXAMMMMMMMMMMMSXMMXXMAMSMAAXSMMSMMSAMXAAMMMASXSMSXXAXAMSXSAAMXAAXXMSMMMSSMMXAMMMMMMXXAMAXMMXXXMASXMSMXMMMSMXSMSMS +AAAXAXXAAMMMXAMAMMAMMMSAAAXSMMMSAXXAMAXSAMAXMAXXAMXMMMMXAAXXSAMXXMMSMSMSASASAASMSASMMMSMSMXMAASXSMMMAXMSMMAMXMMXSMXXAXSASAMXAAXSASMXAAAMAMAS +XMSMXMMSXSXMXMMMMSMSXXXMMSXMAMAMXSXMSASMAMXMMAMSSSXSAXSMMMSMMAMASMXSAAMMMMXMSMXAMAMAXAMAMXASAMXAMASXXMAXMXMSSSMAAAASMMMASXSSMMMSXMXMMMMAAMMM +SSMAAAXMXSAMXSAMASAMMSMMXXASAMXSASAXMMSXSMMAMAXXAMASMMMAAAAASXMAXXAMSMSSSXSAMXMAMASXMASAMSMSAAXMSAMXAXSXSAMXAAMAMMMAAMMAMMXAMMAMAMAXXASXMSSS +XMASXSMMXSAMMSASAMAAAMAMAMMXAXAMAMSSSSXAMAMSMMSMAMAMMASXMXSMMAMXSMXMAMAAAMXMMXMXSAMMMMSAMXAMMMMXMASXMAMAMXSMMMMXXASMMMMMSAMXMMASASASMXXAMXAS +MMAMMMASASAMAXAMASMMXSAMXSMSSMSMSMAMXAMXMAMXAAXXAMASMASAAAMMSXMAXXMMSSMMMAXSAMXAMASASAXXMMMMAAXMSMMMMMSAMXXMASXMSXSAMXMMMXMAMXASASASXMXSMMMM +AMASASXMASAMMSSSMMMMMSXSMMAAXMAAAMAMMSMMSSSSMMMSMSASMASMMMSASXSMSMXAXXXXXSMAXXMMXMMAMASXMAXMSXSXMASXSASASXASMSAMAMSAMXSAMMSASMMMMMXMMSAMXSAM +MMASASXMAMXMMAMXMAASMMXMAMMSSXMMMSASXAAXAAXXAAAXXMXSMAXAMXMAMAXAAAMSSMSAMXAXMSXSAMMSMXAAMSSMASAAMXAAMASAMMMMMSXMAASAMAMASMMMXMXAAMXXAMASXSAS +MSMMMMXMXMAXMAXXSSMSAMXMAMXAXXXAAMAMXSMMMSXSSMSAXMXXMXMSMXMSMXMMMSMMAMSAXXMXASASASAXMMSMMAAAMAMMSAMXMXMMMSAAMXASMMSAMAMXXXAMMMSSMSMSAMAMXSAM +MAAAAMAXMMAMSSMAMAMSAMASMSMSSMSMMSASAAAXAXMMXAMXMASMXXXMASAAAASMAMMSSMMMSMMSAMAMSMXSSXXAMSMMXMAAXAXXXXAAAXSMMXXXMAMMMSAAMSMXAAMAXXAMXMMXMMMM +SSSMSXSSXMXMAAAMXSASMMMSAAMMAMXAXSXMXSMMMMAASXMAMXMXXMASAMAMSMMASXMAMAASAAASAMXMAXXAXASMMXAAXXMSSMSSMSSMSMMMSSSSMMSXAAMXMAAMXSMMMMXMAMMAMAMX +XAAAAAXAMMXMXSMAMXAXXXAMMMMSAMMXMSMMAXXASXMMSASXMSMASMAMAMXXXAMAMAMXSSMSMSMSAMXSSMMAMMMAASXMMXAMAXAAXAXAMXXSAAMMAAAMXSMSMMXXAAXMAAMSXSAMSASM +XSAMMXMASXMAXXXMAMMMMMMMAMMSASXMAMAMASMMMAXXMAMMAAMXSMXMAMSSSMMXSXMAXMASMMMSAMXAAASMMXSMMXXAMXMSXMSXMMSMASXMMSMSMMSSXAASMAAMXMMSMSXXAMAXSAMA +MXMASXMMMASMMMSXSAASMXSSXMMSAXMAXSAMXSAASXMSMMMMSMSAXMSMMMAAAMSMMAAMXMASXAASMMMMMMAAAXMASXMAMXXMMMMMMXAMXASXAAAAAXAXMMAMMMSMSAXSAMMMMMSMSMSM +MAMAXMAMXXMASMSAMSSSXAMASAAMMMMSMSXSMSMMMMAAAASMAAMMSAAAAMMMMMAASASMSMASXMXMSAAXXMMXMMSAMMSAMXXSASAAMAXSAMXMSSSSSMMSMMMSASAAXMMMXMXXMAMXXAAX +XXSMMSMMSASXXAMAMXMMMMSAXMXMXASAXXMAMXAXSXSSSMMSXXSXSXSMMSXASMSMMAMAMMAMXMAMSSSSXXXXSAMAMXSASMXXXSMSSMXMAXXMMMXXMASXXAASMSMAMSASAMMMMSSSMSMS +XMAMAAAASXSMSSMMMSAAAMMMMXAMMXMMSSSMMMMMMAMAAAMMSXSAMAXAMXXXSAMAMMMAMMMMXMAMMAMAXXASMXSSMASMMMMMXMAXAXAXAMXMAMSXSSMSSMXSXMASMSASMSAAMXAAAAMX +XMAASMMMSAMAAXAXASMSMXAAAMAXMAMSXMAXMAMAMAMSMMAAMXMMMAMXMAMMMAMAXSSXSASASMSSMAMAMMMMAAAXMXMXSAASASXXASXSMMXSASMAMXAMXMAMASMMAMAMASMSSMMMSXSX +XMAMMAMSMAMMMSMMXXAXXSMSXSAASAMXASMMSMSASAXXAXMAMAMAMXSSMASXMMMXMMAASASAMAAAMAMAMXXXMMSMSMMAMSMSASAMXMMAAXASXMMAMMMMAMASMMXMMMAMXMAMXMSXAMSX +XXXXXMMASAMXXSXXXMSMMMAAAMXMXAMSMMXMAASXSMSMMMSAMMSASAAXSAXMXXSXSMAMMXMAMXMASXSAMXXAXMXAAAMXXMXMMMMMMASXMSMSSXSASAASMSASAXXMXSMSSMXMASAMXSMA +XXAMXXSXSMMXXMAMXMAAXMXMMAMMSAMAAAXSMXSAXAMXSASASAAMSMSXMXMMSAXASMXSMXSXMMSAMXSMSMSXMSSSSSMXMASXSAMXSMMAAMXMAMSAXAMMAMASMMMSAXSAAMSSMMMAMAMX +SSMMXXAMMMXMXMAMMMSSMASMXSAXMASMMMMXXAMXMSAXMASAMXSMXAMXXMSAAMMMMXMAMAMASMMSMMSAAASAMAAXMAXXSXSASMSMMAMMAMSSMMMMSXSMSMAMAAMMASMSMSAMMAXAXAMX +MAMSMMMMASAMASASXAAAMASMAMMSAMXAASMMMMSAMXAXMAMXMAXXMSMMSAMXSMSASXSAMXSAMAAXMAMSMMSAMXSMMXMMAMMAMXAMSSMMSMAAAXMASAAAXMSMSSSMXMAXMMASMSSMSSSM +MMMAAAXSASASASMSXMSSMASMXMXMASMSMMAAAAXXAASMSAMXMSSXMAAXMAMAAASASASXSAMXSMMSMMXXXXSAMAXAXAXAAMMAMSMXAMSAAMSSMMSAMSMMMMAAMAXMMSAXXMAMAAAAAMXA +SXSSSMXMASXMXSXMAMXAMXSAMXXXSXXMXSSMMSAXSAMAXXMXMMSXSMSMSAMSSXMXMAMSMXSAXMSXXXMXAMSMMXSSMSMSASMMMXSMXSMSSMMAMXMAXAMXSSMSMSMMMMMSMMASMSMMMSAS diff --git a/day4/test_input b/day4/test_input new file mode 100644 index 0000000..1f4eda2 --- /dev/null +++ b/day4/test_input @@ -0,0 +1,10 @@ +MMMSXXMASM +MSAMXMSMSA +AMXSXMAAMM +MSAMASMSMX +XMASAMXAMM +XXAMMXXAMA +SMSMSASXSS +SAXAMASAAA +MAMMMXMMMM +MXMXAXMASX diff --git a/kalmennAOC2024.cabal b/kalmennAOC2024.cabal index 6b0d2e5..83dcf99 100644 --- a/kalmennAOC2024.cabal +++ b/kalmennAOC2024.cabal @@ -41,3 +41,12 @@ executable day3 parsec-numbers ^>= 0.1.0 hs-source-dirs: day3 default-language: Haskell2010 + +executable day4 + import: warnings + main-is: Main.hs + build-depends: + base ^>=4.18.2.1, + parsec ^>= 3.1.17.0 + hs-source-dirs: day4 + default-language: Haskell2010