fn jackobolan_and_downbeat_into_unizombie(game: GameState) -> Option<GameState> {
    // actual card effect is discard for cost to summon but testing that
    // the card is in hand first short circuits on the fail case faster
    game.summon_from_hand(Card::JackOBolan)
        // the discard isn't actually important for this method, so
        // any zombie which isn't a level 4 DARK monster or unizombie
        // or Shiranui Solitaire is included
        .and_then(|game| game.clone().discard(Card::DoomkingBalerdroch)
            .or_else(|| game.clone().discard(Card::GlowUpBloom))
            .or_else(|| game.clone().discard(Card::ShiranuiSpectralsword))
            .or_else(|| game.clone().discard(Card::ShiranuiSpiritmaster))
            .or_else(|| game.clone().discard(Card::GhostBelleAndHauntedMansion))
            .or_else(|| game.clone().discard(Card::Mezuki))
            .or_else(|| game.discard(Card::Gozuki))
        )
        // summon mezuki or summon gozuki and mill mezuki
        .and_then(|game| game.clone().summon_from_hand(Card::Mezuki)
            .or_else(|| game.summon_from_hand(Card::Gozuki)
                .and_then(|game| {
                    let _game = game.clone().mill_to_grave(Card::Mezuki);
                    // even if no mezukis for gozuki to mill, if discarded
                    // one via jackaboolan already then can continue combo
                    match _game {
                        Some(g) => Some(g),
                        None => {
                            if game.in_grave(Card::Mezuki) {
                                Some(game)
                            } else {
                                None
                            }
                        }
                    }
                })
            )
        )
        .and_then(|game| game.activate(Card::Downbeat))
        .and_then(|game| game.clone().send_to_grave(Card::Mezuki)
            .or_else(|| game.send_to_grave(Card::Gozuki))
        )
        .and_then(|game| game.summon_from_deck(Card::GhostBelleAndHauntedMansion))
        // Crystron Needlefiber can search unizombie (albeit negated)
        .and_then(|game| game.send_to_grave(Card::JackOBolan))
        .and_then(|game| game.send_to_grave(Card::GhostBelleAndHauntedMansion))
        .and_then(|game| game.summon_from_extra_deck(Card::Link2))
        .and_then(|game| game.summon_from_deck(Card::UniZombie))
        // summon any link 2 to send the uni zombie to grave
        .and_then(|game| game.send_to_grave(Card::Link2))
        .and_then(|game| game.send_to_grave(Card::UniZombie))
        .and_then(|game| game.summon_from_extra_deck(Card::Link2))
        // use the mezuki placed into grave earlier to revive the unizombie
        .and_then(|game| game.banish_from_grave(Card::Mezuki))
        .and_then(|game| game.summon_from_grave(Card::UniZombie))
}
/**
 * Attempts to use Jack 'o Bolan and Downbeat on a level 4 EARTH zombie monster
 * to bring out Ghost Belle to use Crystron Needlefiber to search unizombie and
 * then revive it from the grave to unnegate it.
 *
 * Even with both of these cards set to 3 the probability of summoning unizombie
 * only goes up from 67 to 70 percent compared to running 0 Jack 'o Bolans
 */
Attempts to use Jack 'o Bolan and Downbeat on a level 4 EARTH zombie monster
to bring out Ghost Belle to use Crystron Needlefiber to search unizombie and
then revive it from the grave to unnegate it.

