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)
|
||||
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