Prefer snake-shift instead of a row-by-row shift
Per the assignment's instructions, the `Shift n` operation should treat
the *entire keyboard* like a cycle and shift that. I was erroneously
treating *each row* like a cycle and shifting those one-by-one.
This change fixes that. In addition, it also:
- Updates README.md with expected inputs and outputs
- Updates test suite
- Adds `split` dependency to {default,shell}.nix
			
			
This commit is contained in:
		
							parent
							
								
									f11b91c985
								
							
						
					
					
						commit
						bba3f16c43
					
				
					 5 changed files with 57 additions and 37 deletions
				
			
		|  | @ -7,14 +7,31 @@ import Utils ((|>)) | |||
| 
 | ||||
| import qualified Data.Char as Char | ||||
| import qualified Utils | ||||
| import qualified Data.List.Split as Split | ||||
| import qualified Keyboard | ||||
| import qualified Data.HashMap.Strict as HM | ||||
| -------------------------------------------------------------------------------- | ||||
| 
 | ||||
| transform :: Keyboard -> Transform -> Keyboard | ||||
| transform (Keyboard xs) HorizontalFlip = xs |> fmap reverse |> Keyboard | ||||
| transform (Keyboard xs) VerticalFlip   = xs |> reverse |> Keyboard | ||||
| transform (Keyboard xs) (Shift n)      = xs |> fmap (Utils.rotate n) |> Keyboard | ||||
| 
 | ||||
| transform (Keyboard xs) xform = | ||||
|   case xform of | ||||
|     HorizontalFlip -> | ||||
|       xs | ||||
|       |> fmap reverse | ||||
|       |> Keyboard | ||||
| 
 | ||||
|     VerticalFlip -> | ||||
|       xs | ||||
|       |> reverse | ||||
|       |> Keyboard | ||||
| 
 | ||||
|     Shift n -> | ||||
|       xs | ||||
|       |> concat | ||||
|       |> Utils.rotate n | ||||
|       |> Split.chunksOf 10 | ||||
|       |> Keyboard | ||||
| 
 | ||||
| retypePassage :: String -> Keyboard -> Maybe String | ||||
| retypePassage passage newKeyboard = | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue