Katkat

Optimize a Fifteen-Sum Card Strategy

MetaMachine Learning Engineer · Onsite

Last updated

This problem tests your ability to optimize a combinatorial search space through memoization and dynamic programming to determine the maximum win rate of a card-based strategy.

Problem Statement

You are playing a game with a deck of cards containing numbers from 1 to 9. Each player draws 3 cards from the deck. A player wins if the sum of their 3 cards is exactly 15.

Since the cards are drawn without replacement, your chances of winning depend on the cards already removed from the deck. Given a list of cards currently held by your opponent, write a function max_win_probability(opponent_cards) that calculates the probability that you can form a sum of 15 given the remaining cards in the deck.

Function Signature

def max_win_probability(opponent_cards: List[int]) -> float:

Constraints

  • opponent_cards will contain exactly 3 integers between 1 and 9.
  • The deck starts with one of each digit from 1 to 9.
  • You must draw 3 cards from the remaining 6 cards.

Example

Input: opponent_cards = [1, 2, 3] Remaining cards: [4, 5, 6, 7, 8, 9] Possible sets of 3 from remaining: (4,5,6), (4,5,7), ... (total 20 combinations). Output: 0.35 (assuming 7 out of the 20 combinations sum to 15).

Edge Cases

  • What if it is impossible to form 15 with the remaining cards? Return 0.0.
  • Ensure the logic correctly handles drawing without replacement.

Hints

Hint 1

First, generate all possible 3-card combinations from the remaining set of 6 cards.

Hint 2

Calculate the total number of ways to choose 3 cards from the 6 remaining cards using the binomial coefficient.

Hint 3

Iterate through all combinations and increment a counter if the sum equals 15, then divide by the total number of combinations.

Follow-up questions

  • How would your solution change if the deck contained multiple copies of each card (e.g., two of each 1-9)?
  • If the game involved multiple turns, how would you use memoization to cache the state of the deck to speed up probability calculations?
  • How does the complexity change if the number of cards to draw is a variable 'k' instead of a fixed 3?