首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Code Golf: 流水的问题?

Code Golf: 流水的问题?
EN

Stack Overflow用户
提问于 2018-05-24 05:22:16
回答 2查看 0关注 0票数 0

挑战

按字符计数的最短代码,用于从输入中标识和标记土地的ASCII表示中的水洼。

输入将是一个具有山丘,山谷和平地的景观的ASCII表示。该程序应该模拟如果被淹没的景观将会是什么样子 - 用水(字符x)填充所有山谷。

风景将始终以字符开始和停止,_并且至少有2个字符长度,从而可以实现最短的输入__

一座小山被定义为一个山丘,不应该充满水:

代码语言:javascript
复制
  __
_/  \_

谷被定义为一个凹陷,并将被水充满,直到遇到一个平地。

代码语言:javascript
复制
_    _
 \__/

输入可以被假定为干净的,并且将仅由字符space(),newline(\n),下划线(_)和前斜杠(/和后斜线\)组成。输入可以看作是一条连续的线,并且任何包含模糊行输入的输入如_/_or

代码语言:javascript
复制
_   _
 \_/
 / \

被认为是无效的。

关于水下洞穴,如果洞穴水位高于水位,应保持水位。

测试用例

代码语言:javascript
复制
Input:
    __/\__
          \__              
             \       ___       ___________
             /      /   \_     \_
             \_____/      \__  _/
                             \/
Output:

    __/\__
          \__              
             \       ___       ___________
             /xxxxxx/   \xxxxxx\_
             \xxxxx/      \xxxxx/
                             \/
代码语言:javascript
复制
Input:
                                         __       ___
                                        /  \_____/
                                       / _______
                         ________     /  \     /
                   _____/        \   /__  \    \_
    ____          /               \    /__/   __/
        \_       /                 \     ____/
          \______\                 /____/

Output:
                                         __       ___
                                        /  \xxxxx/
                                       / _______
                         ________     /  \     /
                   _____/        \xxx/__  \xxxx\_
    ____          /               \xxxx/__/xxxxx/
        \xxxxxxxx/                 \xxxxxxxxx/
          \xxxxxx\                 /xxxx/
代码语言:javascript
复制
Input:
                                                      __     _
    _       ____                    ____        _____/  \   /
     \     /    \        __________/    \    __/  ___   /___\
      \___/      \       \               \   \___/  /_
                 /________\               \___________\

Output:
                                                      __     _
    _       ____                    ____        _____/  \xxx/
     \xxxxx/    \xxxxxxxxxxxxxxxxxx/    \xxxxxx/  ___   /xxx\
      \xxx/      \xxxxxxx\               \xxx\___/xx/_
                 /xxxxxxxx\               \xxxxxxxxxxx\

代码计数包括输入/​​输出(即完整程序)。

EN

Stack Overflow用户

发布于 2018-05-24 14:25:47

压缩,但缩进除外:

代码语言:javascript
复制
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 z
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档