adventofcode/2022/Vm.hs

29 lines
607 B
Haskell

module Vm where
import Control.Monad.Trans.State as St
data Instr = Noop | Addx Integer
data CpuState = CS {regx :: Integer, step :: Integer}
initState = CS 1 0
eval :: Instr -> St.State CpuState ()
eval Noop = do
s <- St.get
put $ s {step = step s + 1}
eval (Addx i) = do
s <- St.get
let step' = step s + 2
let x' = regx s + i
put $ CS x' step'
instrFromWords :: [String] -> Instr
instrFromWords ["noop"] = Noop
instrFromWords ["addx", i] = Addx (read i)
readProgram :: IO [Instr]
readProgram = do
x <- lines <$> getContents
pure $ map (instrFromWords . words) x