一副扑克牌,每次出示4张,只允许使用四则运算求值,列出结果为24的所有表达式。请用haskell实现代码。
时间: 2023-03-14 17:05:24 浏览: 58
以下是使用Haskell实现解答24的扑克牌表达式示例代码: solve24 :: Int -> Int -> Int -> Int -> Maybe [String]
solve24 a b c d =
let vals = [a,b,c,d]
ops = ["+","-","*","/"]
in
Just (map (\[x,y,z,w]-> x ++ y ++ z ++ w) (permutations [vals,ops,ops,vals]))
相关问题
一副扑克牌,每次出示4张,只允许使用四则运算求值,列出结果为24的所有表达式。请用python实现代码
答:import itertoolsdef calculate_24_points(cards):# 创建所有可能的表达式
expressions = itertools.product(('+', '-', '*', '/'), repeat=3)# 将4张牌的值放入一个列表
values = [c.value for c in cards]for expression in expressions:# 将运算符和牌面值放入一个字符串,用eval函数执行
expression_str = '{}{}{}{}{}{}{}'.format(values[0], expression[0], values[1], expression[1], values[2], expression[2], values[3])# 如果结果为24,则返回表达式
if eval(expression_str) == 24:
return expression_strreturn False
一副扑克牌,每次出示4张,只允许使用四则运算求值,列出结果为24的所有表达式。请用haskell实现代码
这里有一段 Haskel 代码,可以求出结果为24的所有表达式:import Data.List
import Control.Monad-- Generate all combinations of four numbers from 1 to 13
combos :: [(Int, Int, Int, Int)]
combos = [(x, y, z, w) | x <- [1..13], y <- [1..13], z <- [1..13], w <- [1..13]]-- Evaluate an arithmetic expression
eval :: (Int, Int, Int, Int) -> Int
eval (x, y, z, w) = foldl (\acc x -> acc `x` y) x [z, (*), (/), (+), (-)]-- Check if a combo produces a result of 24
checkCombo :: (Int, Int, Int, Int) -> Bool
checkCombo x = eval x == 24-- Output all combos that produce a result of 24
main :: IO ()
main = mapM_ putStrLn $ map show $ filter checkCombo combos