Say the payout in chips, not just in money #73
Closed
jheaps
wants to merge 1 commits from
fix/casino-holdem-payout-in-chips into fix/casino-holdem-move-seat-on-touch
pull from: fix/casino-holdem-payout-in-chips
merge into: :fix/casino-holdem-move-seat-on-touch
:master
:feature/socialism
:polish/holdem-seats-one-size
:fix/holdem-dealer-chip-eats-its-seat
:polish/holdem-game-night-ready
:polish/holdem-round-next
:polish/holdem-seat-collisions
:polish/holdem-offline-and-render
:fix/naming-a-blind-deals-the-hand
:release/casino-holdem-polish
:fix/casino-holdem-phone-look
:fix/casino-holdem-sidebar-crowding
:fix/casino-holdem-contribution-rule
:fix/casino-holdem-one-stack-rule
:fix/casino-holdem-default-stack-buyin
:feat/casino-holdem-waiting-list
:feat/casino-holdem-misdeal
:feat/casino-holdem-cash-out
:feat/casino-holdem-clock
:feat/casino-holdem-rake
:fix/casino-holdem-stadium-ring
:fix/casino-holdem-phone-felt-shape
:fix/casino-holdem-audit-runs-everything
:feat/casino-holdem-straddle
:fix/casino-holdem-landscape-ring
:feat/casino-holdem-table-file
:fix/casino-holdem-touch-targets
:fix/casino-holdem-audit-modal-blindspot
:fix/casino-holdem-quicksplit-chop
:fix/casino-holdem-buildable-bet-sizes
:fix/casino-holdem-pot-sized-raise
:fix/casino-holdem-chips-to-count-out
:fix/casino-holdem-first-buy-in
:fix/casino-holdem-seating-a-table
:fix/casino-holdem-showdown-order
:fix/casino-holdem-hand-log-filter
:fix/casino-holdem-posting-in
:fix/casino-holdem-dead-button
:fix/casino-holdem-discarded-pot
:fix/casino-holdem-honest-tank-clock
:fix/casino-holdem-export-the-notes
:fix/casino-holdem-stacks-in-chips
:fix/casino-holdem-close-audit-blind-spots
:fix/casino-holdem-readable-dim-states
:fix/casino-holdem-drop-broken-watermark
:fix/casino-holdem-two-tabs
:fix/casino-holdem-unreadable-save
:fix/casino-holdem-say-when-not-saving
:fix/casino-holdem-shortcut-discovery
:fix/casino-holdem-rulings-index-compact
:fix/casino-holdem-rulings-index
:fix/casino-holdem-payout-in-chips
:fix/casino-holdem-move-seat-on-touch
:fix/casino-holdem-amount-fields-select
:fix/casino-holdem-touch-targets-by-pointer
:fix/casino-holdem-button-box-model
:fix/casino-holdem-blind-badge-placement
:fix/casino-holdem-buyin-deals-in
:fix/casino-holdem-bet-vs-raise
:fix/casino-holdem-deal-around-broke
:fix/casino-holdem-settle-up
:fix/casino-holdem-allin-and-bar
:fix/casino-holdem-one-dealer-button
:fix/casino-holdem-manual-deal
:fix/casino-holdem-less-guessing
:feature/casino-holdem-seat-editor
:fix/casino-holdem-landscape-table
:feature/casino-holdem-acting-seat
:feature/casino-holdem-raise-guard
:feature/casino-holdem-first-run
:feature/casino-holdem-contrast-audit
:feature/casino-holdem-layout-audit
:feature/casino-holdem-blind-fairness
:feature/casino-holdem-rulings-depth
:feature/casino-holdem-bank-audit
:feature/casino-holdem-fewer-taps
:feature/casino-holdem-render-perf
:feature/casino-holdem-keyboard-focus
:feature/casino-holdem-resilience
:feature/casino-holdem-messy-tables
:feature/casino-holdem-touch-mobile
:chore/casino-holdem-tech-debt
:feature/casino-holdem-dealer-batch
:feature/casino-holdem-seat-count-safety
:feature/casino-holdem-odd-chip
:feature/casino-holdem-button-moves
:feature/casino-holdem-allin-runout
:feature/casino-holdem-heads-up
:feature/casino-holdem-contrast
:feature/casino-holdem-touch-audit
:feature/casino-holdem-wizard-polish
:feature/casino-quicksplit-side-pots
:feature/casino-holdem-rebuys
:feature/casino-holdem-rulings
:feature/casino-holdem-sidebar-polish
:feature/casino-holdem-keyboard
:feature/casino-holdem-action-undo
:feature/casino-holdem-pace
:feature/casino-holdem-side-pot-breakdown
:feature/casino-holdem-gestures
:feature/casino-holdem-card-picker
:feature/casino-holdem-live-betting
:feature/casino-holdem-bet-chips
:feature/casino-holdem-seat-legibility
:feature/casino-holdem-undo-toasts
:feature/casino-holdem-quick-split
:feature/casino-holdem-mobile-table
:feature/casino-holdem-hand-history
:feature/casino-texas-holdem
:feature/casino-holdem-dealer-mode-polish
:feature/fractional-learned-weights
:fix/stockfish-dispose-hang
:fix/blog-cache-staleness
:fix/workflows
:gitea/workflows
:echo-acoustic-ranging
:chess-ui-overhaul
:feature/customChessEngine
:feature/blog
:AddProject
:feature/generalUpdate
:tech-debt/chess-cleanup
:tests/CreatePlaywrightTests
:UpdateParticleSimulatorButton
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
"Ann — $135" is the answer to the arithmetic. The dealer's actual job at that moment is working out that $135 is a black, a green and two reds, while four people watch them do it. Stacked on #72.
The chip legend has known the denominations all along. It was only being used to read chips into an amount — counting a seat's stack — and never to turn an amount back into chips.
Why greedy is the right algorithm here
Largest first is greedy, and so not optimal for an arbitrary set of values. Poker chips are not arbitrary: every real set is canonical — each denomination divides the next, 1/5/25/100/500 — and greedy is exactly optimal on those. A dealer who invents a 3-and-7 chip set still gets a valid answer, possibly one chip longer than it needed to be, which is a fair trade for not solving a knapsack in a modal.
Two cases where saying nothing is right, and one where it isn't
A table with no chip legend gets the amount on its own — it hasn't told us its denominations, so there's no advice to give. (The first version of this said "$135 no chip covers" there, which the tests caught.)
But a legend that exists and can't reach the amount does say so:
$3 no chip coverswhen the smallest chip is $5. Half a dollar in a dollar-chip game is the dealer's problem to solve, and they can only solve it if they're told, so it's never rounded away.Validation
12 tests (244 total): the breakdown adds up to the amount across eight amounts, cent chips make cent amounts exactly, a jumbled legend still pays largest first, the colour comes along for a future caller, and the two no-advice cases are told apart from the can't-reach one.
Driven through a real all-in hand at four viewports: $135 reads
1×$100, 1×$25, 2×$5and a tournament-sized $1,350 reads2×$500, 3×$100, 2×$25, fitting without spill down to 360px. With the legend emptied the line disappears and the payout stands alone. Contrast clean, no console errors."Ann - $135" is the answer to the arithmetic. The dealer's actual job at that moment is working out that $135 is a black, a green and two reds, while four people watch them do it. The chip legend has known the denominations all along. It was only being used to read chips *into* an amount -- counting a seat's stack -- and never to turn an amount back into chips. Final Payouts Ann - $135 1x$100, 1x$25, 2x$5 Largest first, which is greedy and so not optimal for an arbitrary set of values. Poker chips are not arbitrary: every real set is canonical -- each denomination divides the next, 1/5/25/100/500 -- and greedy is exactly optimal on those. A dealer who invents a 3-and-7 chip set still gets a valid answer, possibly one chip longer than it needed to be, which is a fair trade for not solving a knapsack in a modal. Two cases where saying nothing is the right answer, and one where it is not. A table with no chip legend gets the amount on its own -- it has not told us its denominations, so there is no advice to give. But a legend that exists and cannot reach the amount does say so: "$3 no chip covers" when the smallest chip is $5. Half a dollar in a dollar-chip game is the dealer's problem to solve and they can only solve it if they are told, so it is never rounded away. 12 tests (244 total): the breakdown adds up to the amount across eight amounts, cent chips make cent amounts exactly, a jumbled legend still pays largest first, the colour comes along for a future caller, and the two no-advice cases are told apart from the cannot-reach one. Driven through a real all-in hand at four sizes: $135 reads "1x$100, 1x$25, 2x$5" and a tournament-sized $1,350 reads "2x$500, 3x$100, 2x$25", fitting without spill down to 360px. With the legend emptied the line disappears and the payout stands alone. Contrast clean, no console errors. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_015bnp7xKUPFFSpwkYNFaPgbPull request closed