Even with both of these cards set to 3 the probability of summoning unizombie
only goes up from 67 to 70 percent compared to running 0 Jack 'o Bolans
Attempts to use Jack ' o Bolan and Downbeat on a level 4 EARTH zombie monster to bring out Ghost Belle to use Crystron Needlefiber to search unizombie and then revive it from the grave to unnegate it . Even with both of these cards set to 3 the probability of summoning unizombie only goes up from 67 to 70 percent compared to running 0 Jack ' o Bolans
fn jackobolan_and_downbeat_into_unizombie(game: GameState) -> Option<GameState> {
    // actual card effect is discard for cost to summon but testing that
    // the card is in hand first short circuits on the fail case faster
    game.summon_from_hand(Card::JackOBolan)
        // the discard isn't actually important for this method, so
        // any zombie which isn't a level 4 DARK monster or unizombie
        // or Shiranui Solitaire is included
        .and_then(|game| game.clone().discard(Card::DoomkingBalerdroch)
            .or_else(|| game.clone().discard(Card::GlowUpBloom))
            .or_else(|| game.clone().discard(Card::ShiranuiSpectralsword))
            .or_else(|| game.clone().discard(Card::ShiranuiSpiritmaster))
            .or_else(|| game.clone().discard(Card::GhostBelleAndHauntedMansion))
            .or_else(|| game.clone().discard(Card::Mezuki))
            .or_else(|| game.discard(Card::Gozuki))
        )
        // summon mezuki or summon gozuki and mill mezuki
        .and_then(|game| game.clone().summon_from_hand(Card::Mezuki)
            .or_else(|| game.summon_from_hand(Card::Gozuki)
                .and_then(|game| {
                    let _game = game.clone().mill_to_grave(Card::Mezuki);
                    // even if no mezukis for gozuki to mill, if discarded
                    // one via jackaboolan already then can continue combo
                    match _game {
                        Some(g) => Some(g),
                        None => {
                            if game.in_grave(Card::Mezuki) {
                                Some(game)
                            } else {
                                None
                            }
                        }
                    }
                })
            )
        )
        .and_then(|game| game.activate(Card::Downbeat))
        .and_then(|game| game.clone().send_to_grave(Card::Mezuki)
            .or_else(|| game.send_to_grave(Card::Gozuki))
        )
        .and_then(|game| game.summon_from_deck(Card::GhostBelleAndHauntedMansion))
        // Crystron Needlefiber can search unizombie (albeit negated)
        .and_then(|game| game.send_to_grave(Card::JackOBolan))
        .and_then(|game| game.send_to_grave(Card::GhostBelleAndHauntedMansion))
        .and_then(|game| game.summon_from_extra_deck(Card::Link2))
        .and_then(|game| game.summon_from_deck(Card::UniZombie))
        // summon any link 2 to send the uni zombie to grave
        .and_then(|game| game.send_to_grave(Card::Link2))
        .and_then(|game| game.send_to_grave(Card::UniZombie))
        .and_then(|game| game.summon_from_extra_deck(Card::Link2))
        // use the mezuki placed into grave earlier to revive the unizombie
        .and_then(|game| game.banish_from_grave(Card::Mezuki))
        .and_then(|game| game.summon_from_grave(Card::UniZombie))
}
fn jackobolan_and_downbeat_into_unizombie ( game : GameState ) -> Option < GameState > { // actual card effect is discard for cost to summon but testing that // the card is in hand first short circuits on the fail case faster game . summon_from_hand ( Card :: JackOBolan ) // the discard isn't actually important for this method, so // any zombie which isn't a level 4 DARK monster or unizombie // or Shiranui Solitaire is included . and_then ( | game | game . clone ( ) . discard ( Card :: DoomkingBalerdroch ) . or_else ( | | game . clone ( ) . discard ( Card :: GlowUpBloom ) ) . or_else ( | | game . clone ( ) . discard ( Card :: ShiranuiSpectralsword ) ) . or_else ( | | game . clone ( ) . discard ( Card :: ShiranuiSpiritmaster ) ) . or_else ( | | game . clone ( ) . discard ( Card :: GhostBelleAndHauntedMansion ) ) . or_else ( | | game . clone ( ) . discard ( Card :: Mezuki ) ) . or_else ( | | game . discard ( Card :: Gozuki ) ) ) // summon mezuki or summon gozuki and mill mezuki . and_then ( | game | game . clone ( ) . summon_from_hand ( Card :: Mezuki ) . or_else ( | | game . summon_from_hand ( Card :: Gozuki ) . and_then ( | game | { let _game = game . clone ( ) . mill_to_grave ( Card :: Mezuki ) ; // even if no mezukis for gozuki to mill, if discarded // one via jackaboolan already then can continue combo match _game { Some ( g ) => Some ( g ) , None => { if game . in_grave ( Card :: Mezuki ) { Some ( game ) } else { None } } } } ) ) ) . and_then ( | game | game . activate ( Card :: Downbeat ) ) . and_then ( | game | game . clone ( ) . send_to_grave ( Card :: Mezuki ) . or_else ( | | game . send_to_grave ( Card :: Gozuki ) ) ) . and_then ( | game | game . summon_from_deck ( Card :: GhostBelleAndHauntedMansion ) ) // Crystron Needlefiber can search unizombie (albeit negated) . and_then ( | game | game . send_to_grave ( Card :: JackOBolan ) ) . and_then ( | game | game . send_to_grave ( Card :: GhostBelleAndHauntedMansion ) ) . and_then ( | game | game . summon_from_extra_deck ( Card :: Link2 ) ) . and_then ( | game | game . summon_from_deck ( Card :: UniZombie ) ) // summon any link 2 to send the uni zombie to grave . and_then ( | game | game . send_to_grave ( Card :: Link2 ) ) . and_then ( | game | game . send_to_grave ( Card :: UniZombie ) ) . and_then ( | game | game . summon_from_extra_deck ( Card :: Link2 ) ) // use the mezuki placed into grave earlier to revive the unizombie . and_then ( | game | game . banish_from_grave ( Card :: Mezuki ) ) . and_then ( | game | game . summon_from_grave ( Card :: UniZombie ) ) }
Attempts to use Jack 'o Bolan and Downbeat on a level 4 EARTH zombie monster
 to bring out Ghost Belle to use Crystron Needlefiber to search unizombie and
 then revive it from the grave to unnegate it.
Attempts to use Jack ' o Bolan and Downbeat on a level 4 EARTH zombie monster to bring out Ghost Belle to use Crystron Needlefiber to search unizombie and then revive it from the grave to unnegate it .
game
GameState
game
GameState