Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
26
Task/Set-consolidation/Haskell/set-consolidation.hs
Normal file
26
Task/Set-consolidation/Haskell/set-consolidation.hs
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
import Data.List (intersperse, intercalate)
|
||||
import qualified Data.Set as S
|
||||
|
||||
consolidate
|
||||
:: Ord a
|
||||
=> [S.Set a] -> [S.Set a]
|
||||
consolidate = foldr comb []
|
||||
where
|
||||
comb s_ [] = [s_]
|
||||
comb s_ (s:ss)
|
||||
| S.null (s `S.intersection` s_) = s : comb s_ ss
|
||||
| otherwise = comb (s `S.union` s_) ss
|
||||
|
||||
-- TESTS -------------------------------------------------
|
||||
main :: IO ()
|
||||
main =
|
||||
(putStrLn . unlines)
|
||||
((intercalate ", and " . fmap showSet . consolidate) . fmap S.fromList <$>
|
||||
[ ["ab", "cd"]
|
||||
, ["ab", "bd"]
|
||||
, ["ab", "cd", "db"]
|
||||
, ["hik", "ab", "cd", "db", "fgh"]
|
||||
])
|
||||
|
||||
showSet :: S.Set Char -> String
|
||||
showSet = flip intercalate ["{", "}"] . intersperse ',' . S.elems
|
||||
Loading…
Add table
Add a link
Reference in a new issue