mapM_ putStr $ flip clr "N" <$> total
shut
[ unit "nothing"
(nodes $ go 1 prim)
(nodes prim)
, unit "trivial"
(nodes $ go 1 $
set (Some []) 0 prim)
(nodes $
set (Some []) 0 prim)
, unit "stall adjacent"
(nodes $ go 1 $
set (Some [L]) 0 $
set (Some [H]) (shift prim 1 L 0) prim)
(nodes $
set (Some []) 0 $
set (Some []) (shift prim 1 L 0) prim)
, unit "stall loop"
(nodes $ go 1 $
set (Some [L]) 0 $
set (Some [U]) (shift prim 1 L 0) $
set (Some [N]) (shift prim 1 I 0) prim)
(nodes $
set (Some []) 0 $
set (Some []) (shift prim 1 L 0) $
set (Some []) (shift prim 1 I 0) prim)
, unit "stall next"
(nodes $ go 1 $
set (Some [L]) 0 $
set (Some [H]) (shift prim 2 L 0) prim)
(nodes $
set (Some []) 0 $
set (Some []) (shift prim 2 L 0) prim)
, unit "stall tri"
(nodes $ go 1 $
set (Some [I]) 0 $
set (Some [L]) (shift prim 1 H 0) $
set (Some [I]) (shift prim 1 N 0) prim)
(nodes $
set (Some []) (shift prim 1 I 0) $
set (Some []) (shift prim 1 H 0) $
set (Some []) (shift prim 1 N 0) prim)
, unit "shift prim"
(nodes $ go 1 $
set (Some [L]) 0 $
set (Some [H]) (shift prim 3 L 0) prim)
(nodes $
set (Some []) (shift prim 1 L 0) $
set (Some []) (shift prim 2 L 0) prim)
-- , unit "diff test"
-- "this is my test"
-- "this is my target"
]
data Test = None | Some [Dir]
deriving ( Eq, Show )
instance Atom Test where
void = None
mass a
| None <- a = False
| Some _ <- a = True
move a
| Some (d:_) <- a = Just d
| otherwise = Nothing
prim :: Verse Test
prim = verse 11
go :: Int -> Verse Test -> Verse Test
go i v = iterate (sim test ()) v !! i
test :: Automaton () Test
test = Automaton f
where
f () _ t
| Some m <- t = Some $ drop 1 m
| None <- t = None