Solution 1: Let’s place the rooks one by one, indexing them starting with 0. Let \(P(n)\) denote the probabiity that the rook \(n\) drops to a safe square given that the previous \(n-1\) rooks were placed safely.

Obviously \(P(0)\) is 1. For \(P(1)\), we have \(64 - 15\) safe squares out of 63 remaining, as the first placed rook puts to danger 15 squares. The next rook will have to be dropped into one of \(65 - 15 - 13\) safe squares, as the second rook put to danger 13 squares in addtion to 15 controlled by the first, and so on. We apply the chain rule to compute \(P(n)\) in the general:

\[P(n) = \prod_{k= 1}^n \frac{64-\sum_{r=0}^{k-1} 15 - 2\cdot r}{64 - k}\]

Therefore,

\[P(7) = \frac{49}{63} \cdot \frac{36}{62} \cdot \frac{25}{61} \cdot \frac{16}{60} \cdot \frac{9}{59} \cdot \frac{4}{58} \cdot \frac{1}{57}\]

Solution 2: An alternative solution would be to first count the different ways of choosing where to put the rooks ensuring they are safe, and then divide this by the total number of ways to place 8 rooks without caring for keeping them safe. In numbers,

\[\frac{64\cdot 49 \cdot 36 \cdot 25 \cdot 16 \cdot 9 \cdot 4 \cdot 1}{64\cdot 63\cdot 62\cdot 61\cdot 60\cdot 59\cdot 58\cdot 57}\]

Solution 3: The placement of rooks can also go like this. We place the first rook to an \(8\times 8\) grid; the second rook must be placed in a \(7\times 7\) grid, and so on. Therefore, there are \(8!^2\) ways to place the rooks safely. Dividing this by the total number of ways to place 8 rooks on a \(8\times 8 = 64\) cell board, we get:

\[\frac{8!^2}{P(64,8)}\]

Solution 4: All the results above are equal to the following expression:

\[\frac{8!}{64 \choose 8}\]

Wouldn’t it have been possible to directly arrive at this expression? Let’s approach the problem from a different angle. The task is to pick 8 squares from a total of 64 to be occupied by rooks. This can be done in \({64 \choose 8}\) ways. We need to count how many of these selections are safe.

Think about this collection of safe placements, where each placement is say a collection of \(8\) tuples of row and column index. Given any placement from this set, when I order the tuples wrt their first index and stack them vertically starting from 1, I would have an 8 row table where the first column is simpy 1 to 8, and the second column is the corresponding column indices for each row. As there are \(8!\) such tables in the entire collection, I have \(8!\) many safe placements.

If you want to think more concretely, consider the following game. Assume I know what there is to know about safe placements, on a notebook or on my computer. You sit in front of a chess board and you have 8 rook pieces beside the board. Our task is me telling you how to place the rooks safely on the board for each safe placement in my collection. Of course, for each placement, I can tell you the coordinates one by one. But assume we are a little short on time, on a task that would take quite a long time anyway. So, we would want to use some information that follows from the nature of the collection of safe placements. That information is that whichever placement I tell you, the first indices will always be 1 to 8 in some order – of course likewise for the column indices. Therefore, I can simply tell you the order of indices in only one of the dimensions – we can agree on rows or columns. Therefore, for each placement you will receive a particular permutation of the numbers 1 to 8.

I know the commentary above is rather an overkill, if not silly. But I hope you get the point that most of the time there is a multidue of ways to approach a mathematical/computational problem; and also that these routes to the solution are not equivalent beyond leading to the same destination. They can be more or less beautiful, illuminating, enjoyable, and what not.