Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Data.List(sort, sortBy)
- -- генерирует все сочетания
- findSolution l found len current
- | found == len = [current]
- | length l < len - found = []
- | otherwise = (findSolution (tail l) (succ found) len (current ++ [head l])) ++ (findSolution (tail l) found len current)
- -- обертка над верхней функцией
- solve l = concat [findSolution (sort l) 0 len [] | len <- [1..(length l)]]
- -- замена в списке всех элементов a на b
- replace [] _ _ = []
- replace (x:xs) a b
- | x == a = (b:(replace xs a b))
- | otherwise = (x:(replace xs a b))
- -- лексикографический порядок
- lexOrder :: [Int] -> [Int] -> Ordering
- lexOrder [] [] = EQ
- lexOrder [] (x:xs) = LT
- lexOrder (x:xs) [] = GT
- lexOrder (x:xs) (y:ys)
- | x == y = lexOrder xs ys
- | x < y = LT
- | otherwise = GT
- -- лексикографическая сортировка
- lexSort = sortBy lexOrder
- main = do
- input <- getLine -- считывание
- print $ lexSort $ solve $ (read ("[" ++ (replace input ' ' ',') ++ "]") :: [Int]) -- вывод ответа
Advertisement
Add Comment
Please, Sign In to add comment