table of contents
SolveBoard(3) | Library Functions Manual | SolveBoard(3) |
NAME¶
InitStart, SolveBoard, SolveBoardPBN, CalcDDtable, CalcDDtablePBN - calculate number of possible tricks in a Bridge handSYNOPSIS¶
#include <dds.h>DESCRIPTION¶
Short description of the DLL functions supported in Double Dummy Problem Solver 2.1.21=No fault
-1=Unknown fault
-2=No of cards = 0
-3=target > Number of tricks left
-4=Duplicated cards
-5=target < -1
-7=target > 13
-8=solutions < 1
-9=solutions > 3
-10=No of cards > 52
-11=Not used
-12=Suit or rank value out of range for deal.currentTrickSuit or deal.currentTrickRank
-13=Card already played in the current trick is also defined as a remaining card to play
-14=Wrong number of remaining cards for a hand
-15=threadIndex < 0 or > 15
struct deal {
int trump; /* I.e. which suit that is trump or if contract is NT, Spades=0, Hearts=1, Diamonds=2, Clubs=3, NT=4 */
int first; /* 0-3, 0=North, 1=East, 2=South, 3=West , Leading hand for the trick.*/
int currentTrickSuit[3]; /* 0-2 for up to 3 cards in the order played */
int currentTrickRank[3]; /* 2-14 for up to 3 cards */
unsigned int remainCards[4][4]; /* 1st index hand (0-3), 2nd index suit (0-3), values as bitstring of ranks bit 0=0, bit 1=0, bit 2=rank 2, ………. bit 14=rank 14, bit 15=0 for cards remaining after already played cards (cards already played to the current trick are not included in this bitstring).
The decimal value for a card then range between 4 (=rank 2) and 16384 (Ace=rank 14). */
};
- target=1-13, solutions=1:
- Returns only one of the cards. Its returned score is the same as target whentarget or higher tricks can be won. Otherwise, score -1 is returned if target cannot be reached, or score 0 if no tricks can be won.
- target=-1, solutions=1:
- Returns only one of the optimum cards and its score.
- target=0, solutions=1:
- Returns only one of the cards legal to play with score set to 0.
- target 1-13, solutions=2:
- Return all cards meeting target. Their returned scores are the same as target when target or higher tricks can be won. Otherwise, only one card is returned with score -1 if target cannot be reached, or score 0 for all cards legal to play if no tricks can be won.
- target -1, solutions=2:
- Return all optimum cards with their scores.
- target=0, solutions=2:
- Return all cards legal to play with scores set to 0.
- target irrelevant, solutions=3:
- Return all cards that can be legally played with their scores in descending order.
- mode=0
- Do not search to find the score if the hand to play has only one card, including its equivalents, to play. Score is set to -2 for this card, indicating that there are no alternative cards. If there are multiple choices for cards to play, search is done to find the score. This mode is very fast but you don’t
- mode=1
- Always search to find the score. Even when the hand to play has only one card, with possible equivalents, to play. For both mode=0 and mode=1: If the preceding SolveBoard call had the same trump suit and the same or similar deal, except for deal.first, then the transposition table contents is reused from the preceding SolveBoard call. Setting mode=2 is no longer needed in this case, but can still be done for backwards compatibility.
- mode=2
- As for mode=1, but the transposition table contents is
reused from the preceding SolveBoard call. It is the responsibility of the
programmer using the DLL to ensure that reusing the table is safe in the
actual situation. Example: Deal is the same, except for deal.first. Trump
suit is the same.
1st call: SolveBoard(deal, -1, 1, 1, &fut, 0), deal.first=1, i.e. East leads.
2nd call: SolveBoard(deal, -1, 1, 2, &fut, 0), deal.first=2, i.e. South leads.
3rd call: SolveBoard(deal, -1, 1, 2, &fut, 0), deal.first=3, i.e. West leads.
4th call: SolveBoard(deal, -1, 1, 2, &fut, 0), deal.first=0, i.e. North leads.
struct futureTricks { /* The DLL provides the score (number of tricks) that can be won by the card to play defined by its suit and rank. Array of all alternative cards. */
int nodes; /* Number of searched nodes */
int cards; /* No of alternative cards */
int suit[13]; /* 0=Spades, 1=Hearts, 2=Diamonds, 3=Clubs */
int rank[13]; /* 2-14 for 2 through Ace */
int equals[13]; /* Bitstring of ranks for equivalent lower rank cards. The decimal value range between 4 (=2) and 8192 (King=rank 13). When there are several ”equals”, the value is the sum of each ”equal”. */
int score[13]; /* -1 indicates that target was not reached, otherwise target or max numbe of tricks */
};
struct dealPBN {
int trump;
int first;
int currentTrickSuit[3];
int currentTrickRank[3];
char remainCards[80]; /* First character identifies the hand having the cards given first
in the string, then the cards of the other hands are given in a
clock-wise order, see example above. Null characters fill out
the character array at the end. */
};
1=No fault,
Other status codes are errors, with codes equal to SolveBoard status codes.
struct ddTableDeal {
unsigned int cards[4][4]; /* 1st index is hand, 2nd index is suit, same coding as for deal.remainCards for SolveBoard. */
};
struct ddTableResults { /* For each combination trump suit / declarer hand, the DLL provides the double dummy score. */
int resTable[5][4]; /* 1st index is trump (0=Spades, 1=Hearts, 2=Diamonds, 3=Clubs, 4=No Trump 2nd index is declarer hand, 0=North, 1=East, 2=South, 3=West */
};
struct ddTableDealPBN {
char cards[80];
};
Revision History¶
Rev A, 2006-02-25 First issue.2010-10 |