Ah well, I can program that in MATHEMATICA in ten minutes, regardless of the details...
L = Permutations[{"K", "Q", "R", "R", "B", "B", "N", "N"}]; (* all permutations *)
T1[LL_] := (Position[LL, "R"] // First // First)
< (Position[LL, "K"] // First // First)
< (Position[LL, "R"] // Last // First); (* king between rooks true? *)
T2[LL_] := EvenQ[1 +
(Position[LL, "B"] // First // First) +
(Position[LL, "B"] // Last // First)]; (* unequal colored bishops true? *)
LF = Pick[L, (T1[#] && T2[#]) & /@ L]; (* CURRY STYLE YEAH! *)
(LF//Length) == 960 (* True! *)
GR[LL_] := (Position[LL, "K"] // First // First) < 7; (* OO king right *)
GS[LL_] := (Position[LL, "K"] // First // First) == 7; (* OO king stay *)
GL[LL_] := (Position[LL, "K"] // First // First) > 7; (* OO king left *)
CR[LL_] := (Position[LL, "K"] // First // First) < 3; (* OOO king right *)
CS[LL_] := (Position[LL, "K"] // First // First) == 3; (* OOO king stay *)
CL[LL_] := (Position[LL, "K"] // First // First) > 3; (* OOO king left *)
FR[LL_] := (Position[LL, "R"] // Last // First) < 6; (* OO rook right *)
FS[LL_] := (Position[LL, "R"] // Last // First) == 6; (* OO rook stay *)
FL[LL_] := (Position[LL, "R"] // Last // First) > 6; (* OO rook left *)
DR[LL_] := (Position[LL, "R"] // First // First) < 4; (* OOO rook right *)
DS[LL_] := (Position[LL, "R"] // First // First) == 4; (* OOO rook stay *)
DL[LL_] := (Position[LL, "R"] // First // First) > 4; (* OOO rook left *)
(* now counting we go! *)
{Pick[LF, GR[#] & /@ LF] // Length,
Pick[LF, GS[#] & /@ LF] // Length,
Pick[LF, GL[#] & /@ LF] // Length,
Pick[LF, CR[#] & /@ LF] // Length,
Pick[LF, CS[#] & /@ LF] // Length,
Pick[LF, CL[#] & /@ LF] // Length,
Pick[LF, FR[#] & /@ LF] // Length,
Pick[LF, FS[#] & /@ LF] // Length,
Pick[LF, FL[#] & /@ LF] // Length,
Pick[LF, DR[#] & /@ LF] // Length,
Pick[LF, DS[#] & /@ LF] // Length,
Pick[LF, DL[#] & /@ LF] // Length}
{852, 108, 0, 108, 168, 684, 174, 174, 612, 786, 102, 72}
So you can read off: The "long" rook goes leftwards in 72 cases, stays put in 102 cases and goes rightwards (jumps) in 786 cases. And so on. You can also combine ad libitum:
SR[LL_] := (Position[LL, "K"] // First // First) == 6 &&
(Position[LL, "R"] // Last // First) == 7; (* OO in 1st move! *)
SL[LL_] := (Position[LL, "K"] // First // First) == 4 &&
(Position[LL, "R"] // First // First) == 3;(* OOO in 1st move! *)
{Pick[LF, SR[#] & /@ LF] // Length,
Pick[LF, SL[#] & /@ LF] // Length}
{90,72}
And finally, if the right rook stands in the way of castling left or vice versa, this means
PR[LL_] := (Position[LL, "R"] // First // First) >= 6; (* left rook must clear at least f to OO *)
PL[LL_] := (Position[LL, "R"] // Last // First) <= 4; (* right rook must clear at least d to OOO *)
{Pick[LF, PR[#] & /@ LF] // Length,
Pick[LF, PL[#] & /@ LF] // Length}
{18,72}
Conclusion: This means one rook obstructs castling with the other in 90 cases.
- (Actually one can do this in the head: on the long side, the right rook has to be at "d" or left to it, giving RKRX,RKXR,RXKR,XRKR, on the short, "f", so only ...XRKR works. Now always one B has 3 and the other 2 spots independently, and on the remaining the Q can be placed on 3 spots. Fill up with N. Altogether thus there are 5x3x2x3=90 positions where you can't castle before moving the other rook away.)