Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
35
Task/Nim-game/Haskell/nim-game.hs
Normal file
35
Task/Nim-game/Haskell/nim-game.hs
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
import Data.Char (isDigit, digitToInt)
|
||||
import System.IO
|
||||
|
||||
prompt :: String
|
||||
prompt = "How many do you take? 1, 2 or 3? "
|
||||
|
||||
getPlayerSelection :: IO Int
|
||||
getPlayerSelection = do
|
||||
hSetBuffering stdin NoBuffering
|
||||
c <- getChar
|
||||
putChar '\n'
|
||||
if isDigit c && digitToInt c <= 3 then
|
||||
pure (digitToInt c)
|
||||
else do
|
||||
putStrLn "Invalid input"
|
||||
putStr prompt
|
||||
getPlayerSelection
|
||||
|
||||
play :: Int -> IO ()
|
||||
play n = do
|
||||
putStrLn $ show n ++ token n ++ " remain."
|
||||
if n == 0 then putStrLn "Computer Wins!"
|
||||
else do
|
||||
putStr prompt
|
||||
playerSelection <- getPlayerSelection
|
||||
let computerSelection
|
||||
| playerSelection > 4 = playerSelection - 4
|
||||
| otherwise = 4 - playerSelection
|
||||
putStrLn $ "Computer takes " ++ show computerSelection ++ token computerSelection ++ ".\n"
|
||||
play (n - computerSelection - playerSelection)
|
||||
where token 1 = " token"
|
||||
token _ = " tokens"
|
||||
|
||||
main :: IO ()
|
||||
main = play 12
|
||||
Loading…
Add table
Add a link
Reference in a new issue