Function malachite_base::strings::random::random_strings_using_chars
source · [−]pub fn random_strings_using_chars<I: Iterator<Item = char>>(
seed: Seed,
cs_gen: &dyn Fn(Seed) -> I,
mean_length_numerator: u64,
mean_length_denominator: u64
) -> StringsFromCharVecs<RandomVecs<char, GeometricRandomNaturalValues<u64>, I>>ⓘNotable traits for StringsFromCharVecs<I>impl<I: Iterator<Item = Vec<char>>> Iterator for StringsFromCharVecs<I> type Item = String;
Expand description
Generates random String
s using char
s from an iterator.
The lengths of the String
s are sampled from a geometric distribution with a specified mean
$m$, equal to mean_length_numerator / mean_length_denominator
. $m$ must be greater than 0.
$$ P((c_0, c_1, \ldots, c_{n-1})) = \frac{m^n}{(m+1)^{n+1}}\prod_{i=0}^{n-1}P(c_i). $$
The iterators produced by cs_gen
must be infinite.
Panics
Panics if mean_length_numerator
or mean_length_denominator
are zero, or, if after being
reduced to lowest terms, their sum is greater than or equal to $2^{64}$.
Examples
extern crate itertools;
use itertools::Itertools;
use malachite_base::chars::random::random_char_inclusive_range;
use malachite_base::random::EXAMPLE_SEED;
use malachite_base::strings::random::random_strings_using_chars;
let ss = random_strings_using_chars(
EXAMPLE_SEED,
&|seed| random_char_inclusive_range(seed, 'x', 'z'),
4,
1,
)
.take(10)
.collect_vec();
assert_eq!(
ss.iter().map(|cs| cs.as_str()).collect_vec().as_slice(),
&["", "yyyyzxxxzxzxzx", "zzzy", "xzzx", "y", "", "zyzxz", "zy", "zyyx", ""]
);