2016 Update

This commit is contained in:
Tina Müller 2016-12-05 22:15:40 +01:00
parent 948b86eafa
commit dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions

View file

@ -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

View 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)

View file

@ -1,2 +1,2 @@
rle=: ;@(<@(":@#,{.);.1~ 1, 2 ~:/\ ])
rld=: '0123456789'&(-.~ #~ i. ".@:{ ' ' ,~ [)
rle=: ;@(<@(":@(#-.1:),{.);.1~ 1, 2 ~:/\ ])
rld=: ;@(-.@e.&'0123456789' <@({:#~1{.@,~".@}:);.2 ])

View file

@ -1,6 +1,6 @@
sub encode($str) { $str.subst(/(.) $0*/, -> $/ { $/.chars ~ $0 ~ ' ' }, :g); }
sub encode($str) { $str.subst(/(.) $0*/, { $/.chars ~ $0 }, :g) }
sub decode($str) { $str.subst(/(\d+) (.) ' '/, -> $/ {$1 x $0}, :g); }
sub decode($str) { $str.subst(/(\d+) (.)/, { $1 x $0 }, :g) }
my $e = encode('WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW');
say $e;