2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -1,4 +1,5 @@
|
|||
import Data.List (group)
|
||||
import Control.Arrow ((&&&))
|
||||
|
||||
-- Datatypes
|
||||
type Encoded = [(Int, Char)] -- An encoded String with form [(times, char), ...]
|
||||
|
|
@ -6,12 +7,11 @@ type Decoded = String
|
|||
|
||||
-- Takes a decoded string and returns an encoded list of tuples
|
||||
rlencode :: Decoded -> Encoded
|
||||
rlencode = map (\g -> (length g, head g)) . group
|
||||
rlencode = map (length &&& head) . group
|
||||
|
||||
-- Takes an encoded list of tuples and returns the associated decoded String
|
||||
rldecode :: Encoded -> Decoded
|
||||
rldecode = concatMap decodeTuple
|
||||
where decodeTuple (n,c) = replicate n c
|
||||
rldecode = concatMap (uncurry replicate)
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
13
Task/Run-length-encoding/Haskell/run-length-encoding-2.hs
Normal file
13
Task/Run-length-encoding/Haskell/run-length-encoding-2.hs
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
import Data.List
|
||||
import Data.Char
|
||||
|
||||
runLengthEncode = concatMap (\xs@(x:_) -> (show.length $ xs) ++ [x]).group
|
||||
runLengthDecode = concat.uncurry (zipWith (\[x] ns -> replicate (read ns) x))
|
||||
.foldr (\z (x,y) -> (y,z:x)) ([],[]).groupBy (\x y -> all isDigit [x,y])
|
||||
|
||||
main = do
|
||||
let text = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW"
|
||||
let encode = runLengthEncode text
|
||||
let decode = runLengthDecode encode
|
||||
mapM_ putStrLn [text,encode,decode]
|
||||
putStrLn $ "test: text == decode => " ++ (show $ text == decode)
|
||||
Loading…
Add table
Add a link
Reference in a new issue