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