Problem · Simulation

Four-Player Trick-Taking Card Game Simulation

Learn this problem
HardScale AI logoScale AIFULLTIMEPHONE SCREEN

Problem statement

Simulate a four-player trick-taking card game from a supplied shuffled deck order.

deckOrder contains all 52 card codes separated by one space. A card code is its rank followed by its suit. Ranks are 2 3 4 5 6 7 8 9 T J Q K A, from lowest to highest. Suits are C D H S, from lowest to highest.

Model the game with cards, a deck, and four players, then apply these rules:

  1. Deal cards from left to right in round-robin order to players 0, 1, 2, 3. Each player receives 13 cards.
  2. Sort every hand by suit first and rank second, using the orders above.
  3. Player 0 leads the first trick. For each turn, a player plays the first card in their sorted remaining hand that follows the leading suit. If they cannot follow suit, they play the first card in their remaining hand.
  4. The highest-ranked card of the leading suit wins the trick. That player leads the next trick.
  5. Cards of rank 5, T, and K are worth 5, 10, and 13 points respectively; every other card is worth 0. The trick winner receives all points in that trick.

After 13 tricks, return scores=[s0,s1,s2,s3];winners=[w0,w1,...]. List every player tied for the highest score in ascending player order.

Function

simulateTrickTakingGame(deckOrder: String) → String

Examples

Example 1

deckOrder = "2C 2D 2H 2S 3C 3D 3H 3S 4C 4D 4H 4S 5C 5D 5H 5S 6C 6D 6H 6S 7C 7D 7H 7S 8C 8D 8H 8S 9C 9D 9H 9S TC TD TH TS JC JD JH JS QC QD QH QS KC KD KH KS AC AD AH AS"return = "scores=[112,0,0,0];winners=[0]"

Round-robin dealing gives player 0 every club. Player 0 leads clubs and wins every trick because the other players cannot follow clubs. All 112 available points go to player 0.

Example 2

deckOrder = "2C 3C 4C 5C 6C 7C 8C 9C TC JC QC KC AC 2D 3D 4D 5D 6D 7D 8D 9D TD JD QD KD AD 2H 3H 4H 5H 6H 7H 8H 9H TH JH QH KH AH 2S 3S 4S 5S 6S 7S 8S 9S TS JS QS KS AS"return = "scores=[5,18,18,71];winners=[3]"

Dealing a suit-grouped deck distributes different ranks and suits among the players. Following the deterministic first-legal-card policy gives scores 5, 18, 18, 71, so player 3 wins.

Example 3

deckOrder = "JS KH AD 8C 7H 3S TS JC TD 2C 8S 4S 7C QH JH 3D 7S 3C 9C 6H 4C 5D AH 6C QD 8D JD KD 6D 4D 5C QC 5H TC 4H 3H 9H 5S KC TH 9S 8H QS AS 2S 2H KS 7D 6S 9D 2D AC"return = "scores=[20,0,46,46];winners=[2,3]"

Players 2 and 3 each finish with 46 points, so both appear in the ascending winner list.

Constraints

  • deckOrder contains exactly 52 card codes separated by single spaces.
  • Every combination of one rank from 23456789TJQKA and one suit from CDHS appears exactly once.
  • The total score across all four players is always 112.

More Scale AI problems

drafts saved locally
public String simulateTrickTakingGame(String deckOrder) {
    // Write your solution here
}
deckOrder"2C 2D 2H 2S 3C 3D 3H 3S 4C 4D 4H 4S 5C 5D 5H 5S 6C 6D 6H 6S 7C 7D 7H 7S 8C 8D 8H 8S 9C 9D 9H 9S TC TD TH TS JC JD JH JS QC QD QH QS KC KD KH KS AC AD AH AS"
expected"scores=[112,0,0,0];winners=[0]"
checking account