Re: [Haskell] Получить все беспорядки [0..n]
От: BulatZiganshin  
Дата: 15.10.09 16:59
Оценка:
Здравствуйте, hexamino, Вы писали:

H>Надо получить все беспорядки [0..n], то есть все перестановки этого списка где ни один элемент не стоит на своем исходном месте.

H>
H>disorders n = filter (and . (zipWith (/=) [0..n])) (permutations [0..n])
H>


filter (/=[0..n]) (permutations [0..n])

H>А можно ли не фильтровать, а сразу строить только нужные перестановки?


disorders n = inserts n (disorders (n-1)) ++ dropLast (inserts n [0..n-1])

-- вставляет x во все возможные позиции списка xs
inserts x [] = [х]]
inserts x xs = (x:xs) : map (head xs (inserts x (tail xs) )

dropLast = reverse.tail.reverse
Люди, я люблю вас! Будьте бдительны!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.