рд╣рдо рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реИрд▓реА рдореЗрдВ рдпреИрдВрдбреЗрдХреНрд╕.рдЗрдВрдЯрд░рд╡реНрдпреВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ

рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рдпреИрдВрдбреЗрдХреНрд╕ рдХреЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЕрдиреБрднрд╛рдЧ рдХреЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереАред рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдпреИрдВрдбреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЛ рджрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдорд╛рди рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рд╛рд╕реНрдХреЗрд▓ рдкрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╕реЗ рдореЗрд░рд╛ рдзреНрдпрд╛рди рддреБрд░рдВрдд рдЖрдХрд░реНрд╖рд┐рдд рд╣реБрдЖред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрджреНрдпрдкрд┐ рдореИрдВ рдЗрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рд╢реМрдХреАрди рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╢реИрдХреНрд╖рд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝рд╛рдпрд╛ рд╣реИред рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдЙрдирдХрд╛ рд╕рдорд╛рдзрд╛рди рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЪреБрдиреМрддреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░рд╛ рд╕реНрддрд░ рдмрдврд╝реЗрдЧрд╛, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рд╛ред


рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрддрдГ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЖрдпрд╛, рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред


A. рдкрддреНрдерд░ рдФрд░ рдЧрд╣рдиреЗ


рд▓реЛрдЕрд░рдХреЗрд╕ рд▓реИрдЯрд┐рди рдЕрдХреНрд╖рд░реЛрдВ рдХреА рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рджреА рдЧрдИ рд╣реИрдВ: рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬреЗ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрд╕ред рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдЕрдХреНрд╖рд░ "рдЧрд╣рдиреЗ" рд╣реИрдВ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ "рдкрддреНрдерд░" рд╣реИрдВред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдПрд╕ рд╕реЗ рдХрд┐рддрдиреЗ рд╡рд░реНрдг рдПрдХ рд╕рд╛рде "рдЧрд╣рдиреЗ" рд╣реИрдВред рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ S рдХреЗ рдХрд┐рддрдиреЗ рдЕрдХреНрд╖рд░ J рдореЗрдВ рд╣реИрдВред

рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп рдПрдХ рд╡рд╛рд░реНрдо-рдЕрдк рд╣реИ, рд╣рдо рдЗрд╕реЗ "рдорд╛рдереЗ рдкрд░" рд╣рд▓ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдЬреНрд╡реЗрд▓рд░реА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ :: рд╕реНрдЯрд┐рдВрдЧ -> рд╕реНрдЯреНрд░рд┐рдВрдЧ -> рдЗрдВрдЯ , рдЬреЛ рджреВрд╕рд░реЗ рддрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рд╕реВрдЪреА рдХреЗ рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдкрд╣рд▓реА рд╕реВрдЪреА рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдЖрдЗрдЯрдо рдХреЗ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо elemInt рдлрд╝рдВрдХреНрд╢рди рдХреЛ elem рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдВрддрд┐рдо рдХреЗ рд╡рд┐рдкрд░реАрдд, True рдпрд╛ рдЧрд▓рдд рдирд╣реАрдВ рд▓реМрдЯреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдирдВрдмрд░ 0 рдпрд╛ 1. рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рджреЛ рд▓рд╛рдЗрдиреЗрдВ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдирд┐рд░реНрдгрдп рдареАрдХ рд╣реИ, рд╣рдо рджреВрд╕рд░реЗ рдХрд╛рд░реНрдп рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред


jeweleryCount :: String -> String -> Int jeweleryCount j = foldr ((+).(elemInt j)) 0 where elemInt sx = fromEnum $ elem xs main :: IO () main = do j <- getLine s <- getLine print $ jeweleryCount js 

рдЗрд╕реЗ рдФрд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рднреА рдЬреАрдердм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред


B. рд▓рдЧрд╛рддрд╛рд░ рдЗрдХрд╛рдЗрдпрд╛рдБ


