首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环、循环和循环

循环、循环和循环
EN

Code Golf用户
提问于 2015-09-17 20:57:03
回答 1查看 712关注 0票数 16

挑战

创建一个函数,当给定ASCII技术的输入(指向可能最终循环的路径)时,输出循环的长度(如果有循环的话)和在下面的形式中进入循环的“尾”的长度。

输入

您的输入必须传递给一个函数。下面是一个简单输入的例子。

代码语言:javascript
运行
复制
# --> # --> #
      ^     |
      |     |
      |     v
      # <-- #

您可以像这样可视化上面的块

“尾巴”是一个项目,而循环是四个长的。

一个更困难的问题是:

代码语言:javascript
运行
复制
            # --> # --> #
            ^           |
            |           |
            |           v
      # --> # <-- #     # --> #
      ^           ^           |
      |           |           |
      |           |           v
# --> #           # <-- # <-- #

输出

您必须通过STDOUT或您的语言最接近的替代方案进行输出。

两个输出整数应该是尾的长度和循环的长度。这个输出可以有两种形式。

  1. 空格分隔的字符串:"2 10"
  2. 整数数组:[2, 10]

规则

  • 每个块,即#,只会有一条与自己相距的路径。
  • 每一个箭头都是两个线段和一个头。
  • 起始块将始终位于最左边的列中。
  • 输入永远不会只是一个循环。

示例

代码语言:javascript
运行
复制
# --> # --> # --> #
^     ^           |
|     |           |
|     |           v
#     # <-- # <-- #

它的尾长为2,环长为6。下面,将尾和环分开。

尾部

代码语言:javascript
运行
复制
# -->
^
|
|
#

代码语言:javascript
运行
复制
# --> # --> #
^           |
|           |
|           v
# <-- # <-- #

正确的输出是[2, 6]"2 6"

如果输入只是一个尾,则循环长度为零。

代码语言:javascript
运行
复制
# --> # --> # --> #
                  |
                  |
                  v
        <-- # <-- #

以上输入的正确输出是[6, 0]"6 0"

EN

回答 1

Code Golf用户

发布于 2015-09-28 01:00:06

Ruby,276

代码语言:javascript
运行
复制
->s{a=k=w=s.index(r='
')*2+2
s=r*w+s+r*w
(s.size).times{|i|s[i,2]=='
#'&&(s[3+j=i+1]+s[j+w]+s[j-w]).strip.size<2&&(a=[j]
d=0
loop{("|-|-"[d])+?#=~/#{s[k=j+[-w,3,w,-3][d]]}/?(a.include?(k)&&break;a<<(j=k);d-=1):d=(d+1)%4}
)}
u=a.size
v=a.index(k)
t=(u-v)/4*2
print u/2-t," ",t}
票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/58178

复制
相关文章

相似问题

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