タスクは、(n-1) 個の演算子 (+,-,*)の可能なすべての組み合わせをn個の A から見つけて、式の結果が B 個の値に等しくなるようにすることです。式は左から右に計算されます。例えば:
We have number A=123 and B=5 : 1*2+3=5
このタスクは、ポーランド語表記とパーサーの使用に関連している可能性があると思います。123 という数字を取得し、それを文字列 "3 2 1" にしてから、"3 2 1 + +" "3 2 1 - -" "3 2 1 * *" "3 2 1 * -" などを入力して 5 かどうかを確認します。しかし問題は、すべての組み合わせを適切に見つける方法がよくわからないことです。また、「3 2 1 * +」などの式を計算する関数で、数値から文字列を作成する関数も作成しました。
exprCounting :: String -> Integer
exprCounting = head . foldl stackAnalyzing [] . words
where
stackAnalyzing (x:y:ss) "+" = (x+y):ss
stackAnalyzing (x:y:ss) "-" = (y-x):ss
stackAnalyzing (x:y:ss) "*" = (x*y):ss
stackAnalyzing ss number = read number : ss
toWordString :: Integer -> String
toWordString = addSpace . show
where
addSpace [] = []
addSpace (x:xs) = [x] ++ " " ++ addSpace xs
このタスクを解決する方法や、どのツールを使用する必要があるかについて、誰でもアドバイスをいただけますか。