99 questions/Solutions/82

From HaskellWiki
< 99 questions‎ | Solutions
Revision as of 03:49, 10 January 2017 by Wizzup (talk | contribs) (categorize)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Brute-force search from the source, using list comprehension:

import Data.List (partition)
cycle' :: Int -> [(Int, Int)] -> [ [Int] ]
cycle' n g = search n []
  where search [] result = result
        search cur result = search (go active) (arrive ++ result)
          where split = partition end cur
                end s = (last s == n) && (length s /= 1)
                active = snd split
                arrive = fst split
                go ls = [ x ++ [snd y] | x <- ls, y <- g, last x == fst y, not (snd y `elem` tail x)]