From 0f0f6b0598ce54c555249f337544c263db141b35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Janne=20Sirvi=C3=B6?= <jaausi@utu.fi> Date: Tue, 30 Jun 2020 19:00:43 +0300 Subject: [PATCH] Changes for the repo --- package.yaml | 3 +++ src/Card.hs | 32 ++++++++++++++++++++++++++++++++ src/Lib.hs | 23 ++++++++++++++++++++++- 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/Card.hs diff --git a/package.yaml b/package.yaml index f66642a..09d57a5 100644 --- a/package.yaml +++ b/package.yaml @@ -22,6 +22,8 @@ description: Please see the README on GitHub at <https://github.com/gith dependencies: - base >= 4.7 && < 5 - random >= 1.1 +- containers +- array library: source-dirs: src @@ -36,6 +38,7 @@ executables: - -with-rtsopts=-N dependencies: - twenty-one + - transformers tests: twenty-one-test: diff --git a/src/Card.hs b/src/Card.hs new file mode 100644 index 0000000..3f3ad35 --- /dev/null +++ b/src/Card.hs @@ -0,0 +1,32 @@ +module Card +( Suit (..) +, Value (..) +, Card (..) +) where + +data Suit = Spades | Diamonds | Clubs | Hearts + deriving (Eq,Ord,Enum,Bounded,Show,Read) + +data Value = Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten | Jack | Queen | King | Ace + deriving (Eq,Ord,Enum,Bounded,Show,Read) + +data Card = Card { _suit :: Suit + ,_value :: Value + } deriving (Eq, Show) + +type Deck = [Card] + +allCardValues :: [Value] +allCardValues = [minBound..maxBound] :: [Value] + +allCardSuits :: [Suit] +allCardSuits = [minBound..maxBound] :: [Suit] + +deck :: Deck +deck = Card <$> allCardSuits <*> allCardValues + +showCard :: Card -> String +showCard (Card {_suit = s, _value = v}) = show v ++ " of " ++ show s + +pullCardFromDeck :: Deck -> Int -> Card +pullCardFromDeck deck num = deck!!num \ No newline at end of file diff --git a/src/Lib.hs b/src/Lib.hs index 1ccd167..1765966 100644 --- a/src/Lib.hs +++ b/src/Lib.hs @@ -2,10 +2,31 @@ module Lib ( generateNumber ) where -import System.Random (randomRIO) +import System.Random +import Data.Map +import Data.Array.IO +import Control.Monad generateNumber:: Int -> Int -> Int -> IO () generateNumber min max n = do number <- randomRIO (min, max) -- :: IO Integer putStrLn $ "The number " ++ show n ++ " is " ++ show number + + +-- | Randomly shuffle a list +-- /O(N)/ +shuffle :: [a] -> IO [a] +shuffle xs = do + ar <- newArray n xs + forM [1..n] $ \i -> do + j <- randomRIO (i,n) + vi <- readArray ar i + vj <- readArray ar j + writeArray ar j vi + return vj + where + n = length xs + newArray :: Int -> [a] -> IO (IOArray Int a) + newArray n xs = newListArray (1,n) xs + -- GitLab