按字符计数的最短代码,用于从输入中标识和标记土地的ASCII表示中的水洼。
输入将是一个具有山丘,山谷和平地的景观的ASCII表示。该程序应该模拟如果被淹没的景观将会是什么样子 - 用水(字符x)填充所有山谷。
风景将始终以字符开始和停止,_并且至少有2个字符长度,从而可以实现最短的输入__。
一座小山被定义为一个山丘,不应该充满水:
__
_/ \_
谷被定义为一个凹陷,并将被水充满,直到遇到一个平地。
_ _
\__/
输入可以被假定为干净的,并且将仅由字符space(),newline(\n),下划线(_)和前斜杠(/和后斜线\)组成。输入可以看作是一条连续的线,并且任何包含模糊行输入的输入如_/_or
_ _
\_/
/ \
被认为是无效的。
关于水下洞穴,如果洞穴水位高于水位,应保持水位。
Input:
__/\__
\__
\ ___ ___________
/ / \_ \_
\_____/ \__ _/
\/
Output:
__/\__
\__
\ ___ ___________
/xxxxxx/ \xxxxxx\_
\xxxxx/ \xxxxx/
\/
Input:
__ ___
/ \_____/
/ _______
________ / \ /
_____/ \ /__ \ \_
____ / \ /__/ __/
\_ / \ ____/
\______\ /____/
Output:
__ ___
/ \xxxxx/
/ _______
________ / \ /
_____/ \xxx/__ \xxxx\_
____ / \xxxx/__/xxxxx/
\xxxxxxxx/ \xxxxxxxxx/
\xxxxxx\ /xxxx/
Input:
__ _
_ ____ ____ _____/ \ /
\ / \ __________/ \ __/ ___ /___\
\___/ \ \ \ \___/ /_
/________\ \___________\
Output:
__ _
_ ____ ____ _____/ \xxx/
\xxxxx/ \xxxxxxxxxxxxxxxxxx/ \xxxxxx/ ___ /xxx\
\xxx/ \xxxxxxx\ \xxx\___/xx/_
/xxxxxxxx\ \xxxxxxxxxxx\
代码计数包括输入/输出(即完整程序)。
发布于 2018-05-24 14:25:47
压缩,但缩进除外:
def g i,j,&f
t=[-1,0,1]
t.each{|r|next if@w[i][j,1]=='_'&&r>0
t.each{|c|a=i+r
b=j+c
if a>=0&&b>=0&&a<@r&&b<@c
@t[a]||=[]
if r!=0&&c!=0
k=@w[a][j,1]
l=@w[i][b,1]
next if/[\/\\]/=~k+l&&((k!=l)||((r<=>0)==(c<=>0)?k!='\\': k!='/'))
end
e=@w[a][b,1]
z,@t[a][b]=@t[a][b],1
return 1if !z&&(e==' '||r>=0&&e=='_')&&yield(a,b,f)
end}}
nil
end
w=$stdin.readlines
@c=w.map{|e|e.size}.max-1
@w=w=w.map{|e|e.chomp.ljust@c}
z=w.map{|e|e.dup}
@r=w.size
@r.times{|r|@m=r
@c.times{|c|e=w[r][c,1]
z[r][c]='x'if(e==' '||e=='_')&&(@t=[]
!g(r,c){|u,v,f|u>=@m and v==0||v==@c-1||g(u,v,&f)})&&(@t=[]
g(r,c){|u,v,f|u==0||g(u,v,&f)})}}
puts zhttps://stackoverflow.com/questions/-100003359
复制相似问题