# An array battle with odd secret powers

## JavaScript (ES6),  83 81 80  76 bytes

The output is a space-delimited string of coordinates $$\x,y\$$.

f=(n,x=y=23,k=5,v=x*y)=>y?(v&1|~v*k%n?[]:[x,y]+' ')+f(n,--x||23|!y--,k^6):[]


Try it online!

### How?

Let $$\c_{x,y}=xy+1\$$ be the value of the cell located at $$\(x,y)\$$.

Since the cells on the edge are not accounted, we assume $$\0 and $$\0.

$$\c_{x,y}\$$ is odd if either $$\x\$$ or $$\y\$$ is even (or both of them).

If $$\x\$$ is odd, then $$\c_{x-1,y}\$$ and $$\c_{x+1,y}\$$ are odd. But in that case, $$\y\$$ must be even, and so are $$\c_{x,y-1}\$$ and $$\c_{x,y+1}\$$. The sum of the cell and its odd surrounding neighbors is:

$$s_{x,y}=c_{x,y}+c_{x-1,y}+c_{x+1,y}=3c_{x,y}$$

Similarly, if $$\y\$$ is odd:

$$s_{x,y}=c_{x,y}+c_{x,y-1}+c_{x,y+1}=3c_{x,y}$$

If both $$\x\$$ and $$\y\$$ are even, all surrounding neighbors are odd:

$$s_{x,y}=c_{x,y}+c_{x-1,y}+c_{x+1,y}+c_{x,y-1}+c_{x,y+1}=5c_{x,y}$$

This multiplier ($$\3\$$ or $$\5\$$) is named $$\k\$$ in the JS code.

### Commented

f = (                // f is a recursive function taking:
n,                 //   n      = input
x = y = 23,        //   (x, y) = current coordinates, starting at (23, 23)
k = 5,             //   k      = multiplier (3 or 5)
v = x * y          //   v      = x * y (value of the current cell - 1)
) =>                 //
y ?                // if y is greater than 0:
( v & 1 |        //   if v is odd (meaning that v + 1 is not)
~v * k % n ?   //   or n is not a divisor of -(v + 1) * k:
[]           //     append nothing
:              //   else:
[x, y] + ' ' //     append the coordinates followed by a space
) +              //
f(               //   append the result of a recursive call:
n,             //     pass n unchanged
--x ||         //     decrement x; if the result is 0:
23 | !y--,   //       pass 23 instead and decrement y
k ^ 6          //     update k (5 -> 3 -> 5 -> ...)
)                //   end of recursive call
:                  // else:
[]               //   stop recursion


## C# (Visual C# Interactive Compiler), 979391 90 bytes

x=>{for(int i=0,d=0,j;++i<24;d=5)for(j=0;++j<24;d^=6)if(i*j%2+(i*j+1)*d%x<1)Print((i,j));}


Saved 6 bytes thanks to @Kevin Cruijssen!

Try it online!

## Python 2, 83 bytes

lambda n:[(x,y)for x in R for y in R if~(x*y)*[5,3][x+y&1]%n<1>x*y%2]
R=range(1,24)


Try it online!

Thanks to Arnauld for saving a byte.