挑战
创建一个函数,当给定ASCII技术的输入(指向可能最终循环的路径)时,输出循环的长度(如果有循环的话)和在下面的形式中进入循环的“尾”的长度。
您的输入必须传递给一个函数。下面是一个简单输入的例子。
# --> # --> #
^ |
| |
| v
# <-- #您可以像这样可视化上面的块

“尾巴”是一个项目,而循环是四个长的。
一个更困难的问题是:
# --> # --> #
^ |
| |
| v
# --> # <-- # # --> #
^ ^ |
| | |
| | v
# --> # # <-- # <-- #您必须通过STDOUT或您的语言最接近的替代方案进行输出。
两个输出整数应该是尾的长度和循环的长度。这个输出可以有两种形式。
"2 10"[2, 10]#,只会有一条与自己相距的路径。# --> # --> # --> #
^ ^ |
| | |
| | v
# # <-- # <-- #它的尾长为2,环长为6。下面,将尾和环分开。
# -->
^
|
|
## --> # --> #
^ |
| |
| v
# <-- # <-- #正确的输出是[2, 6]和"2 6"。
如果输入只是一个尾,则循环长度为零。
# --> # --> # --> #
|
|
v
<-- # <-- #以上输入的正确输出是[6, 0]和"6 0"。
发布于 2015-09-28 01:00:06
->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}https://codegolf.stackexchange.com/questions/58178
复制相似问题