aboutsummaryrefslogtreecommitdiff
path: root/internal/casino/house_edge_craps.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-10-03 00:51:41 -0400
committerhistoria <[not public]>2026-10-03 00:51:41 -0400
commit82e571d227feeafd0af4011e701ce26b99c5e3d9 (patch)
treeab4d56ddf94c3bf3b42fff5dfc2ff9a339f09113 /internal/casino/house_edge_craps.go
parentcac16d1725c46c82a2e62b84c93f7090b2ce0746 (diff)
downloadthehouseoficarus-82e571d227feeafd0af4011e701ce26b99c5e3d9.tar.gz
fix: craps felt and wager description cleanup
Diffstat (limited to 'internal/casino/house_edge_craps.go')
-rw-r--r--internal/casino/house_edge_craps.go18
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))
}