PracHub
QuestionsCoachesLearningGuidesInterview Prep

Quick Overview

This question evaluates implementation of card-hand evaluation logic, combinatorial reasoning about incomplete information, and deterministic tie-breaking rules for comparing complete and partial poker-like hands.

  • medium
  • Rippling
  • Coding & Algorithms
  • Software Engineer

Compare Complete or Partial Hands

Company: Rippling

Role: Software Engineer

Category: Coding & Algorithms

Difficulty: medium

Interview Round: Onsite

Implement a hand comparison engine for a simplified poker-like card game. Each player has a hand represented by an array of card strings. A card is encoded as `<rank><suit>`, where rank is one of `2-10`, `J`, `Q`, `K`, `A`, and suit is one of `S`, `H`, `D`, `C`. ## Part 1: Compare complete hands If both players have exactly 5 cards, return one of: - `"user1"` if player 1 wins - `"user2"` if player 2 wins - `"tie"` if the hands are exactly equal in strength Use the following hand rankings from strongest to weakest: 1. Four of a kind 2. Full house 3. Three of a kind 4. Two pair 5. One pair 6. High card Tie-breaking rules: - **Four of a kind**: compare the rank of the four matching cards, then the kicker. - **Full house**: compare the rank of the triple, then the pair. - **Three of a kind**: compare the rank of the triple, then the remaining two cards in descending order. - **Two pair**: compare the higher pair, then the lower pair, then the kicker. - **One pair**: compare the pair rank, then the remaining three cards in descending order. - **High card**: compare all five ranks in descending order. Assume suits do not affect hand strength. ## Part 2: Compare partial hands Because of network delay, a player may have fewer than 5 received cards. In this case, determine whether the result is already forced. Return: - `"user1"` if player 1 wins for **every** valid completion of the missing cards - `"user2"` if player 2 wins for **every** valid completion of the missing cards - `"tie"` if **every** valid completion ends in a tie - `"unknown"` otherwise For this follow-up, assume: - Each final hand must contain exactly 5 distinct cards. - Missing cards can be any distinct cards from the remaining standard 52-card deck. - No card may appear twice across the final 10 cards. Design the comparison logic cleanly so that ranking rules are modular and easy to extend.

Quick Answer: This question evaluates implementation of card-hand evaluation logic, combinatorial reasoning about incomplete information, and deterministic tie-breaking rules for comparing complete and partial poker-like hands.

Part 1: Compare Complete Hands

Implement a hand comparison engine for a simplified poker-like card game. Each player has exactly 5 cards. A card is encoded as '<rank><suit>', where rank is one of 2-10, J, Q, K, A, and suit is one of S, H, D, C. Suits do not affect hand strength. Only the following hand types exist, from strongest to weakest: 1. Four of a kind 2. Full house 3. Three of a kind 4. Two pair 5. One pair 6. High card Tie-breaking rules: - Four of a kind: compare the rank of the four matching cards, then the kicker. - Full house: compare the rank of the triple, then the pair. - Three of a kind: compare the triple, then the remaining two cards in descending order. - Two pair: compare the higher pair, then the lower pair, then the kicker. - One pair: compare the pair rank, then the remaining three cards in descending order. - High card: compare all five ranks in descending order. Return 'user1' if player 1 wins, 'user2' if player 2 wins, or 'tie' if the hands are exactly equal in strength.

Constraints

  • len(user1) == 5
  • len(user2) == 5
  • Each card is a valid standard 52-card deck card
  • All 10 cards are distinct
  • This simplified game does not include straights, flushes, or suit-based scoring

Examples

Input: (['AS', 'AH', 'AD', 'AC', '2S'], ['KS', 'KH', 'KD', 'KC', 'QH'])

Expected Output: 'user1'

Explanation: Both hands are four of a kind; four aces beats four kings.

Input: (['QS', 'QH', 'QD', '9C', '2D'], ['JS', 'JH', 'JD', '8C', '8D'])

Expected Output: 'user2'

Explanation: A full house beats three of a kind.

Input: (['AS', 'KD', 'QH', '9C', '2D'], ['AH', 'KC', 'QS', '9D', '2C'])

Expected Output: 'tie'

Explanation: Both hands are high card with the same ranks: A, K, Q, 9, 2.

Input: (['AS', 'AH', 'KD', 'QC', '2S'], ['AD', 'AC', 'KS', 'QD', '3H'])

