On 6 Jan 2008, at 22:40, James Gray wrote:

> On Jan 6, 2008, at 3:03 PM, Denis Hennessy wrote:
>
>> The understanding I had was that a dealer could 're-value' their  
>> hand with each card dealt; that is - if they draw two aces they're  
>> obviously 11 and 1 and they have to hit again. If they then draw a  
>> card which would cause them to bust, they can treat both aces as 1.
>
> You have all of that right, but Eric was saying you don't properly  
> value hands with multiple aces in them.  For example, ace, ace, and  
> ten should value as 12, not 22.
>
> One way I've handled this in the pass was to sort the hand such that  
> aces are at the end, run through building up a total, and count an  
> ace as 11 when I passed it if doing so would keep the running count  
> less than or equal to 21 minus the cards left to count.
>
> Hope that makes sense.
>
> James Edward Gray II
>

Actually, I think my code is correct, but I might be snow-blind.  
Here's the relevant function. It values all the non-ace cards first  
and then values the aces.

def hand_value(hand)
   value = 0
   # First calculate values ignoring aces
   hand.each do |c|
     if c=='A'
       next
     elsif 'JQK'.include? c
       value += 10
     else
       value += c.to_i
     end
   end
   # Then add aces as 11 unless they would bust the hand
   hand.each do |c|
     if c=='A'
       if value>10
         value += 1
       else
         value += 11
       end
     end
   end
   value
end

/dh