module Main where import Day1 import Day2 import Day3 import Day4 import Day5 import Day6 import Day7 import Day8 import Day9 import System.IO import Data.List.Split import Data.Set import Text.ParserCombinators.ReadP day1_fuel :: String -> [Fuel] day1_fuel = fmap (calculateFuel . read) . lines day2_instructions :: String -> [Integer] day2_instructions = fmap read . splitOn "," day2 :: (Integer, Integer) -> [Integer] -> Integer day2 t = head . Day2.execute t day2_look :: [Integer] -> Integer day2_look xs = head $ [ 100*noun + verb | noun <- [0..99], verb <- [0..99], day2 (noun, verb) xs == 19690720 ] main :: IO () main = do r_day1 <- readFile "./app/input_day1" putStr "[Day 1-1] Fuel needed: " let fs = day1_fuel r_day1 print $ sum fs putStr "[Day 1-2] Fuel needed: " print (sum fs + (sum . fmap calculateFuelOfFuel) fs) r_day2 <- readFile "./app/input_day2" let instructions = day2_instructions r_day2 putStr "[Day 2-1] Result: " print $ day2 (12,2) instructions putStr "[Day 2-2] Result: " print $ day2_look instructions r_day3 <- readFile "./app/input_day3" putStr "[Day 3] Result: " print $ getDistanceAndSteps r_day3 putStr "[Day 4-1] Result: " print getNumberOfPasswords putStr "[Day 4-2] Result: " print getNumberOfPasswords' r_day5 <- readFile "./app/input_day5" putStr "[Day 5-1] Result: " print . last $ Day5.execute 1 r_day5 putStr "[Day 5-2] Result: " print . last $ Day5.execute 5 r_day5 r_day6 <- readFile "./app/input_day6" putStr "[Day 6-1] Result: " print $ countOrbits r_day6 putStr "[Day 6-2] Result: " print $ nOrbits r_day6 r_day7 <- readFile "./app/input_day7" putStr "[Day 7-1] Result: " print $ findMaxAmp r_day7 putStr "[Day 7-2] Result: " print $ findMaxAmpWithFB r_day7 r_day8 <- readFile "./app/input_day8" putStr "[Day 8-1] Result: " print $ day8_result1 r_day8 putStrLn "[Day 8-2] Result: " day8_result2 r_day8 r_day9 <- readFile "./app/input_day9" putStr "[Day 9-1] Result: " print $ day9_result1 r_day9 putStr "[Day 9-2] Result: " print $ day9_result2 r_day9