Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Data.Sequence as Q
- main = interact $ unlines . map show . solve . flip Q.replicate 'A' . read
- solve q = Q.length q : go q where
- go q | Q.length q < 2 = []
- | ('A',q') <- nom q = go (q' <> Q.fromList "BC")
- | otherwise = go' q
- go' q | (c,q') <- nom q = case c of 'B' -> go' (q' |> 'A')
- 'C' -> go' (q' >< Q.fromList "AAA")
- _ -> solve q
- nom q = (c,q'') where (c :< q') = Q.viewl q
- q'' = Q.drop 1 q'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement