1
Mathematica Still not golfed
l = {{X, X, V}, {I, C, V}, {X, I, V}, {V, C, C}, {X, X, X}}
rules = {{i, j} -> {i + #1, j + #2}} & @@@ {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
rules1 = Thread[# -> rules] & /@ Permutations[Union @@ l];
f[r_] := Flatten@ MapIndexed[(#1 /. r /. i -> #2[[1]] /. j -> #2[[2]])