Skip to content

Instantly share code, notes, and snippets.

@portnov portnov/array.hs
Created Oct 10, 2019

Embed
What would you like to do?
Merge arrays
import Control.Monad
import Data.Array.IO
import Data.Array.Base
import Data.Char (ord)
import qualified Data.ByteString as B
import qualified Data.ByteString.Char8 as C8
addToIOArray :: IOUArray Int Int -> Int -> IO ()
addToIOArray arr idx = do
val <- unsafeRead arr idx
unsafeWrite arr idx $ val + 1
fillIOArray :: IOUArray Int Int -> IO ()
fillIOArray arr = readLine >>= addList
where
readLine = parseLine <$> B.getLine
parseLine = tail . map parseInt . B.split (fromIntegral $ ord ' ')
parseInt str = case C8.readInt str of
Nothing -> error $ "not an integer: " ++ show str
Just (int, _) -> int
addList = mapM_ (addToIOArray arr)
printPair :: Show a => (a, Int) -> IO ()
printPair (a, b) = replicateM_ b $ print a
main :: IO ()
main = do
k <- read <$> getLine
arr <- newArray (0,100) 0 :: IO (IOUArray Int Int)
replicateM k $ fillIOArray arr
getAssocs arr >>= mapM_ printPair
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.