NQEZG66FQWQQOOYXN2GK7MHIQH25QBBNKE37GGDJBCHCSKWJZABQC EDJU6E3O44JB425LUX6H5IDTRUSXPUGUNYF2NJBP6VW2GZKCWG6QC VHUL3O55RPR6QD7IXPMJFWI5EOXHQYAMHCLP2FYAULPAOAWUVQ7QC 7QP2V7ZBVZ7SKQ3SYV6NYA7V77G3Y7GF5V6EPIXLIYFSMFRWR4VAC HQZLWNTRZRDCXCXLZMTWSB7GXON4T4KJZVAU4DFST64LTXIUSBRAC K7KUOYE2VONTDGZ6BIAGA3F7RYQEBNTY3LQOYQM4FH3MOUTLBL6AC Y2N6GDITBJID3Q4Z2Y7KEDY46F7R3SU4DRK3ST6ZMA4CNLXWSFDAC CWLOBLWQJDZL5EMPWBHK3XRT2TZZ5U5M4WGMHC65MU5YHAAUJPHAC RTM5VGIPTRMJMKLJER4543HXDRMGUZ7TI5VJBOV4ZFGUCILNQ62QC LDXV64JUWYYYPCV6CWMGS3EFX4ZSO7TQ6X327EOQWC5Z6W75UMXQC 6QAAR2VPKVD3II6SKKLQBHRYOFX4NHA6HGJMBMFRPQCVE5OLKWJQC ANAAF3LVFG2YCTAWUZKMT75XQN6YNS4CLLZIXSVGKJQRWJVNBMEAC O7B34AE2RCSSUKPDKL6VRLOAGH3OYXD6VAI6C6KHZMA7RWUMN2MQC HMJP73P5XYW73IGOGQKYQXGC5DYWONMUZMV3CFGINLY3M3WLLT6QC DPKNMYAABC2UGZ2VAU2GKRDWZSRHFG24VOJ3X57MMPFY76YXJWHAC hex = foldl' (&) canvas [ write (x,y) | x <- [-size..size] , y <- [-size..size] , abs (x + y) <= size ]
hex = ATGP.updatePlane (blankPlane (succ $ 2 * size * 2) (succ $ 2 * size)) [ write (x,y) | x <- [-size..size] , y <- [-size..size] , abs (x + y) <= size ]
| Just _ <- look h = c %.< cell '*' # color White Dull| 0 < i h = c %.< cell 'o' # rgbColor (spectrum $ i h + rand s)| otherwise = c %.< cell ' '
| Just _ <- look h = (c , ATGP.colorCell White Dull $ ATGP.creaCell '*')| 0 < i h = (c , ATGP.rgbColorCell (spectrum $ i h + rand s) $ ATGP.creaCell 'o')| otherwise = (c , ATGP.creaCell ' ')
| Just n <- mn = foldl (&) (blankPlane 5 3)[ (1,2) % let a = get v $ neighbour n U in cell (grapheme a) # cellDraw a, (1,4) % let a = get v $ neighbour n I in cell (grapheme a) # cellDraw a, (2,1) % let a = get v $ neighbour n H in cell (grapheme a) # cellDraw a
| Just n <- mn , ns <- neighbour v (ix n) = foldl (&) (blankPlane 5 3)[ (1,2) % let a = get v $ ns U in cell (grapheme a) # cellDraw a, (1,4) % let a = get v $ ns I in cell (grapheme a) # cellDraw a, (2,1) % let a = get v $ ns H in cell (grapheme a) # cellDraw a
, (2,5) % let a = get v $ neighbour n L in cell (grapheme a) # cellDraw a, (3,2) % let a = get v $ neighbour n N in cell (grapheme a) # cellDraw a, (3,4) % let a = get v $ neighbour n M in cell (grapheme a) # cellDraw a
, (2,5) % let a = get v $ ns L in cell (grapheme a) # cellDraw a, (3,2) % let a = get v $ ns N in cell (grapheme a) # cellDraw a, (3,4) % let a = get v $ ns M in cell (grapheme a) # cellDraw a
hex = foldl' (&) canvas [ write (x,y) | x <- [-size..size] , y <- [-size..size] , abs (x + y) <= size ]
hex = ATGP.updatePlane (blankPlane (succ $ 2 * size * 2) (succ $ 2 * size)) [ write (x,y) | x <- [-size..size] , y <- [-size..size] , abs (x + y) <= size ]
k :: Draw| 0 <- fromEnum h , play s = paletteColor $ xterm6LevelRGB 0 1 0| 1 <- fromEnum h , play s = paletteColor $ xterm6LevelRGB 0 1 1| 2 <- fromEnum h , play s = paletteColor $ xterm6LevelRGB 1 1 2| 3 <- fromEnum h , play s = paletteColor $ xterm6LevelRGB 2 1 3| 4 <- fromEnum h , play s = paletteColor $ xterm6LevelRGB 3 1 4| 5 <- fromEnum h , play s = paletteColor $ xterm6LevelRGB 4 2 5| 6 <- fromEnum h , play s = paletteColor $ xterm6LevelRGB 5 3 5| 7 <- fromEnum h , play s = paletteColor $ xterm6LevelRGB 5 4 5| 0 <- fromEnum h = paletteColor $ xterm24LevelGray 2| 1 <- fromEnum h = paletteColor $ xterm24LevelGray 5| 2 <- fromEnum h = paletteColor $ xterm24LevelGray 8| 3 <- fromEnum h = paletteColor $ xterm24LevelGray 11| 4 <- fromEnum h = paletteColor $ xterm24LevelGray 14| 5 <- fromEnum h = paletteColor $ xterm24LevelGray 17| 6 <- fromEnum h = paletteColor $ xterm24LevelGray 23| 7 <- fromEnum h = paletteColor $ xterm24LevelGray 23| otherwise = paletteColor $ xterm24LevelGray 0
k :: Word8| 0 <- fromEnum h , play s = xterm6LevelRGB 0 1 0| 1 <- fromEnum h , play s = xterm6LevelRGB 0 1 1| 2 <- fromEnum h , play s = xterm6LevelRGB 1 1 2| 3 <- fromEnum h , play s = xterm6LevelRGB 2 1 3| 4 <- fromEnum h , play s = xterm6LevelRGB 3 1 4| 5 <- fromEnum h , play s = xterm6LevelRGB 4 2 5| 6 <- fromEnum h , play s = xterm6LevelRGB 5 3 5| 7 <- fromEnum h , play s = xterm6LevelRGB 5 4 5| 0 <- fromEnum h = xterm24LevelGray 2| 1 <- fromEnum h = xterm24LevelGray 5| 2 <- fromEnum h = xterm24LevelGray 8| 3 <- fromEnum h = xterm24LevelGray 11| 4 <- fromEnum h = xterm24LevelGray 14| 5 <- fromEnum h = xterm24LevelGray 17| 6 <- fromEnum h = xterm24LevelGray 23| 7 <- fromEnum h = xterm24LevelGray 23| otherwise = xterm24LevelGray 0
data Node a = Node { atom :: a , neighbours :: U.Vector Int }data Verse a = Verse { radius :: Int , nodes :: V.Vector (Node a) }
data Node a = Node { ix :: Int , atom :: a }data Verse a = Verse { radius :: Int , nodes :: V.Vector (Node a) , neighbours :: V.Vector (U.Vector Int) }
neighbour :: Atom a => Node a -> Dir -> Intneighbour n dir = U.unsafeIndex (neighbours n) (fromEnum dir)
neighbour :: Atom a => Verse a -> Int -> Dir -> Intneighbour v i dir = U.unsafeIndex (V.unsafeIndex (neighbours v) i) (fromEnum dir)
leq, lgt, llt :: Intleq = count (== a) adjacentslgt = count (> a) adjacentsllt = count (< a) adjacentsadjacents = ns <$> total
-- count in one passlt,eq,gt :: Int(lt,eq,gt) = foldl' go (0,0,0) $ ns <$> totalwherego (l,e,g) n| n < a = (succ l , e , g)| n > a = (l , e , succ g)| otherwise = (l , succ e , g)
| count (> a) adjacents ∈ [2 :: Int] = next a| count (< a) adjacents ∈ [2 :: Int] = a
| gt ∈ [2 :: Int] = next a| lt ∈ [2 :: Int] = a
| count (== maxBound) adjacents ∈ survive , fromEnum a > n - 2 = maxBound| count (== maxBound) adjacents ∈ born , fromEnum a < 1 = maxBound
| tops ∈ survive , fromEnum a > n - 2 = maxBound| tops ∈ born , fromEnum a < 1 = maxBound