void take_step_and_capture(const Step& step, GameState *gs)
{
  assert(step.is_motion());
  gs->move_piece(step);
  Step capture_step;
  if (possible_capture_from_motion(*gs, step)) {
    capture_from_motion(step, gs);
  }
}
bool GameState::move_piece(const Step &s)
{
  assert(s.is_motion());
  const uint8_t c = s.get_color(), p = s.get_piece(), pos = s.get_position(), finish = s.get_finish();
  return move_piece(c, p, pos, finish);
}