June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
35
Task/24-game-Solve/Mathematica/24-game-solve-3.math
Normal file
35
Task/24-game-Solve/Mathematica/24-game-solve-3.math
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
evaluate[HoldForm[op_[l_, r_]]] := op[evaluate[l], evaluate[r]];
|
||||
evaluate[x_] := x;
|
||||
combine[l_, r_ /; evaluate[r] != 0] := {HoldForm[Plus[l, r]],
|
||||
HoldForm[Subtract[l, r]], HoldForm[Times[l, r]],
|
||||
HoldForm[Divide[l, r]] };
|
||||
combine[l_, r_] := {HoldForm[Plus[l, r]], HoldForm[Subtract[l, r]],
|
||||
HoldForm[Times[l, r]]};
|
||||
split[items_] :=
|
||||
Table[{items[[1 ;; i]], items[[i + 1 ;; Length[items]]]}, {i, 1,
|
||||
Length[items] - 1}];
|
||||
expressions[{x_}] := {x};
|
||||
expressions[items_] :=
|
||||
Flatten[Table[
|
||||
Flatten[Table[
|
||||
combine[l, r], {l, expressions[sp[[1]]]}, {r,
|
||||
expressions[sp[[2]]]}], 2], {sp, split[items]}]];
|
||||
|
||||
(* Must use all atoms in given order. *)
|
||||
solveMaintainOrder[goal_, items_] :=
|
||||
Select[expressions[items], (evaluate[#] == goal) &];
|
||||
(* Must use all atoms, but can permute them. *)
|
||||
solveCanPermute[goal_, items_] :=
|
||||
Flatten[Table[
|
||||
solveMaintainOrder[goal, pitems], {pitems,
|
||||
Permutations[items]}]];
|
||||
(* Can use any subset of atoms. *)
|
||||
solveSubsets[goal_, items_] :=
|
||||
Flatten[Table[
|
||||
solveCanPermute[goal, is], {is,
|
||||
Subsets[items, {1, Length[items]}]}], 2];
|
||||
|
||||
(* Demonstration to find all the ways to create 1/5 from {2, 3, 4, 5}. *)
|
||||
solveMaintainOrder[1/5, Range[2, 5]]
|
||||
solveCanPermute[1/5, Range[2, 5]]
|
||||
solveSubsets[1/5, Range[2, 5]]
|
||||
Loading…
Add table
Add a link
Reference in a new issue