Fraction-specified shufflers.
Convenience methods for "shuffle the bottom third of the deck" and stuff like that.
This commit is contained in:
parent
b8c0e5603a
commit
b806264154
@ -238,3 +238,35 @@ func (d *Deck[C]) ShufflePart(loc, n int) error {
|
|||||||
ShufflePart(d.cards, d.rand, loc, n)
|
ShufflePart(d.cards, d.rand, loc, n)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ShuffleRange shuffles the cards between the specified fractions of
|
||||||
|
// the deck; the top of the deck is 0.0 and the bottom of the deck is
|
||||||
|
// 1.0. This rounds "outward" -- "partial" cards at each end are counted.
|
||||||
|
// This can return the same warnings ShufflePart can in the same circumstances
|
||||||
|
// and may also complain about a backwards range.
|
||||||
|
func (d *Deck[C]) ShuffleRange(loFrac, hiFrac float64) error {
|
||||||
|
var errs ErrorCollector
|
||||||
|
if loFrac > hiFrac {
|
||||||
|
errs.Add(Warningf("%w: %f > %f", WarningBackwardsRange, loFrac, hiFrac))
|
||||||
|
loFrac, hiFrac = hiFrac, loFrac
|
||||||
|
}
|
||||||
|
low := int(math.Floor(loFrac * float64(d.Len())))
|
||||||
|
high := int(math.Ceil(hiFrac * float64(d.Len())))
|
||||||
|
n := 1 + high - low
|
||||||
|
errs.Add(d.ShufflePart(low, n))
|
||||||
|
return errs.Emit()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ShuffleTop uses ShuffleRange to shuffle the top frac (between 0.0 and 1.0)
|
||||||
|
// of the deck. See ShuffleRange and ShufflePart for information on
|
||||||
|
// rounding and warnings.
|
||||||
|
func (d *Deck[C]) ShuffleTop(frac float64) error {
|
||||||
|
return d.ShuffleRange(0.0, frac)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shufflebottom uses ShuffleRange to shuffle the bottom frac (between 0.0 and
|
||||||
|
// 1.0) of the deck. See ShuffleRange and ShufflePart for information on
|
||||||
|
// rounding and warnings.
|
||||||
|
func (d *Deck[C]) ShuffleBottom(frac float64) error {
|
||||||
|
return d.ShuffleRange(frac, 1.0)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user