Skip to content

3222. Find the Winning Player in Coin Game

Description

You are given two positive integers x and y, denoting the number of coins with values 75 and 10 respectively.

Alice and Bob are playing a game. Each turn, starting with Alice, the player must pick up coins with a total value 115. If the player is unable to do so, they lose the game.

Return the name of the player who wins the game if both players play optimally.

Β 

Example 1:

Input: x = 2, y = 7

Output: "Alice"

Explanation:

The game ends in a single turn:

  • Alice picks 1 coin with a value of 75 and 4 coins with a value of 10.

Example 2:

Input: x = 4, y = 11

Output: "Bob"

Explanation:

The game ends in 2 turns:

  • Alice picks 1 coin with a value of 75 and 4 coins with a value of 10.
  • Bob picks 1 coin with a value of 75 and 4 coins with a value of 10.

Β 

Constraints:

  • 1 <= x, y <= 100

Solutions

Solution 1: Mathematics

Since each round of operation consumes \(2\) coins valued at \(75\) and \(8\) coins valued at \(10\), we can calculate the number of rounds \(k = \min(x / 2, y / 8)\), and then update the values of \(x\) and \(y\), where \(x\) and \(y\) are the remaining number of coins after \(k\) rounds of operations.

If \(x > 0\) and \(y \geq 4\), then Alice can continue the operation, and Bob loses, return "Alice"; otherwise, return "Bob".

The time complexity is \(O(1)\), and the space complexity is \(O(1)\).

1
2
3
4
5
6
class Solution:
    def losingPlayer(self, x: int, y: int) -> str:
        k = min(x // 2, y // 8)
        x -= k * 2
        y -= k * 8
        return "Alice" if x and y >= 4 else "Bob"
1
2
3
4
5
6
7
8
class Solution {
    public String losingPlayer(int x, int y) {
        int k = Math.min(x / 2, y / 8);
        x -= k * 2;
        y -= k * 8;
        return x > 0 && y >= 4 ? "Alice" : "Bob";
    }
}
1
2
3
4
5
6
7
8
9
class Solution {
public:
    string losingPlayer(int x, int y) {
        int k = min(x / 2, y / 8);
        x -= k * 2;
        y -= k * 8;
        return x && y >= 4 ? "Alice" : "Bob";
    }
};
1
2
3
4
5
6
7
8
9
func losingPlayer(x int, y int) string {
    k := min(x/2, y/8)
    x -= 2 * k
    y -= 8 * k
    if x > 0 && y >= 4 {
        return "Alice"
    }
    return "Bob"
}
1
2
3
4
5
6
function losingPlayer(x: number, y: number): string {
    const k = Math.min((x / 2) | 0, (y / 8) | 0);
    x -= k * 2;
    y -= k * 8;
    return x && y >= 4 ? 'Alice' : 'Bob';
}

Comments