Checkered square table in Haskell -
sometimes need checkered data structure, example if model chess board. simplest way represent checkered data via list of lists.
[[0,1,0], [1,0,1], [0,1,0]]
the above example of checkered list. first attempt:
import data.list checker :: integral => -> -> -> [[a]] checker n b = generictake n $ intersperse (generictake n xs2) $ repeat (generictake n xs1) xs1 = checker' b xs2 = drop 1 xs1 checker' :: -> -> [a] checker' b = intersperse b $ repeat
the code verbose, while result correct:
*main> checker 5 0 1 [[0,1,0,1,0],[1,0,1,0,1],[0,1,0,1,0],[1,0,1,0,1],[0,1,0,1,0]]
how write function create such list arbitrary size in haskell?
evenrow = 0:oddrow -- evenrow = 0:1:evenrow oddrow = 1:evenrow board = evenrow:oddrow:board
here's infinite checkered board. saw off rectangular part:
smallboard = take 17 $ map (take 11) board
parameterize needed.
edit: haven't used cycle
here sake of illustration. in real code want it:
board = cycle [cycle [0,1], cycle [1,0]]
it's shorter frankly looks cryptic.
Comments
Post a Comment