Background
In Minesweeper, you will often encounter a horizontal or vertical wall of one's and two's (not yet revealed cells are marked as ?
):
... 1 1 1 1 2 2 2 1 2 1 1 ...
... ? ? ? ? ? ? ? ? ? ? ? ...
... A B C D E F G H ...
It is equivalent to a problem of recovering zeros and ones in a boolean array when only windowed sums of size 3 are given, where a zero means a safe cell and a one means a mine:
A + B + C = 1
B + C + D = 1
C + D + E = 1
D + E + F = 2
E + F + G = 2
F + G + H = 2
...
If you focus on CDEF
, you can logically determine that C
should be zero and F
should be one. If C
were 1, it would mean D + E = 0
, which is impossible due to D + E + F = 2
. (Remember that all variables are booleans.)
Challenge
This challenge is an extension of this problem to arbitrary window size.
Given n
windowed sums with window size k
, recover the n+k-1
boolean cells in the original array as much as possible. It is possible that some cells cannot be determined by the given information; those cells should be marked as such in the output.
The input is the number k
and an array (or any ordered collection) of n
integers between 0 and k
inclusive. The output is an array of zeros, ones, and unknowns, which can be represented as any three distinct values of your choice. You can assume the input is valid, n
and k
are at least 2, and it has at least one corresponding boolean array.
Standard code-golf rules apply. The shortest code in bytes wins.
Test cases
The output format uses ?
for unknown.
k = 2
sums = 0 0
answer = 0 0 0
sums = 0 1 2 1 0
answer = 0 0 1 1 0 0
sums = 1 1 1 1 1 1 1
answer = ? ? ? ? ? ? ? ?
sums = 1 1 1 1 1 1 0 1 1
answer = 0 1 0 1 0 1 0 0 1 0
sums = 1 1 2 1 1 1
answer = 1 0 1 1 0 1 0
---
k = 3
sums = 1 1 1 2 2 2
answer = ? ? 0 ? ? 1 ? ?
sums = 3 2 1 0 1 2 3
answer = 1 1 1 0 0 0 1 1 1
sums = 1 1 1 2 2 2 2 1 1
answer = 1 0 0 1 0 1 1 0 1 0 0
sums = 2 2 2 2 2 2 2 1
answer = 1 ? ? 1 ? ? 1 ? ? 0
sums = 2 1 2
answer = 1 0 1 0 1
---
k = 4
sums = 1 2
answer = 0 ? ? ? 1
sums = 3 2 1
answer = 1 1 ? ? 0 0
sums = 1 1 2 1 1
answer = 0 0 1 0 0 1 0 0
sums = 1 1 2 2 2 3
answer = 0 0 ? ? 0 1 ? ? 1