Solution of Burak BOGA
(define (Aces hand)
(accumulate + (every (lambda (x)
(if (member? 'A x)
4
0)) hand)))
(define (Suitlength hand arg)
(accumulate + (every (lambda (x)
(if (member? arg x)
1
0)) hand)))
; arg = '(SK HK DK CK)
(define (King hand arg)
(accumulate + (every (lambda (x)
(if (and (> (Suitlength hand (first x)) 1)
(member? x hand))
3
0)) arg)))
; arg = '(SQ HQ DQ CQ)
(define (Queen hand arg)
(accumulate + (every (lambda (x)
(if (and (> (Suitlength hand (first x)) 2)
(member? x hand))
2
0)) arg)))
; arg = '(SJ HJ DJ CJ)
(define (Jack hand arg)
(accumulate + (every (lambda (x)
(if (and (> (Suitlength hand (first x)) 3)
(member? x hand))
1
0)) arg)))
; arg = 'SHDC
(define (Void hand arg)
(accumulate + (every (lambda (x)
(if (= (Suitlength hand x) 0)
3
0)) arg)))
; arg = 'SHDC
(define (Singleton hand arg)
(accumulate + (every (lambda (x)
(if (= (Suitlength hand x) 1)
2
0)) arg)))
; arg = 'SHDC
(define (Balanced hand arg)
(if (= (accumulate + (every (lambda (x)
(if (> (Suitlength hand x) 2)
3
0)) arg)) 12)
#t
#f))
(define (Point hand)
(accumulate + (se (Aces hand)
(King hand '(SK HK DK CK))
(Queen hand '(SQ HQ DQ CQ))
(Jack hand '(SJ HJ DJ CJ))
(Void hand 'SHDC)
(Singleton hand 'SHDC))))
;arg = 'shdc
(define (LongestSuit hand arg)
(accumulate (lambda (x y)
(if (<= (Suitlength hand x) (Suitlength hand y))
y
x)) arg))
(define (Stoppers hand)
(and (helper hand 's)
(helper hand 'h)
(helper hand 'd)
(helper hand 'c)))
(define (helper hand x)
(or (and (or (member? (word x 'A) hand)
(member? (word x 'K) hand))
(> (Suitlength hand x) 1))
(and (member? (word x 'Q) hand)
(> (Suitlength hand x) 2))))
(define (OPENBID hand)
(cond ((and (< (Point hand) 13)
(< (Suitlength hand (LongestSuit hand 'shdc)) 7)) 'PASS)
((and (> (Point hand) 12)
(< (Point hand) 16)) (se 1 (LongestSuit hand 'shdc)))
((and (> (Point hand) 15)
(< (Point hand) 20)
(or (not (Stoppers hand))
(not (Balanced hand 'shdc)))) (se 1 (LongestSuit hand 'shdc)))
((and (> (Point hand) 15)
(< (Point hand) 20)
(Stoppers hand)
(Balanced hand 'shdc)) (se 1 '(NO TRUMP)))
((and (>= (Point hand) 20)
(or (not (Stoppers hand))
(not (Balanced hand 'shdc)))) (se 2 (LongestSuit hand 'shdc)))
((and (>= (Point hand) 20)
(Stoppers hand)
(Balanced hand 'shdc)) (se 2 '(NO TRUMP)))
((and (> (Point hand) 6)
(< (Point hand) 13)
(> (Suitlength hand (LongestSuit hand 'shdc)) 6)
) (se 3 (LongestSuit hand 'shdc)))
(#t 'PASS)))