# alias: oneMinorTodd2x # button-text: 1m & Todd Raises # gib-works: false # bba-works: false # auction-filter: Auction.....\n1[CD] +Pass # convention-card-ns: 21GF-GIB # convention-card-ew: 21GF-GIB /*@chat --- 1m - 2x Robert Todd minor-suit response structure South opens 1!C or 1!D. North responds (all deny a 4-card major). Raises (support for opener's minor): 3m = 0-6 weak jump raise (inverted), 2!S = 7-9 constructive raise (Todd), 2m = 10+ inverted raise, invitational+ (unbalanced). Balanced, no fit needed: 2!H = 10-12 invitational, 2NT = game-force (mini-maxi: 13-14 or 18-19), 3NT = 15-17 to play. Todd: https://www.advinbridge.com/this-week-in-bridge/592 @chat*/ dealer south #include "script/Calm-Opponents" # Defines calmWest #include "script/Predict-Opening-1-Bid" # Defines oneClub, oneDiamond #include "script/TP" # Defines tpSouth #include "script/Leveling" # Defines keepNN throttles (keepNN ~= keep NN% of hands) for leveling # ============================================================ # North response building blocks (Todd 1m-2x), all deny a 4-card major # ============================================================ nNoMajor = spades(north)<4 and hearts(north)<4 nSup = (oneClub and clubs(north)>3) or (oneDiamond and diamonds(north)>3) // 4+ support for opener's minor nBal = shape(north, any 4333 + any 4432 + any 5332) nUnbal = not nBal // unbalanced -- unsuited to a NT response # Each response is a self-contained hand type. # Support hands (raises) -- 3m / 2S / 2m cover all the raise ranges: # - the weak (3m) and constructive (2S) raises sit below the NT-response # ranges, so each takes every support hand at its strength. # - the strong inverted raise (2m) is the UNBALANCED 10+ support hand; # a balanced 10+ support hand prefers a natural NT response (2H/2NT/3NT), # which is the bin it is leveled in. # OUT OF SCOPE: unbalanced 10+ hands WITHOUT support have no bid here -- they # match no response below, so the final selection never generates them. n3m = hcp(north)<7 and nNoMajor and nSup // 3m weak jump raise 0-6 (inverted) n2S = hcp(north)>6 and hcp(north)<10 and nNoMajor and nSup // 2S constructive raise 7-9 (Todd) n2m = hcp(north)>9 and nNoMajor and nSup and nUnbal // 2m inverted raise, invitational+ (unbalanced) n2H = hcp(north)>9 and hcp(north)<13 and nNoMajor and nBal // 2H balanced invitational 10-12 n3NT = hcp(north)>14 and hcp(north)<18 and nNoMajor and nBal // 3NT 15-17 balanced, to play n2NT = nNoMajor and nBal and ((hcp(north)>12 and hcp(north)<15) or (hcp(north)>17 and hcp(north)<20)) // 2NT mini-maxi balanced: 13-14 or 18-19 # ============================================================ # Opener (South) framing -- a standard 1m opener # ============================================================ sMin = hcp(south)<12 and tpSouth<13 sShape = sMin ? shape(south,any 7xxx+any 6xxx) : shape(south, xxxx) s1m = oneClub or oneDiamond sRange = tpSouth>11 and hcp(south)>10 and tpSouth<22 and hcp(south)<23 # ============================================================ # Final selection -- comment a branch out to drill one response. # Test 3m only: s1m and n3m and sRange and sShape and calmWest # Test 2S only: s1m and n2S and sRange and sShape and calmWest # Test 2m only: s1m and n2m and sRange and sShape and calmWest # Test 2H only: s1m and n2H and sRange and sShape and calmWest # Test 2NT only: s1m and n2NT and sRange and sShape and calmWest # Test 3NT only: s1m and n3NT and sRange and sShape and calmWest # ============================================================ s1m and ((n3m and keep70) or (n2S and keep53) or (n2m and keep67) or (n2H and keep33) or (n2NT and keep67) or n3NT) and sRange and sShape and calmWest action average "resp 3m 0-6 " 100 * n3m, average " 2S 7-9 " 100 * n2S, average " 2m 10+ " 100 * n2m, average " 2H inv " 100 * n2H, average " 2NT GF " 100 * n2NT, average " 3NT 1517" 100 * n3NT, average " 2NT 13-14 " 100 * (n2NT and hcp(north)<15), average " 2NT 18-19 " 100 * (n2NT and hcp(north)>17), average "hcp South " hcp(south), average " North " hcp(north), average "South 1C " 100 * oneClub, average " 1D " 100 * oneDiamond,