Support Transforms.optimize
Partially optimize inputs and document rules for further optimizations we can make.
This commit is contained in:
		
							parent
							
								
									d45685e245
								
							
						
					
					
						commit
						e14fff7d4b
					
				
					 2 changed files with 19 additions and 0 deletions
				
			
		|  | @ -71,3 +71,10 @@ main = hspec $ do | ||||||
|                    , Utils.rotate (-3) ['A','S','D','F','G','H','J','K','L',';'] |                    , Utils.rotate (-3) ['A','S','D','F','G','H','J','K','L',';'] | ||||||
|                    , Utils.rotate (-3) ['Z','X','C','V','B','N','M',',','.','/'] |                    , Utils.rotate (-3) ['Z','X','C','V','B','N','M',',','.','/'] | ||||||
|                    ] |                    ] | ||||||
|  | 
 | ||||||
|  |   describe "Transforms.optimize" $ do | ||||||
|  |     it "removes superfluous horizontal transformations" $ do | ||||||
|  |       Transforms.optimize [HorizontalFlip, HorizontalFlip] == [] | ||||||
|  | 
 | ||||||
|  |     it "removes superfluous vertical transformations" $ do | ||||||
|  |       Transforms.optimize [VerticalFlip, VerticalFlip] == [] | ||||||
|  |  | ||||||
|  | @ -33,6 +33,18 @@ command = vertical | ||||||
|         Nothing -> pure $ Shift n |         Nothing -> pure $ Shift n | ||||||
|         Just _  -> pure $ Shift (-1 * 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 :: String -> Maybe [Transform] | ||||||
| fromString x = | fromString x = | ||||||
|   case readP_to_S (manyTill command eof) x of |   case readP_to_S (manyTill command eof) x of | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue