diff options
Diffstat (limited to 'internal/casino/house_edge_craps.go')
| -rw-r--r-- | internal/casino/house_edge_craps.go | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/internal/casino/house_edge_craps.go b/internal/casino/house_edge_craps.go index 06a6629..6b86571 100644 --- a/internal/casino/house_edge_craps.go +++ b/internal/casino/house_edge_craps.go @@ -10,10 +10,10 @@ func crapsHouseEdge(cfg TableConfig, bet string) HouseEdge { switch bet { case "pass", "come", "dontpass", "dontcome": return edge(-crapsContractEV(c, bet, 0)) - case "odds pass", "odds come <n>", "odds dontpass", "odds dontcome <n>": + case "odds pass", "odds pass / come", "odds come <n>", "odds dontpass", "odds dont <n>", "odds dontcome <n>": return edge(0) case "buy <n>", "lay <n>": - e := HouseEdge{Note: "5% commission on wins, before upward credit rounding; small stakes cost more"} + e := HouseEdge{Note: "5% commission on wins only; bet multiples keep the vig whole"} for _, n := range []int{2, 3, 4, 5, 6, 8, 9, 10, 11, 12} { if !c.number(n) { continue @@ -25,16 +25,16 @@ func crapsHouseEdge(cfg TableConfig, bet string) HouseEdge { e.Parts = append(e.Parts, EdgePart{strconv.Itoa(n), .05 * w / (w + 6)}) } return e - case "hard 4 / hard 10": + case "hard 4/10", "hard 4 / hard 10": return edge(-crapsResolvedEV(c, "hard", 4)) - case "hard 6 / hard 8": + case "hard 6/8", "hard 6 / hard 8": return edge(-crapsResolvedEV(c, "hard", 6)) case "eleven / ace-deuce": return edge(-crapsResolvedEV(c, "eleven", 0)) case "aces / boxcars": return edge(-crapsResolvedEV(c, "aces", 0)) case "hop <a> <b>": - return HouseEdge{Parts: []EdgePart{{"unequal dice", -crapsResolvedEV(c, "hop", 12)}, {"doubles", -crapsResolvedEV(c, "hop", 11)}}} + return HouseEdge{Parts: []EdgePart{{"", -crapsResolvedEV(c, "hop", 12)}, {"(doubles)", -crapsResolvedEV(c, "hop", 11)}}} case "small / tall": return edge(1 - 35*crapsCollectProbability([]int{2, 3, 4, 5, 6})) case "all": @@ -45,7 +45,13 @@ func crapsHouseEdge(cfg TableConfig, bet string) HouseEdge { return edge(-crapsResolvedEV(c, bet, 0)) } if strings.HasPrefix(bet, "place ") { - n, err := strconv.Atoi(strings.TrimPrefix(bet, "place ")) + // Place rows group equal-payout numbers (4/10, 5/9, 6/8, and the + // crapless extras); any number in the group carries the same edge. + field := strings.TrimPrefix(bet, "place ") + if at := strings.IndexByte(field, '/'); at >= 0 { + field = field[:at] + } + n, err := strconv.Atoi(field) if err == nil && c.number(n) { return edge(-crapsResolvedEV(c, "place", n)) } |
