以一个长方形房间为例,在它的天花板上,我们有一个热摄像机朝下。室内有一定数量的强度1-9热源,背景温度为0。热量来自每个源,每一步(非对角线)下降一个单位.例如,20x10房间
...........1........
....................
...8................
..5...............2.
....................
.1..................
................1...
.................65.
....................
............2.......包含9个热源,由热相机显示的温度梯度为
34565432100100000000
45676543210000000000
56787654321000000110
45676543210000001221
34565432100000012321
23454321000000123432
12343210000001234543
01232100000012345654
00121000000011234543
00010000000121123432以图形化的形式,这可能类似于:

从梯度,我们可以推断一些热源的位置和强度,但不是全部。例如,所有的9s都可以被推断,因为它们都有最高的温度,在这种情况下,8也是如此,因为它在梯度中产生了一个局部最大值。在右边边框附近的2也可以推断,即使它不是在局部最大值,因为它没有另一个2作为邻居。另一方面,5s并没有被推断出来,因为他们的热量可能是由他们附近更强烈的来源产生的。众所周知,0s没有热源,但其他所有瓷砖都可能含有一个热源。让我们用连字符-表示不确定的瓷砖,用相应的数字表示某些热源,用周期.表示某些空空间:
---------..1........
----------..........
---8-------......--.
----------......--2-
---------......-----
--------......------
-------......-------
.-----......-----6--
..---.......--------
...-.......-2-------您的任务应该是从温度梯度产生这一推断模式。
您将输入作为字符串,由换行符或垂直管道|分隔,以更方便的方式进行,并且输出应该是相同的形式。输入和/或输出中可能有尾随分隔符,但前面没有。输入的大小可能不同,但它的宽度和高度至少总是4。功能和完整程序都是可以接受的。最低字节数获胜,标准漏洞被禁止。
输入:
898778765432100
787667654321100
677656543211210
678765432112321
567654321123210它以图形形式显示如下:

输出:
-9---8-------..
-------------..
--------------.
--8---------3--
-----------3--.输入:
7898
8787
7676
6565输出:
--9-
8---
----
----输入:
00001
00000
00000
10000输出:
....1
.....
.....
1....发布于 2015-02-18 23:55:07
F=h=>[...h].map((c,i)=>[o=~h.search('\n'),-o,1,-1].some(d=>h[d+i]>c)&c>0?'-':c=='0'?'.':c).join('')Firefox/FireBug控制台中的测试
console.log(F('\
34565432100100000000\n\
45676543210000000000\n\
56787654321000000110\n\
45676543210000001221\n\
34565432100000012321\n\
23454321000000123432\n\
12343210000001234543\n\
01232100000012345654\n\
00121000000011234543\n\
00010000000121123432\n'),'\n\n',
F('\
898778765432100\n\
787667654321100\n\
677656543211210\n\
678765432112321\n\
567654321123210\n'), '\n\n',
F('7898\n8787\n7676\n6565\n'))输出
---------..1........
----------..........
---8-------......--.
----------......--2-
---------......-----
--------......------
-------......-------
.-----......-----6--
..---.......--------
...-.......-2-------
-9---8-------..
-------------..
--------------.
--8---------3--
-----------3--.
--9-
8---
----
----发布于 2015-02-18 18:15:58
('.-',⎕D)[1+(M≠0)+M{(1+⍺)×0≠⍺∧M[J/⍨Z∊⍨J←⍵∘+¨(⌽¨,+)(-,+)⊂0 1]∧.≤⍺}¨Z←⍳⍴M←↑{×⍴⍵:(⊂⍎¨⍵),∇⍞⋄⍬}⍞]示例:
('.-',⎕D)[1+(M≠0)+M{(1+⍺)×0≠⍺∧M[J/⍨Z∊⍨J←⍵∘+¨(⌽¨,+)(-,+)⊂0 1]∧.≤⍺}¨Z←⍳⍴M←↑{×⍴⍵:(⊂⍎¨⍵),∇⍞⋄⍬}⍞]
34565432100100000000
45676543210000000000
56787654321000000110
45676543210000001221
34565432100000012321
23454321000000123432
12343210000001234543
01232100000012345654
00121000000011234543
00010000000121123432
---------..1........
----------..........
---8-------......--.
----------......--2-
---------......-----
--------......------
-------......-------
.-----......-----6--
..---.......--------
...-.......-2-------发布于 2015-02-19 15:02:53
f=->s{
r=s.dup
l=s.index(?\n)+1
(0...s.size).map{|i|
s[i]<?0||r[i]=r[i]<?1??.:[i-1,i+1,i-l,i+l].map{|n|n<0??0:s[n]||?0}.max>r[i]??-:s[i]}
r}没有什么特别之处;只需遍历映射并将当前值与四个邻居的值进行比较。
使用测试在线运行它:http://ideone.com/AQkOSY
https://codegolf.stackexchange.com/questions/46831
复制相似问题