62 lines
1.2 KiB
Ruby
62 lines
1.2 KiB
Ruby
# Défi : score d'une main
|
|
#
|
|
# Écris la méthode `hand_score(cards)`.
|
|
#
|
|
# Chaque carte est représentée par un hash :
|
|
#
|
|
# { value: "ace", suit: "hearts" }
|
|
#
|
|
# Valeurs :
|
|
# - 7 à 10 valent leur valeur numérique ;
|
|
# - jack vaut 11 ;
|
|
# - queen vaut 12 ;
|
|
# - king vaut 13 ;
|
|
# - ace vaut 14.
|
|
#
|
|
# La méthode doit retourner la somme des valeurs de toutes les cartes.
|
|
#
|
|
# Contraintes :
|
|
# - ne modifie pas le tableau d'origine ;
|
|
# - évite une longue suite de `if` ;
|
|
# - essaie de garder la méthode lisible.
|
|
|
|
cards = [
|
|
{ value: "7", suit: "clubs" },
|
|
{ value: "king", suit: "hearts" },
|
|
{ value: "ace", suit: "spades" },
|
|
# { value: "blork", suit: "club"}
|
|
]
|
|
|
|
def hand_score(cards)
|
|
score = 0
|
|
|
|
cards.each do |card|
|
|
value = Integer(card[:value], exception: false)
|
|
if value
|
|
score += value
|
|
else
|
|
case card[:value]
|
|
when "jack"
|
|
score += 11
|
|
when "queen"
|
|
score += 12
|
|
when "king"
|
|
score += 13
|
|
when "ace"
|
|
score += 14
|
|
else
|
|
# raise lève une exception et interrompt l'exécution normale du programme.
|
|
raise ArgumentError, "Valeur de carte inconnue : #{card[:value]}"
|
|
end
|
|
end
|
|
end
|
|
score
|
|
end
|
|
|
|
# Résultat attendu :
|
|
#
|
|
# hand_score(cards)
|
|
# => 34
|
|
|
|
puts hand_score(cards)
|