ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 2010. Sasha the Young Grandmaster

An interesting way of coding it
Posted by Egor 18 Nov 2016 02:11
There is an interesting way to code it.

For each piece we can have a function like this:
pair<string, int> get_king(int n, int x0, int y0)
{
  int cnt = 0;
  for (int dx = -1; dx <= 1; dx++)
    for (int dy = -1; dy <= 1; dy++)
      if (dx != 0 || dy != 0)
      {
        int x = x0 + dx;
        int y = y0 + dy;
        cnt += (x >= 1 && x <= n && y >= 1 && y <= n);
      }

  return { "King", cnt };
}

In the main code we just do the following loop:
for (auto get : { get_king, get_knight, get_bishop, get_rook, get_queen })
{
  auto res = get(n, x, y);
  cout << res.first << ": " << res.second << endl;
}

After that the function for queen look very easy:
pair<string, int> get_queen(int n, int x0, int y0)
{
  int cnt = get_rook(n, x0, y0).second + get_bishop(n, x0, y0).second;
  return { "Queen", cnt };
}

If you have any ideas on how to code it better, please write them here :)