```On Oct 22, 2005, at 8:14 PM, David Vincelli wrote:

> I'm writing a little BlackJack program for fun and I'm at the point
> where I have to decide which point value to assign to a hand. As you
> know, an Ace may be worth 1 or 11 in this game - whatever is closer to
> 21 without going over.
>
> Considering this, I know I have to come up with an algorithm that
> first determines what the different point values may be (the extreme
> case may be that a player got all four aces, now I'd have to determine
> all combinations of the players cards).

Actually, you can do it a little easier.  Just count them all as 11
and if you're over 21, subtract 10 until you're out of aces, or you
are under.  Here's some sample code from my own version:

class Card
# ...

def soften?
if @face == "A" and @value == 11
@value = 1
true
else
false
end
end

# ...
end

# ...

class Player
# ...

def total
count = @cards.inject(0) { |sum, card| sum + card.value }

while count > 21 and @cards.any? { |card| card.soften? }
count -= 10
end

count
end

# ...
end

# ...

__END__

Hope that helps.

James Edward Gray II

```