diff --git a/solutions/go/blackjack/1/blackjack.go b/solutions/go/blackjack/1/blackjack.go new file mode 100644 index 0000000..e507ab2 --- /dev/null +++ b/solutions/go/blackjack/1/blackjack.go @@ -0,0 +1,64 @@ +package blackjack + +// ParseCard returns the integer value of a card following blackjack ruleset. +func ParseCard(card string) int { + switch card { + case "ace": + return 11 + case "two": + return 2 + case "three": + return 3 + case "four": + return 4 + case "five": + return 5 + case "six": + return 6 + case "seven": + return 7 + case "eight": + return 8 + case "nine": + return 9 + case "ten": + return 10 + case "jack": + return 10 + case "queen": + return 10 + case "king": + return 10 + default: + return 0 + } +} + +// FirstTurn returns the decision for the first turn, given two cards of the +// player and one card of the dealer. +func FirstTurn(card1, card2, dealerCard string) string { + cardValue1 := ParseCard(card1) + cardValue2 := ParseCard(card2) + dealerValue := ParseCard(dealerCard) + + sum := cardValue1 + cardValue2 + + switch { + case card1 == "ace" && card2 == "ace": + return "P" + case sum == 21: + if dealerValue == 11 || dealerValue == 10 { + return "S" + } + return "W" + case sum >= 17 && sum <= 20: + return "S" + case sum >= 12 && sum <= 16: + if dealerValue >= 7{ + return "H" + } + return "S" + default: + return "H" + } +}