Advertisement
Guest User

Emilia

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