# 24-Point Game

l  Problem

The 24-point game is a classic intellectual game using poker to carry out the calculation. The game is detailed as follows: Take out the big and little jokers from a pack of pokers, and extract any four from the remaining 52 cards. Use the addition, subtraction, multiplication, division and parentheses to manipulate the numbers on the four cards (J, Q, K, and A represent 11, 12, 13, and 1 respectively) to get the result of 24. Each card must be used once, but not repeatedly.

Write a program to manipulate any four cards for the result of 24, and print out its solution in the form of text. If no solution exists, print out "No solution".

l  Tip

4.  Arrange 4 numbers in different orders.

5.  In the first layer of loop, take any three from the 4 operators and arrange them in different ways.

6.  In the second layer of loop, insert the three operators into the four numbers.

7.  Enumerate the five cases of using parentheses as follows (where A, B, C, and D represent numbers, # represents different operators):

((A#B)#C)#D

(A#(B#C))#D

(A#B)#(C#D)

A#((B#C)#D)

A#(B#(C#D))

l  Code

 A B C D 1 [3,3,8,8] 2 [1234,1243,1324,1342,1423,1432,2134,2143,2314,2341,2413,2431,3124,3142,3214,3241,3412,3421,4123,4132,4213,4231,4312,4321] 3 for A2 =A1(4.(int(A3/power(10,4-#))%10)) Arrange A1’s members according to the orders list in A2 4 for 64 Randomly select 3 operators among +,-,*,/. The selected operators are allowed to be duplicate. So each number has 4 choices, that is 4×4×4, which is a total of 64 ways 5 =["+","-","*","/"](3.(int((B4-1)/power(4,3-#))%4+1)) Convert the current loop number to a quarternary number and add 1 to each digit to get the current way of arranging the operators 6 >a=B3(1),b=B3(2),c=B3(3),d=B3(4),x=C5(1),y=C5(2),z=C5(3) 7 =func(A28,[x,a,func(A28,[y,b,func(A28,[z,c,d])])]) Surround the expression A#(B#(C#D)) with parentheses to call the subprogram for computation 8 if abs(C7-24)<0.0001 9 =string(a)+x+"("+string(b)+y+"("+string(c)+z+string(d)+"))" 10 =D10|D9 Store the result of computing the expression if it is 24 11 =func(A28,[x,a,func(A28,[z,func(A28,[y,b,c]),d])]) Surround the expression A#(B#(C#D)) with parentheses to call the subprogram for computation 12 if abs(C11-24)<0.0001 13 =string(a)+x+"(("+string(b)+y+ string(c)+")"+z+string(d)+")" 14 =D14|D13 Store the result of computing the expression if it is 24 15 =func(A28,[y,func(A28,[x,a,b]),func(A28,[z,c,d])]) Surround the expression A#(B#(C#D)) with parentheses to call the subprogram for computation 16 if abs(C15-24)<0.0001 17 ="("+string(a)+x+string(b)+")"+y+"("+string(c)+z+string(d)+")" 18 =D18|D17 Store the result of computing the expression if it is 24 19 =func(A28,[z,func(A28,[y,func(A28,[x,a,b]),c]),d]) Surround the expression A#(B#(C#D)) with parentheses to call the subprogram for computation 20 if abs(C19-24)<0.0001 21 ="(("+string(a)+x+string(b)+")"+y+string(c)+")"+z+string(d) 22 =D22|D21 Store the result of computing the expression if it is 24 23 =func(A28,[z,func(A28,[x,a,func(A28,[y,b,c])]),d]) Surround the expression A#(B#(C#D)) with parentheses to call the subprogram for computation 24 if abs(C23-24)<0.0001 25 ="("+string(a)+x+"("+string(b)+y+string(c)+"))"+z+string(d) 26 =D26|D25 Store the result of computing the expression if it is 24 27 =[D10,D14,D18,D22,D26].union().id() The final result 28 func The computation has 3 parameters: the first is operator, the second is left operand, and the third is the right operand 29 if A28(1)=="+" return A28(2)+A28(3) 30 if A28(1)=="-" return A28(2)-A28(3) 31 if A28(1)=="*" return A28(2)*A28(3) 32 if A28(1)=="/" return A28(2)/A28(3)

l  Result 