from itertools import product
defkrazy_king_blackjack(hand, king_value):
VALUE ={str(n):(n,)for n inrange(1,11)}
VALUE.update({'J':(10,),'Q':(10,),'K':(10, king_value),'A':(1,11)})
possible =[sum(comb)for comb in product(*(VALUE[card]for card in hand))ifsum(comb)<=21]returnmax(possible)if possible elseFalse
答案2:
from itertools import product
defkrazy_king_blackjack(hand, king_value):
d =dict([(str(a),[a])for a inrange(2,11)]+[('A',[1,11]),('J',[10]),('Q',[10]),('K',[10, king_value])])returnmax((s for s in(map(sum, product(*map(d.get, hand))))if s <22), default=False)
答案3:
from collections import Counter
from itertools import product
CARDS =dict.fromkeys('10 J Q K'.split(),10)
CARDS.update({c: i for i, c inenumerate('A23456789',1)})defevaluate_hand(hand_base_value, alt_values, alt_cards):
alt_hand = hand_base_value +sum((alt_values[k]- CARDS[k])* v for k, v in alt_cards.items())return alt_hand <=21and alt_hand
defkrazy_king_blackjack(hand, king_value):
deal, alt_values = Counter(hand),{'A':11,'K': king_value}
min_hand_value, alt_cards =sum(v * CARDS[k]for k, v in deal.items()),sorted(alt_values)returnmax(evaluate_hand(min_hand_value, alt_values,dict(zip(alt_cards, p)))for p in product(*[range(deal.get(card,0)+1)for card in alt_cards]))
答案4:
defkrazy_king_blackjack(hand, king_value):defscoring(card):if card in"JQ":return(10,)elif card =="A":return(1,11)elif card =="K":return(king_value,10)else:return(int(card),)
values =[0]for card in hand:
values =[val + score for val in values for score in scoring(str(card))if(val + score <=21)]returnmax(values)if values elseFalse
答案5:
defkrazy_king_blackjack(hand, king_value, score =0):ifnot hand:return score if0< score <22elseFalse
vals ={str(k):[k]for k inrange(2,11)}
vals.update({'A':[1,11],'K':[10, king_value],'J':[10],'Q':[10]})returnmax([krazy_king_blackjack(hand[1:], king_value, score + c)for c in vals[hand[0]]])
答案6:
import itertools
defkrazy_king_blackjack(hand, king_value):
special=[]
rest=[]
cards={'J':10,'Q':10,'K': king_value or10}
sume=0for key, group in itertools.groupby(hand, key=lambda x :(x=='A'or x=='K')):for thing in group:if key:
special.append(thing)else:
rest.append(thing)for card in rest:
sume +=int(cards.get(card,card))
ass =list(map(sum,list(itertools.combinations_with_replacement([1,11], special.count('A')))))
ks =list(map(sum,list(itertools.combinations_with_replacement([10,king_value], special.count('K')))))
restsums=0for ace in ass:for k in ks:if sume+k+ace > restsums and sume+k+ace <22:
restsums=sume+k+ace
if restsums ==0:returnFalsereturn(restsums)
答案7:
defkrazy_king_blackjack(hand, king_value):
number_ace=hand.count('A')
number_king=hand.count('K')print(number_king)
extraking=10-king_value
dict={'A':1,'J':10,'Q':10,'K': king_value}defvaluefind(i):try:returnint(i)except:returndict.get(i)
aim =21-sum(list(map(valuefind, hand)))if(aim <0):return(False)elif((aim <extraking)|((number_king + number_ace)==0)):return(21-aim)else:
options =[]for i inrange(number_king+1):for j inrange(number_ace+1):
options.append(i*extraking + j*10)return21-(aim-(max([x for x in options if x<=aim])))
from itertools import product
defkrazy_king_blackjack(hand, king_value):
AK =[card for card in hand if card in"AK"]
nonAK =[card for card in hand if card notin"AK"]
answer = base =sum(10if card in["10","J","Q"]elseint(card)for card in nonAK)
bust = base >21if(not bust)and AK:
bust =True
choices =[[1,11]if card =="A"else[king_value,10]for card in AK]for combo in product(*choices):
baseWithAK = base +sum(combo)if baseWithAK <=21:
bust =False
answer =max(answer, baseWithAK)return answer ifnot bust elseFalse
答案10:
defkrazy_king_blackjack(hand, king_value):
possibleResults =[]for i inrange(len(hand)):if hand[i]=='K':ifnotlen(possibleResults):
possibleResults =[10,king_value]else:
possibleResults =[x+10for x in possibleResults]+[x+king_value for x in possibleResults]elif hand[i]=='A':ifnotlen(possibleResults):
possibleResults =[1,11]else:
possibleResults =[x+1for x in possibleResults]+[x+11for x in possibleResults]elif hand[i].isnumeric():ifnotlen(possibleResults):
possibleResults =[int(hand[i])]else:
possibleResults =[x+int(hand[i])for x in possibleResults]else:ifnotlen(possibleResults):
possibleResults =[10]else:
possibleResults =[x+10for x in possibleResults]
result =0for i inrange(len(possibleResults)):if possibleResults[i]<=21and possibleResults[i]> result:
result = possibleResults[i]return result if result >0elseFalse