From 6b28ba72583241a118e60809a7368e95121985d5 Mon Sep 17 00:00:00 2001 From: Rnhmjoj Date: Thu, 16 Oct 2014 23:19:02 +0200 Subject: [PATCH] Switch from Map to List A lot faster than before! --- Alea/Diceware.hs | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/Alea/Diceware.hs b/Alea/Diceware.hs index 1a5ddc5..d85843d 100644 --- a/Alea/Diceware.hs +++ b/Alea/Diceware.hs @@ -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]