рдмрд╛рдЗрдирд░реА рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдЗрдХрд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рдмрд╕реЗ рд▓рдВрдмрд╛ рдЕрдиреБрдХреНрд░рдо рдЦреЛрдЬрдирд╛ рдФрд░ рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдХреНрд░рдо рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдЧрд╛ред рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде, рд╕реВрдЪреА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рд╡рд░реНрддрдорд╛рди рдЕрдзрд┐рдХрддрдо рд▓рдВрдмрд╛рдИ рдФрд░ рд╡рд░реНрддрдорд╛рди рдХреЙрд▓ рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЦрд╛рд▓реА рд╕реВрдЪреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреБрдирд░рд╛рд╡рд░реНрддрди рдЖрдзрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрджрдо рдХреЛ рд╣реАред


рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдлрд╝рдВрдХреНрд╢рди getUserInputs :: IO [Char] рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкрд╣рд▓реЗ рдирдВрдмрд░ n - рд╕реВрдЪреА рдХрд╛ рдЖрдХрд╛рд░ рдкрдврд╝рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ << get> getLine n рдмрд╛рд░ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рдорд░реНрдЬ рдХрд░реЗрдВ ред


 import Control.Monad (replicateM) onesCount :: [Char] -> Int onesCount xs = onesCount' xs 0 0 where onesCount' "" max curr | max > curr = max | otherwise = curr onesCount' (x:xs) max curr | x == '1' = onesCount' xs max $ curr + 1 | curr > max = onesCount' xs curr 0 | otherwise = onesCount' xs max 0 getUserInputs :: IO [Char] getUserInputs = do n <- read <$> getLine :: IO Int replicateM n $ head <$> getLine main :: IO () main = do xs <- getUserInputs print $ onesCount xs 

рд╣рдо рдирд┐рд░реНрдгрдп рднреЗрдЬрддреЗ рд╣реИрдВ, рдлреИрд╕рд▓рд╛ рдареАрдХ рд╣реИред рд╣рдо рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред


C. рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд┐рд╖реНрдХрд╛рд╕рди


рдЧреИрд░-рдШрдЯрддреЗ рдХреНрд░рдо рдореЗрдВ рджрд┐рдП рдЧрдП 32-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛ рдПрдХ рд╕рд░рдгреА рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд╕реЗ рд╕рднреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдЪрд▓реЛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдирдВрдмрд░ рдкрдврд╝рддрд╛ рд╣реИ, рдЗрд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ IO рдореЛрдирдб рдореЗрдВ рд▓рд┐рдкрдЯреЗ рджреЗрддрд╛ рд╣реИред рд╣рдо рдбрд┐рд▓реАрдЯ рдбрдмрд▓реНрд╕ рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ :: Int -> Int -> IO () рдлрд╝рдВрдХреНрд╢рди, рдЬреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ (рд╣рдо рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рдкрдврд╝реА рдЧрдИ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗ)ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдлрд╝рдВрдХреНрд╢рди рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЕрдЧрд▓реЗ рдирдВрдмрд░ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИред рд░рд┐рдХрд░реНрд╕рд┐рдпрди рдмреЗрд╕ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗред


 import Control.Monad initial :: IO Int initial = do a <- read <$> getLine print a return a deleteDoubles :: Int -> Int -> IO() deleteDoubles 0 _ = return () deleteDoubles ta = do b <- read <$> getLine unless (a == b) $ print b deleteDoubles (t-1) b main :: IO () main = do t <- read <$> getLine unless (t < 1) $ initial >>= deleteDoubles (t-1) 

рд╣рдо рд╕рдорд╛рдзрд╛рди рднреЗрдЬрддреЗ рд╣реИрдВ, рдпрд╣ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдЧрд▓реЗ рдХрд╛рд░реНрдп рдкрд░ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЖрдИрдУ рдореЛрдирдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рднреНрд░рд╛рдордХ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рд╕реБрдзрд╛рд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред


