或者也许这不是真正的迷宫,但仍然是。
规则:
*、1、x和X组成.那根绳子是个迷宫。这两条线的长度相等。您可以将输入作为带有, (逗号)或这两行之间的任何方便分隔符的字符串。或者,您可以将这两行作为函数的单独参数。* -没什么。你只是正常地踩在上面。x --一旦你踩到了它,就切换线路,但从一开始就保持在相同的水平距离上。例如,您踩到了较高行的第三个位置,并在这里遇到了一个小写x。然后你立即移动到较低的线,但再次在第三个位置。X -切换线路并转到下一个位置.这里的例子是一样的,但您也从第三个位置移动到第四个位置(因此,您位于第四位置的第二行)。1 --只要换个位置就行了。一旦每个字符完成了它的工作,它就被替换为一个空格,不再“工作”。
下面是一些例子。
x上,这封信将您切换到第二行。字母x不再充当x,而是替换为*。在后一个例子中,这将更有意义。你现在在底线上的星号上,它对你没有任何影响。第二步是向前移动,然后退出字符串,这样迷宫就完成了,它采取了两个步骤。输出2。x上移动,它将您移动到下一行的x上。这里有这样的规则,即用星号代替使用的字符。然后移回第一行,但它不再是x,因为它已经被使用并成为星号。因此,您在这个星号上安全地移动,步骤就完成了(您现在位于第一行的第一个位置)。第二步:你在X上移动,它把你推到下线,然后把你向前推。您现在居住在第二行的第三个位置(星号),从未访问过第二个位置(其中包含1)。第三步:向前移动,退出字符串。输出:3。测试用例:
3。(因为1会让你跳到第三个位置)。在那里,您永远不会访问第二行,但它是输入的一部分。4。3。6。6。发布于 2016-07-12 05:19:47
A^
\1r|\xud|\Xaa7},(\*|\xud=\x)r},扩大:
{
{
\1 r |
\x ud |
\X aa7
},
(\* | \x ud =\x)
r
},对于采取N步的路径,程序为每遍历0步、1步、.、N-1步骤找到一次成功匹配。
发布于 2016-07-12 11:02:48
l=>{z=-~l.search`
`,l=[...l+' '];for(n=p=0;(c=l[p%=2*z])>' ';p+=c>'X'?z:c>'1'?z+1:c>'0'?1:(++n,1))l[p]='*';return-~n}少镀金
l=>{
z=1+l.search`\n`;
l=[...l+' '];
for( n = p = 0;
(c=l[p%=2*z])>' ';
p += c>'X' ? z : c>'1' ? z+1 : c>'0'? 1 : (++n,1) )
l[p] = '*';
return 1+n
}f=l=>{z=-~l.search`
`,l=[...l+' '];for(n=p=0;(c=l[p%=2*z])>' ';p+=c>'X'?z:c>'1'?z+1:c>'0'?1:(++n,1))l[p]='*';return-~n}
[['x\n*',2]
,['xX*\nx1*',3]
,['*1*\nxxx',3]
,['*X*1*x\nx*1xx*',4]
,['1x1x\n***X',3]
,['1*x1xxx1*x\nx*x1*11X1x',6]
,['xXXXxxx111*\n**xxx11*xxx',6]
].forEach(t=>{
var i=t[0],k=t[1],r=f(i)
console.log('Test result '+r+(r==k?' OK ':' KO (expected '+k+')')+'\n'+i)
}) 发布于 2016-07-13 09:50:52
DECLARE @i VARCHAR(99)=
'xXXXxxx111*'+CHAR(13)+CHAR(10)+
'**xxx11*xxx'
,@t BIT=0,@c INT=1,@ INT=1WHILE @<LEN(@i)/2SELECT @t-=IIF(a like'[1*]'or'xx'=a+b,0,1),@c+=IIF(a='*'or'xx'=a+b,1,0),@+=IIF(a='x'and'x'>b,0,1)FROM(SELECT SUBSTRING(d,@t*c+@,1)a,SUBSTRING(d,(1-@t)*c+@,1)b FROM(SELECT LEN(@i)/2+1c,REPLACE(@i,'X','q'COLLATE thai_bin)d)x)x PRINT @cDECLARE @i VARCHAR(99)=
'xXXXxxx111*'+CHAR(13)+CHAR(10)+
'**xxx11*xxx'
,@t BIT=0,@c INT=1,@ INT=1
WHILE @<LEN(@i)/2
SELECT
@t-=IIF(a like'[1*]'or'xx'=a+b,0,1),
@c+=IIF(a='*'or'xx'=a+b,1,0),
@ +=IIF(a='x'and'x'>b,0,1)
FROM
(
SELECT
SUBSTRING(d,@t*c+@,1)a,
SUBSTRING(d,(1-@t)*c+@,1)b
FROM
(SELECT LEN(@i)/2+1c,REPLACE(@i,'X','q'COLLATE thai_bin)d)x
)x
PRINT @chttps://codegolf.stackexchange.com/questions/85186
复制相似问题