在一个环形方格网 (您可以环绕),其中每个单元格指示一个方向(^
>
v
<
),如果我们选择一个单元格并开始沿着这些方向行走,我们最终会陷入一个循环。
我们可能会以不同的循环结束,这取决于我们的起始单元。
并不是我们遇到的所有细胞都构成了我们的终端回路:这些细胞据说是该回路的支流。
给定正方形网格配置,计算每个循环L_i:
您可以选择由4个可打印字符或整数组成的集合作为方向。
这对可以按任何顺序排列。
输入urdrurllruuuulrududllurdu
-vivid颜色:循环
-pale颜色:支流
在这种结构中,有3个环形(橙色,蓝色,绿色)的长度(2,2,6)和(0,10,5)支流细胞。
输出6 5 2 10 2 0
Alternative inputs:
1232124421111421313441231
[[^,>,v,>,^],[>,<,<,>,^],[^,^,^,<,>],[^,v,^,v,<],[<,^,>,v,^]]
Valid outputs:
2 10 2 0 6 5
(2, 10), (6, 5), (2, 0)
Non valid outputs:
10 2 2 0 6 5
(0, 2), (10, 2), (6, 5)
这是密码-高尔夫,所以最短的代码获胜。
发布于 2020-05-13 20:14:37
发布于 2020-05-14 05:00:47
m=>m[Q='flatMap'](U=(y,I)=>y[Q]((x,j)=>U[T=[...m+0,Y=m.length,i=I][Q](_=>0+[j=(c=m[i][j]-2,j+Y-~c%2)%Y,i=(i+Y+c%2)%Y])[k=0,Q](S=c=>(S[c]=-~S[c])==2&&++k&&c).sort()]?(++U[T][0],[]):[U[T]=[1-k,k]]))
m=>m[Q='flatMap'](U=(y,I)=>y[Q]((x,j)=>U[T=[...m+0,Y=m[W='length'],X=m[W],i=I][Q](_=>0+[j=(c=m[i][j]-2,j+Y-~c%2)%Y,i=(i+Y+c%2)%Y]).sort().filter(S=c=>(S[c]=-~S[c])==2)]?(++U[T][1],[]):[U[T]=[k=T[W],1-k]]))
Ungolfed版本
m=>m.flatMap(
U=(y,I)=>y.flatMap(
(x,j)=>
U[
T=[...m+0,Y=m.length,X=y.length,i=I].map(_=>(
c=m[i][j],c%2?(i=(i+Y-2+c)%Y):(j=(j+X-1+c)%X),
i*X+j
)).sort().filter((c,k,S)=>S[k-1]!=c&S[k+1]==c)
]?(++U[T][1],[]):[U[T]=[k=T.length,1-k]]
)
)
https://codegolf.stackexchange.com/questions/204694
复制相似问题