Problem 376. Poker Series 05: isStraight
The Poker Series consists of many short, well defined functions that when combined will lead to complex behavior. Our goal is to create a function that will take two hand matrices (defined below) and return the winning hand.
A hand matrix is 4x13 binary matrix showing the cards that are available for a poker player to use. This program will be expandable to use 5 card hands through 52 card hands! Suits of the cards are all equally ranked, so they only matter for determination of flushes (and straight flushes).
For each challenge, you should feel free to reuse your solutions from prior challenges in the series. To break this problem into smaller pieces, I am likely making architectural choices that are suboptimal for speed. This is being done as an exercise in coding. The larger goal of this project can likely be done in a much faster, but more obscure way.

A straight is 5 cards of the adjacent ranks (columns) regardless of suits (rows). The Ace (first column) is both lowest and highest. The columns represent A, 2, 3, ... K. This means A, K, Q, J, Ten is a straight also.
This hand matrix:
0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
represents a straight, so the return value from the function is TRUE.
This hand matrix does not:
0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
so the return value should be FALSE.
This hand matrix does represent a straight
0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0
Remember, hand matrices can contain any number of 1's from 0 to 52.
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
Would be TRUE for this function.
A second output argument should come from this function. It is a usedCards Matrix. It is of the same form as the hand matrix, but it only shows the cards used to make the straight. If more than one straight can be made, return the higher ranking one (the one with the highest top card. Ace being the highest). If different suits are possible for the same straight cards, return the one higher up in the matrix. If the straight happens to also be a straight flush, it still meets the defintion and should be returned. The highest straight should be returned, even if a straight flush can also be made.
Solution Stats
Problem Comments

1 Comment
in test suite #4... NOTE: I'm calling rows top to bottom, (HIGH) ♠  ♥  ♦  ♣ (LOW)
you have the choice between two straights:
#1) A♥ 2♠ 3♠ 4♦ 5♣
#2) 2♠ 3♠ 4♦ 5♣ 6♥
I was under the impression that A high always takes precedence
and since the A is tied with the 6, suite wise, I can't figure out why this second option would be the desirable solution
Is it because in this situation, Ace is low? Because if so, this hasn't been consistent throughout the Poker Series and now I'm just surprisedPikachu.jpg
Solution Comments
Show commentsProblem Recent Solvers60
Suggested Problems

6049 Solvers

Back to basics 16  byte order
190 Solvers

Set the array elements whose value is 13 to 0
1336 Solvers

Detect a number and replace with two NaN's
189 Solvers

333 Solvers
More from this Author51
Problem Tags
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!