Heatmaps
Consider a rectangular room, on whose ceiling we have a thermal camera pointing downward. In the room, there are some number of heat sources of intensity 1-9
, the background temperature being 0
. The heat dissipates from each source, dropping by one unit per (non-diagonal) step. For example, the 20x10
room
...........1........
....................
...8................
..5...............2.
....................
.1..................
................1...
.................65.
....................
............2.......
contains 9 heat sources, and the temperature gradient shown by the thermal camera is
34565432100100000000
45676543210000000000
56787654321000000110
45676543210000001221
34565432100000012321
23454321000000123432
12343210000001234543
01232100000012345654
00121000000011234543
00010000000121123432
In graphical form this might look like:
From the gradient, we can infer the positions and intensities of some heat sources, but not all. For example, all 9
s can always be inferred, since they have the maximal temperature, and so can the 8
in this case, since it produces a local maximum in the gradient. The 2
near the right border can also be inferred, even though it is not at a local maximum, since it does not have another 2
as a neighbor. The 5
s, on the other hand, are not inferred, since their heat might as well be produced by the more intense sources near them. The 0
s are known to contain no heat sources, but all the other tiles may potentially contain one. Let's denote the uncertain tiles by hyphens -
, certain heat sources by the corresponding digits, and certain empty space by periods .
:
---------..1........
----------..........
---8-------......--.
----------......--2-
---------......-----
--------......------
-------......-------
.-----......-----6--
..---.......--------
...-.......-2-------
Your task shall be to produce this inferred pattern from the temperature gradient.
Rules
You are given the input as a string delimited by either newlines or vertical pipes |
, whichever is more convenient, and the output shall be of the same form. There may be a trailing delimiter in the input and/or output, but no preceding one. The size of the input may vary, but its width and height are always at least 4
. Both functions and full programs are acceptable. The lowest byte count wins, and standard loopholes are forbidden.
Additional Test Cases
Input:
898778765432100
787667654321100
677656543211210
678765432112321
567654321123210
which looks like this in graphical form:
Output:
-9---8-------..
-------------..
--------------.
--8---------3--
-----------3--.
Input:
7898
8787
7676
6565
Output:
--9-
8---
----
----
Input:
00001
00000
00000
10000
Output:
....1
.....
.....
1....