You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{\rtf1\ansi\ansicpg1252\uc1\deff1\deflang1033\deflangfe1053{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
2
+
{\f93\froman\fcharset238\fprq2 Times New Roman CE;}{\f94\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f96\froman\fcharset161\fprq2 Times New Roman Greek;}{\f97\froman\fcharset162\fprq2 Times New Roman Tur;}
3
+
{\f98\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f99\fswiss\fcharset238\fprq2 Arial CE;}{\f100\fswiss\fcharset204\fprq2 Arial Cyr;}{\f102\fswiss\fcharset161\fprq2 Arial Greek;}{\f103\fswiss\fcharset162\fprq2 Arial Tur;}
\s1\nowidctlpar\outlinelevel0\adjustright\f1\cgrid\sbasedon0\snext0 heading 1;}{\*\cs10\additive Default Paragraph Font;}{\*\cs15\additive\b\sbasedon10 Strong;}}{\info{\title Bo Haglund, Bob Richardson}{\author Bo Haglund}{\operator Bo Haglund}
\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain\nowidctlpar\adjustright\f1\cgrid{\fs20\lang1053 Bo Haglund, Bob Richardson
12
+
\par Rev H, 2007-04-23
13
+
\par
14
+
\par
15
+
\par}{\b\fs20\cf1\lang1053 Short description of the DLL functions supported in Double Dummy Problem Solver 1.1}{\fs20\cf1\lang1053
16
+
\par
17
+
\par
18
+
\par extern "C" __declspec(dllimport) int __stdcall SolveBoard(struct deal, int target,
19
+
\par int solutions, int mode, struct futureTricks *futp);
20
+
\par
21
+
\par /* Before SolveBoard can be called, a structure of type "futureTricks" must be declared.
22
+
\par
23
+
\par}{\b\fs20\cf1\lang1053 SolveBoard}{\fs20\cf1\lang1053 returns a status integer, "no fault" means the DLL supplies the trick data in the\line "futureTricks" type structure.\line Status codes:
24
+
\par 1=No fault,
25
+
\par -1=Unknown fault,
26
+
\par -2=No of cards = 0,
27
+
\par -3=target > Number of tricks left,
28
+
\par -4=Duplicated cards,
29
+
\par -5=target < -1,
30
+
\par -7=target >13,
31
+
\par -8=solutions < 1,
32
+
\par -9=solutions > 3,
33
+
\par -10=No of cards > 52
34
+
\par -11=Not used
35
+
\par -12=Suit or rank value out of range for deal.currentTrickSuit or deal.currentTrickRank.\line\line Structure \'94}{\b\fs20\cf1\lang1053 deal}{\fs20\cf1\lang1053\'94 defines all data needed to describe the deal to be analyzed.
36
+
\par struct deal \{}{\f0\fs20\cf1\lang1053
37
+
\par}{\fs20\cf1\lang1053 int trump; /* I.e. which suit that is trump or if contract is NT, Spades=0, Hearts=1, \line Diamonds=2, Clubs=3, NT=4 */}{\f0\fs20\cf1\lang1053
38
+
\par}{\fs20\cf1\lang1053 int first; /* 0-3, 0=North, 1=East, 2=South, 3=West , Leading hand for the trick.*/}{\f0\fs20\cf1\lang1053
39
+
\par}{\fs20\cf1\lang1053 int currentTrickSuit[3]; /* 0-3 for up to 3 cards in the order played */
40
+
\par int currentTrickRank[3]; /* 2-14 for up to 3 cards */}{\f0\fs20\cf1\lang1053
41
+
\par}{\fs20\cf1\lang1053 unsigned int remainCards[4][4]; /* 1}{\fs20\cf1\lang1053\super st}{\fs20\cf1\lang1053 index hand (0-3), 2}{\fs20\cf1\lang1053\super nd}{\fs20\cf1\lang1053 index suit (0-3), values as bitstring of ranks\line\tab\tab\tab\tab
42
+
bit 0=0, bit 1=0, bit 2=rank 2, \'85\'85\'85. bit 14=rank 14, bit 15=0}{\f0\fs20\cf1\lang1053
43
+
\par}\pard\li2880\nowidctlpar\adjustright{\fs20\cf1\lang1053 for cards remaining after already played cards (cards already \line played to the current trick are not included in this bitstring). \line
44
+
The decimal value for a card then range between 4 (=rank 2) and
\par Parameter \'94}{\b\fs20\cf1\lang1053 target}{\fs20\cf1\lang1053\'94 is the number of tricks to be won by the side to play, -1 means that the program}{\f0\fs20\cf1\lang1053
49
+
\par}{\fs20\cf1\lang1053 shall find the maximum number. For equivalent cards only the highest is returned.
50
+
\par\line Parameter \'94}{\b\fs20\cf1\lang1053 solutions}{\fs20\cf1\lang1053\'94 defines how many card solutions that SolveBoard must return:
51
+
\par target=1-13, solutions=1: Returns only one of the cards. Its returned score is the same as target when \line target or higher tricks can be won. Otherwise, score \endash 1 is returned if target \line
52
+
cannot be reached, or score 0 if no tricks can be won. \line target=-1, solutions=1: Returns only one of the optimum cards and its score.
53
+
\par}{\fs20\lang1053 target=0, solutions=1: Returns only one of the cards legal to play with score set to 0.}{\fs20\cf1\lang1053\line target 1-13, solutions=2: Return all cards meeting target. Their returned scores are the same as\line
54
+
target when target or higher tricks can be won. Otherwise, only one card \line is returned with score \endash 1 if target cannot be reached, or score 0 for all cards \line
55
+
legal to play if no tricks can be won.\line target \endash 1, solutions=2: Return all optimum cards with their scores.
56
+
\par}{\fs20\lang1053 target=0, solutions=2: Return all cards legal to play with scores set to 0}{\fs20\cf6\lang1053 .}{\fs20\cf1\lang1053\line target irrelevant, solutions=3: Return all cards that can be legally played with their scores in
57
+
\par descending order.
58
+
\par
59
+
\par Parameter \'94}{\b\fs20\cf1\lang1053 mode}{\fs20\cf1\lang1053\'94 defines the DLL mode of operation. This mode does not affect the DLL if there are multiple choices for cards to play. If there is just one card to play, or multiple cards that are all
60
+
61
+
\par equivalent, this mode determines whether or not the DLL will search to find the score.\line mode=0: Do not search to find the score if the hand to play has only one card, including its equivalents,
62
+
\par to play. Score is set to \endash 2 for this card, indicating that there are no alternative cards. This mode
63
+
\par is very fast but you don\rquote t
64
+
\par mode=1: Always }{\fs20 search to find the score. Even when the hand to play has only one card, with possible
65
+
\par equivalents, to play.\line mode=2: As for mode=1, but the transposition table contents is reused from the preceding SolveBoard\line call. Deal must be the same, except for deal.first.
66
+
\par Example:
67
+
\par 1}{\fs20\super st}{\fs20 call: SolveBoard(deal, -1, 1, 1, &fut), deal.first=1, i.e. East leads.
\par struct }{\b\fs20\cf1\lang1053 futureTricks}{\fs20\cf1\lang1053\{ /* The DLL provides the score (number of tricks) that can be won by the card to
73
+
\par\tab play defined by its suit and rank. Array of all alternative cards. */}{\f0\fs20\cf1\lang1053
74
+
\par}{\fs20\cf1\lang1053 int nodes; /* Number of searched nodes */
75
+
\par int cards; /* No of alternative cards */}{\f0\fs20\cf1\lang1053
76
+
\par}{\fs20\cf1\lang1053 int suit[13]; /* 0=Spades, 1=Hearts, 2=Diamonds, 3=Clubs */
77
+
\par int rank[13]; /* 2-14 for 2 through Ace *}{\b\fs20\cf1\lang1053 /
78
+
\par}{\fs20\cf1\lang1053 int equals[13]; /* Bitstring of ranks for equivalent lower rank cards.
79
+
\par}\pard\li1440\nowidctlpar\adjustright{\fs20\cf1\lang1053 The decimal value range between 4 (=2) and 8192 (King=rank 13). When there\line are several \'94equals\'94, the value is the sum of each \'94equal\'94. *}{\b\fs20\cf1\lang1053 /}{
80
+
\fs20\cf1\lang1053
81
+
\par}\pard\nowidctlpar\adjustright{\fs20\cf1\lang1053 int score[13]; /* -1 indicates that target was not reached, otherwise target or max number}{\f0\fs20\cf1\lang1053
82
+
\par}{\fs20\cf1\lang1053 of tricks */}{\f0\fs20\cf1\lang1053
\par}\pard\fi-2880\li2880\nowidctlpar\adjustright{\fs20\cf1\lang1053 Rev C, 2006-03-28\tab Updated issue. Addition of the SolveBoard parameter \'94mode\'94.
92
+
\par
93
+
\par Rev D, 2006-04-05\tab Updated issue. Usage of target=0 to list all cards that are legal to play.
94
+
\par
95
+
\par Rev E, 2006-05-29\tab Updated issue. New error code \endash 10 for number of cards > 52.
96
+
\par
97
+
\par Rev F, 2006-08-09\tab Updated issue. New mode parameter value = 2. New error code \endash 11 for calling SolveBoard with mode = 2 and forbidden values of other parameters.
\par}\pard\fi-2880\li2880\nowidctlpar\adjustright{\fs20\cf1\lang1053 Rev F1, 2006-08-14\tab Clarifications on conditions for returning scores for the different combinations of the values for target and solutions.
100
+
\par
101
+
\par
102
+
\par Rev F2, 2006-08-26\tab New error code \endash 12 for wrongly set values of deal.currentTrickSuit and\line deal.currentTrickRank.
103
+
\par
104
+
\par Rev G, 2007-01-04\tab New DDS release 1.1, otherwise no change compared to isse F2.
Short description of the DLL functions supported in Double Dummy Problem Solver 1.1
6
+
7
+
8
+
extern "C" __declspec(dllimport) int __stdcall SolveBoard(struct deal, int target,
9
+
int solutions, int mode, struct futureTricks *futp);
10
+
11
+
/* Before SolveBoard can be called, a structure of type "futureTricks" must be declared.
12
+
13
+
SolveBoard returns a status integer, "no fault" means the DLL supplies the trick data in the
14
+
"futureTricks" type structure.
15
+
Status codes:
16
+
1=No fault,
17
+
-1=Unknown fault,
18
+
-2=No of cards = 0,
19
+
-3=target > Number of tricks left,
20
+
-4=Duplicated cards,
21
+
-5=target < -1,
22
+
-7=target >13,
23
+
-8=solutions < 1,
24
+
-9=solutions > 3,
25
+
-10=No of cards > 52
26
+
-11=Not used
27
+
-12=Suit or rank value out of range for deal.currentTrickSuit or deal.currentTrickRank.
28
+
29
+
Structure ”deal” defines all data needed to describe the deal to be analyzed.
30
+
struct deal {
31
+
int trump; /* I.e. which suit that is trump or if contract is NT, Spades=0, Hearts=1,
32
+
Diamonds=2, Clubs=3, NT=4 */
33
+
int first; /* 0-3, 0=North, 1=East, 2=South, 3=West , Leading hand for the trick.*/
34
+
int currentTrickSuit[3]; /* 0-3 for up to 3 cards in the order played */
35
+
int currentTrickRank[3]; /* 2-14 for up to 3 cards */
36
+
unsigned int remainCards[4][4]; /* 1st index hand (0-3), 2nd index suit (0-3), values as bitstring of ranks
37
+
bit 0=0, bit 1=0, bit 2=rank 2, ………. bit 14=rank 14, bit 15=0
38
+
for cards remaining after already played cards (cards already
39
+
played to the current trick are not included in this bitstring).
40
+
The decimal value for a card then range between 4 (=rank 2) and
41
+
16384 (Ace=rank 14). */
42
+
};
43
+
44
+
Parameter ”target” is the number of tricks to be won by the side to play, -1 means that the program
45
+
shall find the maximum number. For equivalent cards only the highest is returned.
46
+
47
+
Parameter ”solutions” defines how many card solutions that SolveBoard must return:
48
+
target=1-13, solutions=1: Returns only one of the cards. Its returned score is the same as target when
49
+
target or higher tricks can be won. Otherwise, score –1 is returned if target
50
+
cannot be reached, or score 0 if no tricks can be won.
51
+
target=-1, solutions=1: Returns only one of the optimum cards and its score.
52
+
target=0, solutions=1: Returns only one of the cards legal to play with score set to 0.
53
+
target 1-13, solutions=2: Return all cards meeting target. Their returned scores are the same as
54
+
target when target or higher tricks can be won. Otherwise, only one card
55
+
is returned with score –1 if target cannot be reached, or score 0 for all cards
56
+
legal to play if no tricks can be won.
57
+
target –1, solutions=2: Return all optimum cards with their scores.
58
+
target=0, solutions=2: Return all cards legal to play with scores set to 0.
59
+
target irrelevant, solutions=3: Return all cards that can be legally played with their scores in
60
+
descending order.
61
+
62
+
Parameter ”mode” defines the DLL mode of operation. This mode does not affect the DLL if there are multiple choices for cards to play. If there is just one card to play, or multiple cards that are all
63
+
equivalent, this mode determines whether or not the DLL will search to find the score.
64
+
mode=0: Do not search to find the score if the hand to play has only one card, including its equivalents,
65
+
to play. Score is set to –2 for this card, indicating that there are no alternative cards. This mode
66
+
is very fast but you don’t
67
+
mode=1: Always search to find the score. Even when the hand to play has only one card, with possible
68
+
equivalents, to play.
69
+
mode=2: As for mode=1, but the transposition table contents is reused from the preceding SolveBoard
70
+
call. Deal must be the same, except for deal.first.
71
+
Example:
72
+
1st call: SolveBoard(deal, -1, 1, 1, &fut), deal.first=1, i.e. East leads.
73
+
2nd call: SolveBoard(deal, -1, 1, 2, &fut), deal.first=2, i.e. South leads.
74
+
3rd call: SolveBoard(deal, -1, 1, 2, &fut), deal.first=3, i.e. West leads.
75
+
4th call: SolveBoard(deal, -1, 1, 2, &fut), deal.first=0, i.e. North leads.
76
+
77
+
struct futureTricks { /* The DLL provides the score (number of tricks) that can be won by the card to
78
+
play defined by its suit and rank. Array of all alternative cards. */
79
+
int nodes; /* Number of searched nodes */
80
+
int cards; /* No of alternative cards */
81
+
int suit[13]; /* 0=Spades, 1=Hearts, 2=Diamonds, 3=Clubs */
82
+
int rank[13]; /* 2-14 for 2 through Ace */
83
+
int equals[13]; /* Bitstring of ranks for equivalent lower rank cards.
84
+
The decimal value range between 4 (=2) and 8192 (King=rank 13). When there
85
+
are several ”equals”, the value is the sum of each ”equal”. */
86
+
int score[13]; /* -1 indicates that target was not reached, otherwise target or max number
87
+
of tricks */
88
+
} ;
89
+
90
+
Revision History
91
+
92
+
Rev A, 2006-02-25. First issue.
93
+
94
+
Rev B, 2006-03-20 Updated issue.
95
+
96
+
Rev C, 2006-03-28 Updated issue. Addition of the SolveBoard parameter ”mode”.
97
+
98
+
Rev D, 2006-04-05 Updated issue. Usage of target=0 to list all cards that are legal to play.
99
+
100
+
Rev E, 2006-05-29 Updated issue. New error code –10 for number of cards > 52.
101
+
102
+
Rev F, 2006-08-09 Updated issue. New mode parameter value = 2. New error code –11 for calling SolveBoard with mode = 2 and forbidden values of other parameters.
103
+
104
+
Rev F1, 2006-08-14 Clarifications on conditions for returning scores for the different combinations of the values for target and solutions.
105
+
106
+
107
+
Rev F2, 2006-08-26 New error code –12 for wrongly set values of deal.currentTrickSuit and
108
+
deal.currentTrickRank.
109
+
110
+
Rev G, 2007-01-04 New DDS release 1.1, otherwise no change compared to isse F2.
111
+
112
+
Rev H, 2007-04-23 DDS release 1.4, changes for parameter mode=2.
0 commit comments