defpoker(hand)defone_pair(rank,count=0)rank.values.map{|x|count+=1ifx.size==2}count==1enddeftwo_pair(rank,count=0)rank.values.each{|x|count+=1ifx.size==2}count==2enddefthree_cards(rank)rank.values.map{|x|x.size==3?true:nil}.compact.shiftenddefstraight(rank)rank.size==5?rank.keys.sort.first+4==rank.keys.sort.last:falseenddefflush(suit);suit.size==1;enddeffourcards(rank)rank.values.map{|x|x.size==4?true:nil}.compact.shiftenddefconvert(char)casecharwhen'T':10when'J':11when'Q':12when'K':13when'A':14elsechar.to_iendenddefdiv_suit_and_rank(hand)suit_hash,rank_hash=Hash.new,Hash.newcards=hand.split('')Array.new(hand.size.div(2)){|i|2*i}.each{|i|suit=cards[i]rank=convert(cards[i+1])eval("suit_hash[suit] #{(suit_hash[suit]?'<< rank':'= [rank]')}")eval("rank_hash[rank] #{(rank_hash[rank]?'<< suit':'= [suit]')}")}[suit_hash,rank_hash]endsuit,rank=*div_suit_and_rank(hand)ifstraight(rank)"#{rank.keys.sort.first==10?'Loyal ':''}Straight #{(flush(suit)?'Flush':'')}"elsiffourcards(rank)"Four of a Kind"elsifthree_cards(rank)andone_pair(rank)"Full House"elsifflush(suit)"Flush"elsifthree_cards(rank)"Three of a Kind"elsiftwo_pair(rank)"Two Pair"elsifone_pair(rank)"One Pair"else"No Pair"endendhands=['SQSJSASKST','D9D7D6D5D8','C2D2S2H3H2','C2D3S2H3H2','S9S4S8STSJ','C4H7D5S6H3','S6H6C5DQC6','S6HQC5DQC6','S6H4C5DQC6','SJSQSKSAC2']hands.each{|x|putspoker(x)}
saws
#5192()
[
Ruby
]
Rating0/0=0.00
rankとsuitを分離して扱いました.
Rating0/0=0.00-0+
2 replies [ reply ]