{-# LANGUAGE ExistentialQuantification #-}
module AOC.Challenge.Day05 (
day05a
, day05b
) where
import AOC.Common.Intcode (Memory, IErr, parseMem, yieldAndDie, stepForever)
import AOC.Solver ((:~>)(..))
import Data.Conduino ((.|), runPipe)
import Data.Either (fromRight)
import qualified Data.Conduino.Combinators as C
runProg :: Int -> Memory -> Either IErr (Maybe Int)
runProg i m = runPipe $ yieldAndDie i
.| stepForever m
.| C.last
day05a :: Memory :~> Int
day05a = MkSol
{ sParse = parseMem
, sShow = show
, sSolve = fromRight Nothing . runProg 1
}
day05b :: Memory :~> Int
day05b = MkSol
{ sParse = parseMem
, sShow = show
, sSolve = fromRight Nothing . runProg 5
}