pub fn play<
F1: FnMut ([&str; 2]),
F2: FnMut ([&str; 2], [&str; 2], [&str; 2]),
F3: FnMut ([&str; 2], [&str; 2], [&str; 2], [&str; 2]),
F4: FnMut ([&str; 2], [&str; 2], [&str; 2], [&str; 2], [&str; 2]),
>(
this_deck: Vec<[&'static str; 2]>,
mut on_card_1: F1,
mut on_flop: F2,
mut on_turn: F3,
mut on_river: F4,
skip_river: bool,
) {
for i1 in 0..=49 {
let flop_1 = this_deck [i1];
on_card_1 (flop_1);
for i2 in 0..=49 {
if (i2 == i1) { continue; }
let flop_2 = this_deck [i2];
for i3 in 0..=49 {
if (i3 == i1 || i3 == i2) { continue; }
let flop_3 = this_deck [i3];
on_flop (flop_1, flop_2, flop_3);
for i4 in 0..=49 {
if (i4 == i1 || i4 == i2 || i4 == i3) { continue; }
let turn = this_deck [i4];
on_turn (flop_1, flop_2, flop_3, turn);
if (skip_river) {
continue;
}
for i5 in 0..=49 {
if (i5 == i1 || i5 == i2 || i5 == i3 || i5 == i4) { continue; }
let river = this_deck [i5];
on_river (flop_1, flop_2, flop_3, turn, river);
}
}
}
}
}
}