Spoj BWHEELER problem - input problem

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

It works fine for me, whether compiled or interpretted. Are you sure
there isn't some residual files left from a previous compile that you
are running? Try rm *.o *.hi. Or something more mundane, not saving
the file, or running the wrong executable.
2012/1/14 Artur Tadrała
Hello
While learning Haskell I'm trying to solve some simple problems on spoj.pl occasionally. Currently I'm working on: http://www.spoj.pl/problems/BWHEELER/. I figured out how to solve it but I have some problems with reading input (that's my guess)
Here is my solution:
import Data.List import Data.Array import qualified Data.ByteString.Lazy.Char8 as BS import IO
traverse :: Array Int (Char, Int) -> Int -> Int -> String -> String traverse endings n k acc = let (c,i) = endings ! n in if k == 0 then acc else traverse endings i (k-1) (c:acc)
solve :: (Int, String) -> String solve (n,w) = let l = length w endings = sort $ zip w [0..] endingsArray = array (0, l) (zip [0..] endings) in reverse $ traverse endingsArray (n-1) l ""
parseCases :: [BS.ByteString] -> [(Int, String)] parseCases (l:l':ls) = let n = readInt l w = BS.unpack l' in (n,w):parseCases ls parseCases _ = []
main :: IO () main = do ls <- BS.lines `fmap` (BS.readFile "input.txt") --BS.getContents putStr $ unlines $ map solve $ parseCases ls
readInt :: BS.ByteString -> Int readInt x = case BS.readInt x of Just (i,_) -> i Nothing -> error ("Unparsable Int" ++ (show x))
The input.txt file contains following text: 2 bacab 3 rwlb 11 baaabaaaabbbaba 0
When I compile and execute this code i get follwing output: aaaaaa lllll bbb
It's different when compared to this in ghci ( this is what I expect): > map solve [(2,"bacab"), (3, "rwlb"), (11,"baaabaaaabbbaba")] ["abcba","rbwl","baaabbbbaaaaaab"]
Can you explain me what I'm doing wrong? I appreciate any tips how to improve this code also.
Thanks for help! Artur Tadrała
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners

Thanks for help David! It was indeed really silly thing: encoding of end of
the line on Windows. BS.unlines does not remove CR from input ByteString.
In my case that was crucial.
Regards
Artur
W dniu 15 stycznia 2012 09:54 użytkownik David McBride
It works fine for me, whether compiled or interpretted. Are you sure there isn't some residual files left from a previous compile that you are running? Try rm *.o *.hi. Or something more mundane, not saving the file, or running the wrong executable.
2012/1/14 Artur Tadrała
: Hello
While learning Haskell I'm trying to solve some simple problems on spoj.pl occasionally. Currently I'm working on: http://www.spoj.pl/problems/BWHEELER/. I figured out how to solve it but I have some problems with reading input (that's my guess)
Here is my solution:
import Data.List import Data.Array import qualified Data.ByteString.Lazy.Char8 as BS import IO
traverse :: Array Int (Char, Int) -> Int -> Int -> String -> String traverse endings n k acc = let (c,i) = endings ! n in if k == 0 then acc else traverse endings i (k-1) (c:acc)
solve :: (Int, String) -> String solve (n,w) = let l = length w endings = sort $ zip w [0..] endingsArray = array (0, l) (zip [0..] endings) in reverse $ traverse endingsArray (n-1) l ""
parseCases :: [BS.ByteString] -> [(Int, String)] parseCases (l:l':ls) = let n = readInt l w = BS.unpack l' in (n,w):parseCases ls parseCases _ = []
main :: IO () main = do ls <- BS.lines `fmap` (BS.readFile "input.txt") --BS.getContents putStr $ unlines $ map solve $ parseCases ls
readInt :: BS.ByteString -> Int readInt x = case BS.readInt x of Just (i,_) -> i Nothing -> error ("Unparsable Int" ++ (show x))
The input.txt file contains following text: 2 bacab 3 rwlb 11 baaabaaaabbbaba 0
When I compile and execute this code i get follwing output: aaaaaa lllll bbb
It's different when compared to this in ghci ( this is what I expect):
map solve [(2,"bacab"), (3, "rwlb"), (11,"baaabaaaabbbaba")] ["abcba","rbwl","baaabbbbaaaaaab"]
Can you explain me what I'm doing wrong? I appreciate any tips how to improve this code also.
Thanks for help! Artur Tadrała
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
participants (2)
-
Artur Tadrała
-
David McBride