Keep the symmetry
SANDBOX: I am aware that the language in this challenge, as it stands, is quite... fluffy. If anyone could help me firm it up, I would be grateful. Also, would this be better as a cops-and-robbers style challenge, where the cops are trying to make the output more symmetrical, and the robbers make it less symmetrical?
Given a 2D array of 1s and 0s, flip a 1 to a 0 and output the resulting array.
The program must be trying to make the array symmetrical (reflectional symmetry along both the horizontal and vertical axes). Where the array has an even number of entries in a row/column, the axis is between the two central rows/columns; otherwise it's down the middle of the middle row/column (and the numbers in that row/column count on both sides). In other words, 1,0,1 is the same as 1,0,0,1 in terms of symmetry.
The output must be in the same form as the input (so that your program or function could take it in again).
Your program must perform the flip, even if the array is already perfectly symmetrical. In this case, it should try and make it as easy as possible for the program to make it symmetrical again next time.
Some Examples
1,0,0,1 1,0,0,1 1,0,0,1 1,0,0,1 1,0,0,0 0,0,1,0 .. 0,0,0,0 .. 0,0,0,0 .. 0,0,0,0 .. 0,0,0,0 1,0,0,1 1,0,0,1 0,0,0,1 0,0,0,0 0,0,0,0 1,1,1 1,0,1 1,0,1 1,0,1 1,0,1 1,1,1 .. 1,1,1 .. 1,0,1 .. 0,0,1 .. 0,0,0 1,0,1 1,0,1 1,0,1 1,0,1 1,0,1