Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,33 @@
|
|||
import Data.List
|
||||
import Control.Monad
|
||||
import System.Random (randomRIO)
|
||||
import Data.Char(digitToInt)
|
||||
|
||||
combinationsOf 0 _ = [[]]
|
||||
combinationsOf _ [] = []
|
||||
combinationsOf k (x:xs) = map (x:) (combinationsOf (k-1) xs) ++ combinationsOf k xs
|
||||
|
||||
player = do
|
||||
let ps = concatMap permutations $ combinationsOf 4 ['1'..'9']
|
||||
play ps where
|
||||
|
||||
play ps =
|
||||
if null ps then
|
||||
putStrLn "Unable to find a solution"
|
||||
else do i <- randomRIO(0,length ps - 1)
|
||||
let p = ps!!i :: String
|
||||
putStrLn ("My guess is " ++ p) >> putStrLn "How many bulls and cows?"
|
||||
input <- takeInput
|
||||
let bc = input ::[Int]
|
||||
ps' = filter((==sum bc).length. filter id. map (flip elem p))
|
||||
$ filter((==head bc).length. filter id. zipWith (==) p) ps
|
||||
if length ps' == 1 then putStrLn $ "The answer is " ++ head ps'
|
||||
else play ps'
|
||||
|
||||
takeInput = do
|
||||
inp <- getLine
|
||||
let ui = map digitToInt $ take 2 $ filter(`elem` ['0'..'4']) inp
|
||||
if sum ui > 4 || length ui /= 2 then
|
||||
do putStrLn "Wrong input. Try again"
|
||||
takeInput
|
||||
else return ui
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
*Main> player
|
||||
My guess is 4923
|
||||
How many bulls and cows?
|
||||
2 2
|
||||
My guess is 3924
|
||||
How many bulls and cows?
|
||||
1 3
|
||||
My guess is 4329
|
||||
How many bulls and cows?
|
||||
1 3
|
||||
My guess is 4932
|
||||
How many bulls and cows?
|
||||
4 0
|
||||
The answer is 4932
|
||||
Loading…
Add table
Add a link
Reference in a new issue