diff options
Diffstat (limited to 'scratch/brilliant/Transforms.hs')
-rw-r--r-- | scratch/brilliant/Transforms.hs | 52 |
1 files changed, 0 insertions, 52 deletions
diff --git a/scratch/brilliant/Transforms.hs b/scratch/brilliant/Transforms.hs deleted file mode 100644 index d8df8f8372e0..000000000000 --- a/scratch/brilliant/Transforms.hs +++ /dev/null @@ -1,52 +0,0 @@ --------------------------------------------------------------------------------- -module Transforms where --------------------------------------------------------------------------------- -import Control.Applicative ((<|>)) -import Text.ParserCombinators.ReadP --------------------------------------------------------------------------------- - -data Transform = VerticalFlip - | HorizontalFlip - | Shift Int - deriving (Eq, Show) - -digit :: ReadP Char -digit = - satisfy (\c -> c >= '0' && c <= '9') - -command :: ReadP Transform -command = vertical - <|> horizontal - <|> shift - where - vertical = - char 'V' >> pure VerticalFlip - - horizontal = - char 'H' >> pure HorizontalFlip - - shift = do - _ <- char 'S' - negative <- option Nothing $ fmap Just (satisfy (== '-')) - n <- read <$> many1 digit - case negative of - Nothing -> pure $ Shift n - Just _ -> pure $ Shift (-1 * n) - --- | Attempt to remove redundant transformations. --- | Here are some rules that I'd like to support but may not have time for: --- | - All even-numbered flips (w/o intermittent shifts) can become zero --- | - All odd-numbered flips (w/o intermittent shifts) can become 1 --- | - All shifts can be be reduce to the absolute value of shifts -optimize :: [Transform] -> [Transform] -optimize [] = [] -optimize [x] = [x] -optimize (VerticalFlip:VerticalFlip:xs) = optimize xs -optimize (HorizontalFlip:HorizontalFlip:xs) = optimize xs -optimize xs = xs - -fromString :: String -> Maybe [Transform] -fromString x = - case readP_to_S (manyTill command eof) x of - [(res, "")] -> Just res - _ -> Nothing |