On Wed, Jul 24, 2013 at 4:18 PM, Henk-Jan van Tuyl <hjgtuyl@chello.nl> wrote:
On Tue, 23 Jul 2013 12:41:32 +0200, Nadav Chernin <nadavchernin@gmail.com> wrote:
Hi, all Below is my solution to SPOJ->Polybius square<http://www.spoj.com/problems/POLYBIUS>
Please try to shorten it:
*import Data.Maybe* *d=[1..5]* *f s=unwords$map(\c->fromJust$lookup c((' ',""):('J',"24"):zip(['A'..'I']++['K'..'Z'])[show(x+10*y)|y<-d,x<-d]))s* *main=getLine>>(interact$unlines.map f.lines)* d="12345" f s = unwords $ map (\c -> let (Just x) = lookup c ((' ',"") : ('J',"24") : zip (['A'..'I'] ++ ['K'..'Z']) [y : [x] | y <- d, x <- d]) in x) s main = getLine >> (interact $ unlines . map f . lines)
Note that you can point-freeify that solution a little and sacrifice totality, yielding an even shorter solution. (I didn't remove the lambda expression, as it ends up being shorter than flipping lookup) Inline the definitions and remove redundant spaces and newlines in the code below: d = "12345" f = unwords . map $ \c -> fromJust $ lookup c ((' ',"") : ('J',"24") : zip (['A'..'Z']\\"J") [[y,x] | y <- d, x <- d]) main = interact $ unlines . map f . drop 1 . lines Just my two cents. Gesh