fork download
  1. import Data.List
  2.  
  3. main = print . filter test $ perm 5 [1..10]
  4.  
  5. test xs = all (\x -> Nothing /= elemIndex x ns) [1..21]
  6. where ns = map sum . filter ((<=5) . length) . concatMap tails . inits $ xs ++ xs
  7.  
  8. perm 0 _ = [[]]
  9. perm n xs = concatMap (\x -> map (x :) $ perm (n - 1) (delete x xs)) xs
  10.  
Success #stdin #stdout 0.41s 5624KB
stdin
Standard input is empty
stdout
[[1,3,10,2,5],[1,5,2,10,3],[2,5,1,3,10],[2,10,3,1,5],[3,1,5,2,10],[3,10,2,5,1],[5,1,3,10,2],[5,2,10,3,1],[10,2,5,1,3],[10,3,1,5,2]]