Hello<br><br>While learning Haskell I'm trying to solve some simple problems on <a href="http://spoj.pl">spoj.pl</a> occasionally. Currently I'm working on: <a href="http://www.spoj.pl/problems/BWHEELER/">http://www.spoj.pl/problems/BWHEELER/</a>. I figured out how to solve it but I have some problems with reading input (that's my guess)<br>
<br>Here is my solution:<br><br>import Data.List<br>import Data.Array<br>import qualified Data.ByteString.Lazy.Char8 as BS<br>import IO<br><br>traverse :: Array Int (Char, Int) -> Int -> Int -> String -> String<br>
traverse endings n k acc = <br> let (c,i) = endings ! n<br> in if k == 0<br> then acc<br> else traverse endings i (k-1) (c:acc)<br><br>solve :: (Int, String) -> String<br>solve (n,w) = <br> let l = length w<br>
endings = sort $ zip w [0..]<br> endingsArray = array (0, l) (zip [0..] endings) <br> in reverse $ traverse endingsArray (n-1) l ""<br><br>parseCases :: [BS.ByteString] -> [(Int, String)]<br>
parseCases (l:l':ls) = <br> let n = readInt l<br> w = BS.unpack l'<br> in (n,w):parseCases ls<br>parseCases _ = []<br><br>main :: IO ()<br>main = do<br> ls <- BS.lines `fmap` (BS.readFile "input.txt") --BS.getContents<br>
putStr $ unlines $ map solve $ parseCases ls<br><br>readInt :: BS.ByteString -> Int<br>readInt x =<br> case BS.readInt x of Just (i,_) -> i<br> Nothing -> error ("Unparsable Int" ++ (show x)) <br>
<br><br>The input.txt file contains following text:<br>2<br>bacab<br>3<br>rwlb<br>11<br>baaabaaaabbbaba<br>0<br><br>When I compile and execute this code i get follwing output:<br>aaaaaa<br>lllll<br>bbb<br><br>It's different when compared to this in ghci ( this is what I expect):<br>
> map solve [(2,"bacab"), (3, "rwlb"), (11,"baaabaaaabbbaba")]<br>["abcba","rbwl","baaabbbbaaaaaab"]<br><br>Can you explain me what I'm doing wrong?<br>I appreciate any tips how to improve this code also.<br>
<br>Thanks for help!<br>Artur Tadra³a<br>