| {-# LANGUAGE OverloadedStrings #-} | |
| module Main where | |
| import Numeric | |
| import Data.Bits | |
| import Data.List | |
| import Text.Blaze | |
| import Text.Blaze.Html5 hiding (map) | |
| import qualified Text.Blaze.Html5 as H | |
| import qualified Text.Blaze.Html5.Attributes as A | |
| import Text.Blaze.Renderer.String | |
| inds :: [[Int]] | |
| inds = | |
| [[52,4,12,20,22,14,6,54] | |
| ,[5,53,28,36,38,30,55,7] | |
| ,[13,29,60,44,46,62,31,15] | |
| ,[21,37,45,61,63,47,39,23] | |
| ,[17,33,41,57,59,43,35,19] | |
| ,[9,25,56,40,42,58,27,11] | |
| ,[1,49,24,32,34,26,51,3] | |
| ,[48,0,8,16,18,10,2,50] | |
| ] | |
| inds2 :: [[Int]] | |
| inds2 = | |
| [[56..63] | |
| ,[48..55] | |
| ,[40..47] | |
| ,[32..39] | |
| ,[24..31] | |
| ,[16..23] | |
| ,[8..15] | |
| ,[0..7] | |
| ] | |
| colors :: [String] | |
| colors = | |
| ["#1f77b4", "#aec7e8", "#ff7f0e", "#ffbb78", "#2ca02c" | |
| ,"#98df8a", "#d62728", "#ff9896", "#9467bd", "#c5b0d5" | |
| ,"#8c564b", "#c49c94", "#e377c2", "#f7b6d2", "#7f7f7f" | |
| ,"#c7c7c7", "#bcbd22", "#dbdb8d", "#17becf", "#9edae5" | |
| ] | |
| pad n c s | |
| | length s < n = replicate (n - length s) c ++ s | |
| | otherwise = s | |
| myOct n = pad 2 '0' $ showOct n "" | |
| mkCell :: (Integral a) => (a -> Int) -> a -> Html | |
| mkCell colorFunc n = do | |
| H.td ! A.style (stringValue $ "background-color: "++(colors!!(colorFunc n))) $ string $ myOct n | |
| mkRow :: (Integral a) => (a -> Int) -> [a] -> Html | |
| mkRow colorFunc row = H.tr $ mapM_ (mkCell colorFunc) row | |
| mkTable :: (Integral a) => (a -> Int) -> [[a]] -> Html | |
| mkTable colorFunc t = H.table $ mapM_ (mkRow colorFunc) t | |
| firstDigit :: (Bits a) => a -> a | |
| firstDigit n = shiftR n 3 | |
| secondDigit n = 7 .&. n | |
| oneBit bit n = shiftR (n .&. (shiftL 1 bit)) bit | |
| vis1 is = mkTable firstDigit is | |
| vis2 is = mkTable secondDigit is | |
| visBit n is = mkTable (oneBit n) is | |
| vizs = vis1:vis2:map visBit [0..5] | |
| write vs = do | |
| let s = intercalate "\n<br/><br/><br/>\n" $ | |
| map (\f -> renderHtml $ f inds) vs | |
| writeFile "test.html" s |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment