#include "hanabi_types.hpp" namespace Hanabi { std::ostream &operator<<(std::ostream &os, Action const& action) { switch(action.type) { case ActionType::play: os << "play " + to_string(action.card); break; case ActionType::discard: os << "discard"; break; case ActionType::clue: os << "clue"; break; default: break; } return os; } std::string to_string(const Hanabi::Card &card) { if (card == Hanabi::Cards::trash) { return "kt"; } else { return Hanabi::suit_initials[card.suit] + std::to_string(5 - card.rank); } } std::ostream &operator<<(std::ostream &os, const Card &card) { os << to_string(card); return os; } std::ostream& print_probability(std::ostream& os, const rational_probability & prob) { os << prob << " ~ " << std::setprecision(5) << boost::rational_cast(prob) * 100 << "%"; return os; } std::ostream& print_probability(std::ostream& os, double prob) { os << std::setprecision(5) << prob; return os; } } // namespace Hanabi