Solved – Spades – Probability for a “sure lose” blind Nil hand

gamesmonte carloprobability

Spades is a trick-taking card game. The object is to take at least the number of tricks (also known as "books") that were bid before play of the hand began. Spades is a descendant of the Whist family of card games, which also includes Bridge, Hearts, and Oh Hell. Its major difference, is that instead of trump being decided by the highest bidder or at random, the Spade suit always trumps, hence the name.

Rules of the game can be found at bicyclecards or in pagat, in summery: 4 players play in two teams (2 Vs 2), each player gets 13 cards out of a 52 deck of cards. cards are ranked Ace,King,…,2 and the ♠suit is stronger than any other suit (known as ♠ are trumps). At each trick, each player play one card from her hand, this is done sequently, starting from the player that won the last trick. and the stronger card wins the trick. Players must follow the suit of the first card in the trick unless they do not have that suit. Overall there are 13 tricks in a round.

Some variants allow bidding 'blind Nil', that is a bid of 0, without looking at the cards. The Nil bid is special: in order to succeed in Nil bid the player must not take any trick.

My question is, what is the probability to get a sure lose Blind Nil hand? Assume no information from other players (Asumme you bid first in the round). By "sure lose" I mean the nil hand will lose no matter what strategies the players will follow.

The combinations that makes a hand a "sure lose nil hand" are:

  1. A♠
  2. KQ♠
  3. any 3 ♠ higher than 9
  4. any 4 ♠ higher than 7
  5. any 5 ♠ higher than 5
  6. any 6 ♠ higher than 3
  7. any 7 ♠

Side suits can also make a hand "a sure lose Nil hand", however its harder to determine those combinations and I suspect that the probability of hands that are "sure lose Nil" due to side suits is negligible.

For start, it is easy to see that 25% of the hands will fail nil because they hold the A♠ (which is the only card that can never lose a trick)

Refining the question: What is the probability that a random hand of 13 cards, will have at least one of the 7 "bad" combinations stated in the list?

EDIT: I think the best way to answer this question is with a simulation.

Best Answer

There are 4845 mutually exclusive sure lose hands. An R script below finds the combinations and removes the duplicates.

Of the 7 types of hands:

A♠: 1 hand

KQ♠: 2 Hands

any 3 ♠ higher than 9: 6 hands

any 4 ♠ higher than 7: 36 hands

any 5 ♠ higher than 5: 180 hands

any 6 ♠ higher than 3: 840 hands

any 7 ♠: 3780 hands.

Because there are 52 choose 13 = 635013559600 possible hands of 13, that makes the probability of getting a sure lose hand small.

I stopped short of simulating the probability of getting a sure lose hand because the OP said it was not a problem for simulation.

Here is the syntax for finding the unique sure lose hands:

cards = c(2:10, "J", "Q", "K", "A")
suits = c("♠", "♥", "♦", "♣")
deck=expand.grid(cards=cards,suits=suits)
nil.hands=list(c(13),
               combn(11:12,1),
               combn(9:13,3),
               combn(7:13,4),
               combn(5:13,5),
               combn(3:13,6),
               combn(1:13,7))
find.mutually.exclusive=function(my.list,matches,found){
  my.combn=my.list
  for(i in 1:ncol(my.combn)){
    for(j in 1:length(my.combn[,i])){
      matching=logical(length(found))
      for(k in 1:length(found)){
        if(length(grep(found[k],my.combn[,i]))>0){
          matching[k]=TRUE
        }
      }
      if(sum(matching)==length(matching)){my.combn[,i]=NA}
    }
  }
  my.combn=my.combn[, colSums(is.na(my.combn)) != nrow(my.combn)]
  return(my.combn)
}


nil.hands[[1]]=c(13)

nil.hands[[2]]=c(11,12)

nil.hands[[3]]=find.mutually.exclusive(combn(9:13,3),3,nil.hands[[1]])
nil.hands[[3]]=find.mutually.exclusive(nil.hands[[3]],3,nil.hands[[2]])

nil.hands[[4]]=find.mutually.exclusive(combn(7:13,4),4,nil.hands[[1]])
nil.hands[[4]]=find.mutually.exclusive(nil.hands[[4]],4,nil.hands[[2]])
nil.hands[[4]]=find.mutually.exclusive(nil.hands[[4]],4,nil.hands[[3]])

nil.hands[[5]]=find.mutually.exclusive(combn(5:13,5),5,nil.hands[[1]])
nil.hands[[5]]=find.mutually.exclusive(nil.hands[[5]],5,nil.hands[[2]])
nil.hands[[5]]=find.mutually.exclusive(nil.hands[[5]],5,nil.hands[[3]])
nil.hands[[5]]=find.mutually.exclusive(nil.hands[[5]],5,nil.hands[[4]])

nil.hands[[6]]=find.mutually.exclusive(combn(3:13,6),6,nil.hands[[1]])
nil.hands[[6]]=find.mutually.exclusive(nil.hands[[6]],6,nil.hands[[2]])
nil.hands[[6]]=find.mutually.exclusive(nil.hands[[6]],6,nil.hands[[3]])
nil.hands[[6]]=find.mutually.exclusive(nil.hands[[6]],6,nil.hands[[4]])
nil.hands[[6]]=find.mutually.exclusive(nil.hands[[6]],6,nil.hands[[5]])

nil.hands[[7]]=find.mutually.exclusive(combn(1:13,7),7,nil.hands[[1]])
nil.hands[[7]]=find.mutually.exclusive(nil.hands[[7]],7,nil.hands[[2]])
nil.hands[[7]]=find.mutually.exclusive(nil.hands[[7]],7,nil.hands[[3]])
nil.hands[[7]]=find.mutually.exclusive(nil.hands[[7]],7,nil.hands[[4]])
nil.hands[[7]]=find.mutually.exclusive(nil.hands[[7]],7,nil.hands[[5]])
nil.hands[[7]]=find.mutually.exclusive(nil.hands[[7]],7,nil.hands[[6]])