Skip to content

Instantly share code, notes, and snippets.

@siliconbrain
Last active August 29, 2015 13:55
Show Gist options
  • Save siliconbrain/8698476 to your computer and use it in GitHub Desktop.
Save siliconbrain/8698476 to your computer and use it in GitHub Desktop.
Word search combinations generator
import Data.List ((\\))
data Cell = Middle
| North
| NorthEast
| East
| SouthEast
| South
| SouthWest
| West
| NorthWest
deriving Eq
cells = [North, NorthEast, East, SouthEast, South, SouthWest, West, NorthWest, Middle]
neighbours cell = case cell of
Middle -> [North, NorthEast, East, SouthEast, South, SouthWest, West, NorthWest]
North -> [NorthEast, East, Middle, West, NorthWest]
NorthEast -> [East, Middle, North]
East -> [SouthEast, South, Middle, North, NorthEast]
SouthEast -> [South, Middle, East]
South -> [SouthWest, West, Middle, East, SouthEast]
SouthWest -> [West, Middle, South]
West -> [NorthWest, North, Middle, South, SouthWest]
NorthWest -> [North, Middle, West]
labeler table cell = case cell of
Middle -> table!!1!!1
North -> table!!0!!1
NorthEast -> table!!0!!2
East -> table!!1!!2
SouthEast -> table!!2!!2
South -> table!!2!!1
SouthWest -> table!!2!!0
West -> table!!1!!0
NorthWest -> table!!0!!0
pathsFrom start used = [start:rest | rest <- rests]
where unused = (neighbours start) \\ used
used' = start:used
rests = []:(unused >>= flip pathsFrom used')
allPaths = cells >>= (flip pathsFrom [])
validPaths = filter ((>= 3) . length) allPaths
validWords table = [map (labeler table) path | path <- validPaths]
mytable =
[
[ 'E', 'V', 'É' ],
[ 'Ő', 'R', 'I' ],
[ 'F', 'D', 'K' ]
]
-- example: validWords mytable
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment