- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
module Main where
import Control.Monad
--import Data.Monoid
data State s a = State (s -> (a, s))
runState :: State s a -> s -> (a, s)
runState (State f) = f
instance Monad (State s) where
return a = State $ \s -> (a, s)
ma >>= mf = State $ \s0 -> let (b, s1) = runState ma s0
in runState (mf b) s1
type FSM s = State s s
fsm :: (ev -> s -> s) -> (ev -> FSM s)
fsm transition = \e -> State $ \s -> (s, transition e s)
data PN = NONZ | PONZ | POPZ | NOPZ deriving (Eq,Show)
parse :: Int -> FSM PN
parse = fsm $ trans
where trans 1 NONZ= PONZ
trans 1 NOPZ= POPZ
trans 1 POPZ= NOPZ
trans 1 PONZ= NONZ
trans 0 POPZ= PONZ
trans 0 PONZ= POPZ
trans 0 NONZ= NOPZ
trans 0 NOPZ= NONZ
conv [] = []
conv ('1':xs) = 1:(conv xs)
conv ('0':xs) = 0:(conv xs)
conv (_:xs) = error "parse error"
main =do
x <- getLine
print $ (snd $ runState (mapM parse (conv x)) POPZ) == POPZ
print $ runState (mapM parse (conv x)) POPZ
ckopo 08.05.2013 13:37 # −2
Гы-гы.