Expected Output: 'user2'

Explanation: Both hands have one pair of aces. Compare kickers: K, Q, 3 beats K, Q, 2.

Hints

  1. Count how many times each rank appears. The sorted frequency pattern tells you the hand category.
  2. Create a score tuple like (category_strength, tie_break_values...) so two hands can be compared lexicographically.

Part 2: Compare Partial Hands

Implement a hand comparison engine for a simplified poker-like card game when some cards have not arrived yet. Each player has a partial hand represented by a list of card strings. A card is encoded as '<rank><suit>', where rank is one of 2-10, J, Q, K, A, and suit is one of S, H, D, C. Each final hand must contain exactly 5 distinct cards. Missing cards can be any distinct cards from the remaining standard 52-card deck, and no card may appear twice across the final 10 cards. Use these hand rankings, from strongest to weakest: 1. Four of a kind 2. Full house 3. Three of a kind 4. Two pair 5. One pair 6. High card Tie-breaking rules: - Four of a kind: compare the rank of the four matching cards, then the kicker. - Full house: compare the rank of the triple, then the pair. - Three of a kind: compare the triple, then the remaining two cards in descending order. - Two pair: compare the higher pair, then the lower pair, then the kicker. - One pair: compare the pair rank, then the remaining three cards in descending order. - High card: compare all five ranks in descending order. Return: - 'user1' if player 1 wins for every valid completion - 'user2' if player 2 wins for every valid completion - 'tie' if every valid completion ends in a tie - 'unknown' otherwise For this version, the total number of missing cards across both players is at most 4.

Constraints

  • 0 <= len(user1) <= 5
  • 0 <= len(user2) <= 5
  • All provided cards are valid standard deck cards
  • All provided cards are distinct across both lists
  • (5 - len(user1)) + (5 - len(user2)) <= 4
  • Each final hand must have exactly 5 cards, and all 10 final cards must be distinct
  • This simplified game does not include straights, flushes, or suit-based scoring

Examples

Input: (['AS', 'AH', 'AD', 'AC', '2S'], ['KS', 'KH', 'KD', '3C'])

Expected Output: 'user1'

Input: (['2S', '2H', '3D', '4C'], ['KS', 'KH', 'KD', 'QC', 'QD'])

Expected Output: 'user2'

Input: (['AS', 'AH', '9D', '5C', '2S'], ['KS', 'KH', 'QD', 'JC'])

Expected Output: 'unknown'

Input: (['AS', 'KD', 'QH', '9C', '2D'], ['AH', 'KC', 'QS', '9D', '2C'])

Expected Output: 'tie'

Input: (['AS', 'AH', 'AD', 'AC', 'KS'], ['QS', 'QH', 'QD', 'QC', 'JS'])

Expected Output: user1

Explanation: Both hands already complete (quad aces vs quad queens) — exercises the missing1==0 and missing2==0 direct-compare short-circuit, a path none of the original tests hit.

Input: (['AS', 'AH', 'AD', 'AC', '5S'], ['KS', 'KH', 'KD', 'KC'])

Expected Output: user1

Explanation: Player 1 holds an unbeatable complete hand (four aces); player 2 is missing one card. Confirms a forced 'user1' verdict holds across every completion of player 2's hand.

Hints

  1. Reuse a complete-hand evaluator from Part 1. The hard part here is exploring all valid completions.
  2. If you ever find two different outcomes across valid completions, you can stop early and return 'unknown'.
Last updated: Apr 19, 2026

Loading coding console...

PracHub

Master your tech interviews with 8,000+ real questions from top companies.

Product

  • Questions
  • Learning Tracks
  • Interview Guides
  • Resources
  • Premium
  • For Universities
  • Student Access

Browse

  • By Company
  • By Role
  • By Category
  • Topic Hubs
  • SQL Questions
  • AI Coding Questions
  • Compare Platforms
  • Discord Community

Support

  • support@prachub.com
  • (916) 541-4762

Legal

  • Privacy Policy
  • Terms of Service
  • About Us

© 2026 PracHub. All rights reserved.

Related Coding Questions

  • Courier Delivery Cost Tracker - Rippling (medium)
  • Implement a Searchable Logger Pipeline - Rippling (hard)
  • Implement an In-Memory File System - Rippling
  • Compare Complete and Partial Poker Hands - Rippling (medium)
  • Implement Courier Delivery Cost Tracking - Rippling (medium)