Switch from Map to List

A lot faster than before!
This commit is contained in:
Rnhmjoj 2014-10-16 23:19:02 +02:00
parent ac5831f063
commit 6b28ba7258

View File

@ -1,35 +1,29 @@
module Alea.Diceware where
import qualified Data.Map as Map
import Data.List (intersect, elemIndex)
import Data.Maybe (fromJust)
import Alea.List
-- Diceware dictionary type
type Diceware = Map.Map Int String
-- Parse a line into a tuple
parseLine :: String -> (Int, String)
parseLine x =
(read a :: Int, b)
where
x' = split x ' '
(a, b) = (head x', last x')
type Diceware = [String]
-- Parse file content to a Diceware
parseDiceware :: String -> Diceware
parseDiceware x = (Map.fromList . map parseLine . lines) x
parseDiceware x = map (last . split ' ') $ lines x
-- Lookup word with dice index
readDiceware :: Diceware -> Int -> String
readDiceware d n =
show n ++ " -> " ++
case Map.lookup n d of
Just x -> x
readDiceware d n = show n ++ " -> " ++
case (undice n) of
Just x -> d !! x
Nothing -> "Does not exist"
-- Lookup word with linear index
readDiceware' :: Diceware -> Int -> String
readDiceware' d n = (snd . (!!n) . Map.toList) d
readDiceware' d n = d !! n
-- Size of Diceware (should be 2^5)
size :: Diceware -> Int
size = Map.size
-- Dice numbers to numbers
-- Ex. undice 11121 == Just 6
undice :: Int -> Maybe Int
undice n = elemIndex n . filter
(null . (intersect "0789") . show) $ [11111..66666]