рдзреНрдпрд╛рди рджреЗрдВ, рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓рддреЗ рд╣реБрдП, рдЖрдк рдкрд╣рд▓реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рдо рджреВрд╕рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ), рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рд╢реБрджреНрдз рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВ рдЬреЛ рд╕рднреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдВрдд рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред


 import Control.Monad deleteDoubles' _ [] = [] deleteDoubles' prev (x:xs) | prev /= x = x:(deleteDoubles' x xs) | otherwise = deleteDoubles' x xs deleteDoubles (x:xs) = x:deleteDoubles' x xs getUserInputs :: Int -> IO [Int] getUserInputs t = replicateM t $ read <$> getLine main :: IO () main = do t <- read <$> getLine unless (t < 1) $ (deleteDoubles <$> getUserInputs t) >>= mapM_ print 

рдореИрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рднреЗрдЬ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдкрд╣рд▓реА рдирд┐рд░рд╛рд╢рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░рдпреБрдХреНрдд рдореЗрдореЛрд░реА рдХреА рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг 193 рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЦреНрдп рдЧрд▓рддреА рдкреВрд░реА рд╕реВрдЪреА рдХреЛ рд╕реНрдореГрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрдврд╝рдирд╛ рд╣реИред рд╣рдо рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдХрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдбреБрдкреНрд▓рд┐рдХреЗрдЯреНрд╕ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХреБрдЫ рд╣рдж рддрдХ рдПрдХ рдмрд╛рдПрдВ-рд╕рд╣рдпреЛрдЧреА рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкрдврд╝реА рдЧрдИ рд╡рд╕реНрддреБ рдФрд░ рдЙрд╕рдХреЗ рдХреБрдЫ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЕрдЧрд▓реЗ рдЬреЛрдбрд╝реА рдорд╛рдиреЛрдВ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИред


рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдЙрд╕рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рд┐рдВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡рд╣ рдЕрдкрдирд╛ рджреВрд╕рд░рд╛ рддрд░реНрдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ IO рдореЛрдирдб рдореЗрдВ рд▓рд┐рдкрдЯрд╛ рд╣реИ, рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдЖрдЗрдП рдЗрд╕реЗ рдЪрд░рдг рдХрд╣рддреЗ рд╣реИрдВ:


 step :: Int -> Int -> IO Int step fst snd = unless (fst == snd) (print snd) >> return snd 

рд╣рдордиреЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдкрд╛рд░рд┐рдд рдореВрд▓реНрдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░реАрдбрд┐рдВрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХреИрд╕реЗ рдХрд░реЗрдВ? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо monadic convolution function foldM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ :: (Foldable t, Monad m) => (b -> a -> mb) -> b -> ta -> mb , рдЬреЛ рдкрдврд╝рдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ, рд╣рдо рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ "рдЕрдирдкреИрдХрд┐рдВрдЧ" рд╕реНрд╡рдпрдВ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд╣реБрдб рдХреЗ рддрд╣рдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рд╕реВрдЪреА рдЖрдЗрдЯрдо (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдЧрд▓рд╛ рдирдВрдмрд░ рдкрдврд╝реЗрдВ) рдХреА рдмрд╛рдЗрдВрдб рдСрдкрд░реЗрдЯрд░ ( >> = ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдЗрд╕реЗ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдХреЗ рд╕рд╛рде рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЧрдгрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдорд┐рд▓рддреЗ рд╣реИрдВ


 step :: Int -> Int -> IO Int step fst snd = unless (fst == snd) (print snd) >> return snd initial :: IO Int initial = do a <- read <$> getLine print a return a getUserInputs t = replicate t $ read <$> getLine main :: IO () main = do t <- read <$> getLine unless (t < 1) $ do init <- initial foldM_ ((=<<) . step) init $ getUserInputs (t-1) 

рдбреАред рдмреНрд░реИрдХреЗрдЯ рдЕрдиреБрдХреНрд░рдо рдХреА рдкреАрдврд╝реА


рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ nред рдпрд╣ рд▓рдВрдмрд╛рдИ 2 ordered n рдХреЗ рд╕рднреА рд╕рд╣реА рдмреНрд░реИрдХреЗрдЯ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХреНрд╕рд┐рдХреЛрдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рд╕реЗ рдЖрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рджреЗрдЦреЗрдВ https://ru.wikipedia.org/wiki/Lexographic_order )ред
рдЯрд╛рд╕реНрдХ рдореЗрдВ рдХреЗрд╡рд▓ рдХреЛрд╖реНрдардХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рд╣реА рдмреНрд░реИрдХреЗрдЯ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдиреБрдкрд╛рддрд┐рдХ рд╕рдордп рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ n рдХреЗ рд▓рд┐рдП рдЖрдиреБрдкрд╛рддрд┐рдХ рдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдХрд╛рд░реНрдп, рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рддрд░рд╣, рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд┐рдХреНрдХреЛрдВ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд╛ рдХрд╛рд░реНрдп, рдЖрда рд░рд╛рдирд┐рдпреЛрдВ рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдирд╛, рдпрд╣рд╛рдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ), рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдпрдХрд╛рд░реА рдмрдВрдзрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╕реВрдЪреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ рдХрд┐рдП рдЧрдП рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рдирд╛ рд╣реИред


рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╛рд░реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ: ':: Int -> Int -> [[рдЪрд╛рд░]] , рдЬреЛ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдЧрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрд╖реНрдардХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЦреБрд▓реЗ рдкреИрд░реЗрдВрдЯреЗрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред рдкреБрдирд░рд╛рд╡рд░реНрддрди рдЪрд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╕рдВрднрд╡ - рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рд░рдЦреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреЛрд╖реНрдардХ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЪрд░рдг - рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред


 import Control.Monad(mapM_) generate :: Int -> [String] generate = generate' 0 where generate' _ 0 = [[]] generate' an = [x:xs | x <- possible, xs <- step x] where step '(' = generate' (a + 1) (n - 1) step ')' = generate' (a - 1) (n - 1) possible | n == a = ")" | a == 0 = "(" | otherwise = "()" main :: IO () main = do n <- read <$> getLine let result = generate $ n * 2 mapM_ putStrLn result 

рд╣рдо рд╕рдорд╛рдзрд╛рди рднреЗрдЬрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдЙрд╕ рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдерд╛ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдкрд░ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдореЗрдореЛрд░реА рдХреА рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╕рдорд╛рдзрд╛рди 14 рд╡реАрдВ рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред


рд╣рдо рдЬрдирд░реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рд╣реА рдмреНрд░реИрдХреЗрдЯ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдЙрдиреНрд╣реЗрдВ рддреБрд░рдВрдд рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рддреАрд╕рд░рд╛ рддрд░реНрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ - рд╡рд░реНрддрдорд╛рди рдЪрд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд┐рдд рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╣рдо рдЕрдиреБрдХреНрд░рдо рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдмрдирд╛рдПрдВрдЧреЗ - рдпрд╣ рд╣рдореЗрдВ рд╕реВрдЪреА рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ ( :) рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╕рдВрдШрдирди рдСрдкрд░реЗрдЯрд░ ( ++ )ред


 import Control.Monad(mapM_) generate :: Int -> IO() generate = generate' "" 0 where generate' xs _ 0 = putStrLn $ reverse xs generate' xs an | n == a = step ')' | a == 0 = step '(' | otherwise = step '(' >> step ')' where step '(' = generate' ('(':xs) (a + 1) (n - 1) step ')' = generate' (')':xs) (a - 1) (n - 1) main :: IO () main = do n <- read <$> getLine generate $ n * 2 

рдИред рдЕрдирд╛рдЧреНрд░рд╛рдо


рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рджреА рдЧрдИ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдЪрд▓реЗ рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рд▓реИрдЯрд┐рди рдЕрдХреНрд╖рд░ рд╣реИрдВред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпреЗ рд░реЗрдЦрд╛рдПрдВ рд╡рд┐рдкрд░реНрдпрдп рд╣реИрдВ, рдпрд╛рдиреА, рдХреНрдпрд╛ рд╡реЗ рдХреЗрд╡рд▓ рд╡рд░реНрдгреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рднрд┐рдиреНрди рд╣реИрдВред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЧрд┐рдиреЗрдВрдЧреЗ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрд┐рддрдиреА рдмрд╛рд░ рдПрдХ рдЕрдХреНрд╖рд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред рд╣рдо рддреБрд░рдВрдд рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рдирдХ рд╕реВрдЪрд┐рдпрд╛рдБ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рддрддреНрд╡ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реА рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо рдорд╛рдирдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рд░рдгреА рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдПрд░реЗ (рдЗрд╕рдореЗрдВ рдЕрднреА рднреА рдХрдо рд╕реЗ рдХрдо рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╕рд░рдгрд┐рдпрд╛рдБ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдбреЗрдЯрд╛ ред рд╡реЗрдХреНрдЯрд░ )ред


рдЖрд╡рд╢реНрдпрдХ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдлрд╝рдВрдХреНрд╢рди рд╣рд┐рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ :: (Ix a, Num b) => (a (a) -> [a] -> рд╕рд░рдгреА ab , рдЬреЛ рддрддреНрд╡реЛрдВ рдХреА рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рд╕реВрдЪреА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдФрд░ рдЬрд┐рд╕ рд╕реАрдорд╛ рддрдХ рдпреЗ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ, рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддреЗ рд╣реИрдВред рдЬреЛ рд╕реВрдЪреА рд╕реЗ рддрддреНрд╡реЛрдВ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди, рд╣рд╛рд▓рд╛рдВрдХрд┐ Data.Array рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЕрдХреНрд╕рд░ рдПрдХ рдФрд░, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рди, рд╕рдВрдЪрдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореБрдЦреНрдп рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ - рдПрд░реЗ рдЪрд╛рд░ рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛ рдХрд╛ рд▓рд╛рдн рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдПрдХ рдЕрдЪреНрдЫреА рд╕реБрд╡рд┐рдзрд╛ рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ - рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо рди рдХреЗрд╡рд▓ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдХрдХреНрд╖рд╛ Ix рдХреЗ рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪрд╛рд░ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдореЗрдВ рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред


 import Data.Array hist :: (Ix a, Num b) => (a,a) -> [a] -> Array ab hist bnds is = accumArray (+) 0 bnds [(i, 1) | i<-is, inRange bnds i] main = do arr1 <- hist ('a','z') <$> getLine arr2 <- hist ('a','z') <$> getLine if (arr1 == arr2) then print 1 else print 0 

F. рдорд░реНрдЬ k рдХреНрд░рдордмрджреНрдз рд╕реВрдЪреА


рджрд┐рдП рдЧрдП рдЧреИрд░-рдЛрдгрд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ k рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЧреИрд░-рдШрдЯрддреЗ рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ 100 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЙрдирдХреЗ рд╡рд┐рд▓рдп рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ: рдореВрд▓ рд╕рд░рдгреА рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рд╡рд╛рд▓реЗ рдЧреИрд░-рдШрдЯрддреЗ рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдПрдХ рд╕рд░рдгреАред
рдкреНрд░рддреНрдпреЗрдХ рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ 10 of k рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред
рдпрджрд┐ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрдирдкреБрдЯ рд╕рд░рдгрд┐рдпрд╛рдБ рд▓рдВрдмрд╛рдИ n рдХреА рд╣реИрдВ, рддреЛ рд╕рдордп k рд▓реЙрдЧ (k) if n, рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рджреЛ рдХреНрд░рдордмрджреНрдз рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рд╕реВрдЪреА рдХрд╛рд░реНрдп рд╣реИ рдФрд░ рд╣рд╛рд╕реНрдХреЗрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░ рдХрдИ рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


 merge :: [Int] -> [Int] -> [Int] merge [] ys = ys merge xs [] = xs merge (x:xs) (y:ys) | x < y = x:merge xs (y:ys) | otherwise = y:merge (x:xs) ys 

рдЦреИрд░, рд╣рдо рджреЛ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ! рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд╕рднреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдФрд░ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


рдирд┐рд░реНрдгрдп
 import Control.Monad merge :: [Int] -> [Int] -> [Int] merge [] ys = ys merge xs [] = xs merge (x:xs) (y:ys) | x < y = x:merge xs (y:ys) | otherwise = y:merge (x:xs) ys mergeLists :: [[Int]] -> [Int] mergeLists = foldl merge [] getUserInputs :: Int -> IO [[Int]] getUserInputs t = replicateM t $ do n <- getLine return $ tail $ read <$> words n main :: IO () main = do k <- read <$> getLine lists <- getUserInputs k let res = mergeLists lists mapM_ (putStrLn . show) res 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рджреЛ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ - рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЬрдЯрд┐рд▓рддрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ - O (k (log (k) ) n) рдХреЗ рдмрдЬрд╛рдп O (k ^ 2 O n) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ, рд╕рд╛рде рд╣реА рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдореЗрдореЛрд░реА рдХреА рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдкрд░реАрдХреНрд╖рдг рд╕рдВрдЦреНрдпрд╛ 17 рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ - рдЕрдиреБрдордд 10Mb рдХреЗ рдмрдЬрд╛рдп 17.27Mbред


рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗ рдХрд┐ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЖрдкреВрд░реНрддрд┐ рдХреА рдЧрдИ рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рд╢реНрд░реЗрдгреА рдХреЗ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рд╣рдо рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред


рдЕрдЧрд▓рд╛ рдХрджрдо рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд╕рд╛рде рдореВрд▓ рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реИред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдЬреЛ рдиреНрдпреВрдирддрдо рддрддреНрд╡ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рдХреБрд╢рд▓ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ, Data.Set рдЪреБрдиреЗрдВред рд╣рдо рдкрд╣рд▓реЗ рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рд╣рдо рдиреНрдпреВрдирддрдо рддрддреНрд╡ рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВрдЧреЗ рдФрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рд╕рдВрдмрдВрдзрд┐рдд рд╕реВрдЪреА рд╕реЗ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ Data.Sequence рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рдЙрди рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдЗрд╕рдХреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ (рдЬреЛ рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА) рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪреА рддрдХ рддреНрд╡рд░рд┐рдд рдкрд╣реБрдВрдЪ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдЗрд╕ рддрддреНрд╡ рдХреЗ рддрддреНрд╡ рдХреЛ рдкреВрд░реА рд╕рдВрд░рдЪрдирд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдмрджрд▓рдирд╛ (рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ ред рдЕрд░реНрд░реЗ )ред


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИрдВ:


рдирд┐рд░реНрдгрдп
 import qualified Data.Sequence as Seq import qualified Data.Set as Set import Control.Monad import Data.Foldable mergeLists :: Set.Set (Int, Int) -> Seq.Seq [Int] -> IO () mergeLists set seq | Set.null set = return () | otherwise = do let ((val, idx), set') = Set.deleteFindMin set print val if null (Seq.index seq idx) then mergeLists set' seq else mergeLists (Set.insert (head (Seq.index seq idx), idx) set') (Seq.adjust tail idx seq) getUserInputs :: Int -> IO [[Int]] getUserInputs t = replicateM t $ do n <- getLine return $ tail $ read <$> words n main :: IO () main = do t <- read <$> getLine lists <- getUserInputs t let init_seq = Seq.fromList (filter (not . null) lists) let init_heap = Set.fromList (zipWith (,) (toList (fmap head init_seq)) [0..]) mergeLists init_heap $ tail <$> init_seq 

рд╣рдо рд╕рдорд╛рдзрд╛рди рднреЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рднрд▓реЗ рд╣реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ 17 рдореЗрдореЛрд░реА рдкрд░ 17.27Mb рдХреЗ рдмрдЬрд╛рдп рдХрдо рдореЗрдореЛрд░реА (10.26Mb) рдХреА рдЦрдкрдд рд╢реБрд░реВ рд╣реБрдИ рдереА, рдлрд┐рд░ рднреА рдпрд╣ рд╕реАрдорд╛ рдкреВрд░реА рдирд╣реАрдВ рдХреАред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рдЗрд╕ рдирд┐рд░реНрдгрдп рдХреЗ рд╕рд╛рде, рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ, рд╣рдореЗрдВ рдкреВрд░реЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдЗрдП рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рддреАрд╕рд░реЗ рд╕рдорд╛рдзрд╛рди рдХреА рдорджрдж рд╕реЗ рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ - рдЧрд┐рдирддреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЫрдВрдЯрдиреАред


рд╣рдордиреЗ рдкрд┐рдЫрд▓реА рд╡рд┐рдкрд░реНрдпрдп рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╕рдордп рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкрд╛рддреНрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрд┐рдирддреА рдкрд╣рд▓реЗ рд╣реА рдХрд░ рд▓реА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ, рд╣рдо Data.Array рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо addToArray :: Array Int Int -> [Int] -> Array Int Int рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕реВрдЪреА рд╕реЗ рдорд╛рдиреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдкрд░ рдорд╛рди рдмрдврд╝рд╛рдХрд░ рдореМрдЬреВрджрд╛ рдПрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИред


 addToArray :: Array Int Int -> [Int] -> Array Int Int addToArray acc elems = accum (+) acc [(i, 1) | i<-elems] 

рдлрд┐рд░, рд╣рдо рджреЛрд╣рд░рд╛рдП рдЧрдП рд╣рдЯрд╛рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - рдореЛрдирдбрд┐рдХ рдХрдирд╡рд▓реНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ AddToArray рдлрд╝рдВрдХреНрд╢рди рдХреЛ k рд╕реНрд░реЛрдд рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред рдФрд░ ... рд╣рдореЗрдВ 17 рд╡реАрдВ рдкрд░реАрдХреНрд╖рд╛ рдореЗрдВ 10.26Mb рдХрд╛ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рдпрд╣ рдпрд╛рдж рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рд╕реНрд╡реАрдХреГрдд рдХрдЯреМрддреА рдХреНрд░рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлреЛрд▓реНрдб (рдЬрд┐рд╕рдХрд╛ рдПрдирд╛рд▓реЙрдЧ рдлреЛрд▓реНрдбрдо рд╣реИ ) рдкрд╣рд▓реЗ рдиреЗрд╕реНрдЯреЗрдб рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЙрдирдХреА рд╕рдХреНрд░рд┐рдп рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЗрд╕ рддрдереНрдп рдХрд╛ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Data.List рдореЙрдбреНрдпреВрд▓ рдлреЛрд▓реНрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдлрд╝рдВрдХреНрд╢рди seq :: a -> b -> b рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЛ рдХрдордЬреЛрд░ рд╕рд┐рд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рджреЗрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЗрд╕реЗ рдмрд╛рд╣рд░реА рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ - рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдорд╛рди, рдФрд░ рдлрд┐рд░ рджреВрд╕рд░рд╛ ( https://www.ibm.com/developerworks/ru/library/l-haskell4/index.html ) рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлреЛрд▓реНрдбрдо рдлрдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред


 foldM' :: (Monad m) => (a -> b -> ma) -> a -> [b] -> ma foldM' _ z [] = return z foldM' fz (x:xs) = do z' <- fzx z' `seq` foldM' fz' xs 

рдирддреАрдЬрддрди, 17 рд╡реАрдВ рдкрд░реАрдХреНрд╖рд╛ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЧрдИ рд╕реНрдореГрддрд┐ рдХреА рдорд╛рддреНрд░рд╛ рд▓рдЧрднрдЧ рдЖрдзреА рд╣реЛ рдЧрдИ рдФрд░ 5.64Mb рдХреА рдорд╛рддреНрд░рд╛! рдпрджреНрдпрдкрд┐ 17 рд╡реАрдВ рдФрд░ 18 рд╡реАрдВ рдкрд░реАрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЗ рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ 19 рд╡реАрдВ рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рдирд╣реАрдВ рдХреА рдереА рдХрд┐ рд╕реНрдореГрддрд┐ рд╕реАрдорд╛ рдкрд╛рд░ рд╣реЛ рдЧрдИ рдереА - 10.25Mbред


рдареАрдХ рд╣реИ, рдЖрдЧреЗ рдмрдврд╝реЗрдВ - рд╣рдордиреЗ Data.Array.Unboxed рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд░рдгрд┐рдпрд╛рдБ рдЗрд╕рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИрдВ, рдорд╛рдирдХ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдорд╛рдиреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рди рдХрд┐ рдЙрдирдХреА рдУрд░ рд╕рдВрдХреЗрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп ( https://wiki.haskell.org/Arrays#Unboxed_arrays )ред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рдРрд╕реЗ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдореЗрдореЛрд░реА рдХреА рдЬрдЧрд╣ рдХрдо рд╣реЛрддреА рд╣реИ рдФрд░ рд╡реЗ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛрддреЗ рд╣реИрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЖрдпрд╛рдд рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Data.Array рдФрд░ Data.Array.Unboxed рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп IArray рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред


рд╣рдо рдПрдХ рд╕рдорд╛рдзрд╛рди рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВ - рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд 4.5 рдЧреБрдирд╛ рдШрдЯрдХрд░ 2.26 рдПрдордмреА рд╣реЛ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордп рд╕реАрдорд╛ рдкрд╛рд░ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ - рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп 1.05 рд╕реЗрдХрдВрдб рдерд╛ред рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЗрд╕ рддрдереНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╢реЗрд╖ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рд╕рдорд╛рди рд░рд╣рддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмреЙрдХреНрд╕рд┐рдВрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдирдмреЙрдХреНрд╕реНрдб рд╕рд░рдгреА рдзреАрдореА рдирд┐рдХрд▓реА, рдмрд▓реНрдХрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреИрд╕реЗ рд╣реА рдПрдХ рдкреНрд░рддрд┐рдмрдВрдз рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╛рд░реНрдп рдмрд╛рдзрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдмрд╣реБрдд рд╣реА рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрднреА рднреА реж.реп cases рд╕реЗрдХрдВрдб рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рез репрд╡реАрдВ рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдордп рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг реиреж рдирдВрдмрд░ рдХреА рдкрд░реАрдХреНрд╖рд╛ рдореЗрдВ рднреА рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред


рдЙрд╕рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рд╕рдВрдЪрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдПрдирд╛рд▓реЙрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рддреЗрдЬрд╝ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдмрдлрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпрд╛рдБ ( hSetBuffering :: рд╣реИрдВрдбрд▓ -> рдмрдлрд╝рд░рдХреЛрдб -> IO () рдлрд╝рдВрдХреНрд╢рди), рдкрд░рд╕реНрдкрд░ IOrray рд╕рд░рдгрд┐рдпрд╛рдБ, рд▓реЗрдХрд┐рди рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рд╕реЗ рдХреЛрдИ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рдорд┐рд▓рд╛ред ред


рдореИрдВ рдпрд╣ рдорд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫреБрдХ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛рдПрдВ рдмрд╣реБрдд рдХрд╕рдХрд░ рддрдп рдХреА рдЧрдИ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрднреА рднреА рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдХрд░реЗрдЧрд╛ред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (Array рдФрд░ IOArray рдХреЗ рд╕рд╛рде) рдХреЛрдб рдХреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рдкреЛрд╕реНрдЯ рдХрд┐рдП, рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рд╣реЛрдЧрд╛ рдЬреЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдЧрд╛ред


рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЫрд╣ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдкрд╛рдВрдЪ рдиреЗ рдореБрдЭреЗ рд╕рдлрд▓рддрд╛ рджрд┐рд▓рд╛рдИ, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд┐рдпрд╛ - рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдХрд╛рд░реНрдпрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рдЙрдкрднреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдЧрдВрднреАрд░ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрдо рд╕реЗ рдХрдо рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рдирд┐рднрд╛рдИ рдЧрдИ рдереА, рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕реБрд▓рдЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдирдП рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рд╡рд░реНрдгрди рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рдЕрднреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЕрдкрдиреА рдпрд╛рддреНрд░рд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ


рдХреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛? рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХрд╣реВрдВ рддреЛ рдореБрдЭреЗ рджреЛрд╣рд░реА рдзрд╛рд░рдгрд╛ рд╣реИред рдПрдХ рдУрд░, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реЛ рдЧрдП, рдФрд░ рдЦреБрдж рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдЙрдкрдХрд░рдг, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЙрдирдХреЗ рд╕рдореГрджреНрдз рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдиреЗ рдЗрд╕рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдИред рджреВрд╕рд░реА рдУрд░, рдХреЛрдИ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЦрдкрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рджрд┐рдП рдЧрдП рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред

Source: https://habr.com/ru/post/hi470790/


All Articles