Edit: I'm using Mathematica 10
How do I encode this replacement rule?
I'm pulling a 5x5 array from a larger array. The small sub-array (call it S) can contain any combination of the symbols A, B or 0. What I'd like to do is: if the array contains any matching pairs between the center cell and a border cell with a 0 between them, we change the zero to match.
To enumerate (and make perfectly clear what I'm talking about) here are all the possible cases (using ? as a wildcard):
? ? A ? ? ? ? A ? ? ? ? 0 ? ? ? ? A ? ? ? ? A ? ? ----> ? ? A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A ? ? ? ? A ? ? ? 0 ? ? ? ? A ? ? ? A ? ? ----> ? ? A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A 0 A ----> ? ? A A A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A ? ? ----> ? ? A ? ? ? ? ? 0 ? ? ? ? A ? ? ? ? ? A ? ? ? ? A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A ? ? ----> ? ? A ? ? ? ? 0 ? ? ? ? A ? ? ? ? A ? ? ? ? A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A ? ? ----> ? ? A ? ? ? 0 ? ? ? ? A ? ? ? A ? ? ? ? A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A 0 A ? ? ----> A A A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A ? ? ? ? A ? ? ? ? ? 0 ? ? ? ? A ? ? ? ? ? A ? ? ----> ? ? A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Also these rule(s) stack so you can have something like this:
A ? ? ? ? A ? ? ? ? ? 0 ? ? ? ? A ? ? ? ? ? A 0 A ----> ? ? A A A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? And likewise for B. There's obviously a huge amount of symmetry in this situation, but I have no idea how to exploit it to avoid writing out 8 separate replacement rules. Seems like there should be clever way to just write one replacement rule that does the job. I'm stumped on that though :)