Post

679 24 Game

679 24 Game

24 Game image

You are given an integer array cards of length 4. You have four cards, each containing a number in the range [1, 9]. You should arrange the numbers on these cards in a mathematical expression using the operators [’+’, ‘-‘, ‘*’, ‘/’] and the parentheses ‘(‘ and ‘)’ to get the value 24.

You are restricted with the following rules:

1
2
3
4
5
6
7
8
9
10
11
The division operator '/' represents real division, not integer division.

	For example, 4 / (1 - 2 / 3) = 4 / (1 / 3) = 12.

Every operation done is between two numbers. In particular, we cannot use '-' as a unary operator.

	For example, if cards = [1, 1, 1, 1], the expression "-1 - 1 - 1 - 1" is **not allowed**.

You cannot concatenate numbers together

	For example, if cards = [1, 2, 1, 2], the expression "12 + 12" is not valid.

Return true if you can get such expression that evaluates to 24, and false otherwise.

 

Example 1:

1
2
3
4
5
**Input:** cards = [4,1,8,7]
**Output:** true
**Explanation:** (8-4) * (7-1) = 24

Example 2:

1
2
3
4
**Input:** cards = [1,2,1,2]
**Output:** false

 

Constraints:

1
2
cards.length == 4
1 <= cards[i] <= 9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

class Solution:
    def judgePoint24(self, cards: List[int]) -> bool:
        """
            we start with each number and then make a tree 
            eqch branch represents + , - , * , /
        """
        def calc(arr):
            #print(arr)
            if len(arr) == 1 :
                return [arr[0]]
                
            result = []

            for i, k in enumerate(arr):
                for j , l in enumerate(arr):
                    if i == j:
                        continue
                    new_arr = []
                    
                    m = k + l

                    new_arr.append(m)
                    for s in range(0,len(arr)):
                        if s != i and s != j:
                            new_arr.append(arr[s])
                    res = calc(new_arr)
                    result.append(res)

                    new_arr[0] = k - l
                    res = calc(new_arr)
                    result.append(res)

                    if k != 0:
                        new_arr[0] =  float(l) / k
                        res = calc(new_arr)
                        result.append(res)


                    if l != 0:
                        new_arr[0] = float(k) / l
                        res = calc(new_arr)
                        result.append(res)


                    new_arr[0] = - k + l
                    res = calc(new_arr)
                    result.append(res)


                    new_arr[0] = k * l
                    res = calc(new_arr)
                    result.append(res)

            return [x for xs in result for x in xs]
        
        EPS = 1e-6
        return any(abs(x - 24) < EPS for x in calc(cards))






This post is licensed under CC BY 4.0 by the author.