箭迷宫逃生


14

您有一个50 x 50的字符数组。每个单元格都有一个箭头,指向四个方向中的任何一个。没有单元格为空。输入单元格时,必须按箭头指定的方向退出它。箭头也可能指向您来自的方向,从而导致死角。

您可以从迷宫最外边界的任何单元开始,找到一条进入迷宫的路径,并导致您从其他某个单元退出。输入将以包含<,>,^和v的数组的形式给出。输出将是一位数字(布尔值,整数或字符,将执行任何操作),其值为0(表明该任务是不可能的)或1(表明您拥有完成了任务)。

示例(实际数组将大于此)

^ v < >
> < v <
v > v ^

输出将是

1个
因为您可以从右侧的<输入,这将导致您通过路径“ <v v”从底部v退出

任务是编写最短的代码,将迷宫作为输入,并确定规则中指定的路径,并输出一位数字0或1

也允许输出TRUE和FALSE而不是实际数字。


6
可以使用一些实际的测试用例
Liam

输入是一维数组还是二维数组?并且只能在<前面输入,还是在^上输入?
bobbel

@bobbel输入可以以一维或二维数组的形式给出,较短的代码所需。如果可以缩短代码,甚至可以将箭头输入为1 2 3 4而不是<> ^ v。是的,您也可以通过^输入。
ghosts_in_the_code 2015年

1
50 x 50的随机数组不具有求解的可能性大约为0。如果您要求求解至少具有一定数量的步骤,或者用户指定了求解路径,则更好。
DavidC

1
这应该被称为“箭头逃生” ...仍在思考解决方案。
烧杯

Answers:


6

CJam,89 81字节

q~"><v^":A2/{f{\*}z}/sA[1W52-52]er:T,,{[52md]51f%0e=1=},:E{[2704{__T=+}*]\-E&},,g

CJam解释器中在线尝试。

怎么运行的

q~        e# Read and evaluate all input. This pushes an array of strings.
"><v^":A  e# Push that string and save it in A.
2/        e# Split it into ["><" "v^"].
{         e# For each chunk:
  f{      e#   For each input string, push the string and the chunk; then:
    \*    e#     Join the chunk, using the string as separator.
  }       e#
  z       e#   Transpose rows and columns.
}/        e#
s         e# Flatten the resulting array of strings.
A         e# Push "><v^".
[1W52-52] e# Push [1 -1 52 -52].
er        e# Perform transliteration.
:T        e# Save the result in T.
,,        e# Push [0 ... 2703].
{         e# Filter; for each integer I in [0 ... 2703]:
  [52md]  e#   Push [I/52 I%52].
  51f%    e#   Take both integers modulo 51 to map 51 to 0.
  0e=     e#   Count the number of resulting zeroes.
  1=      e#   Check if the count is 1.
},        e# If it is, keep I.
:E        e# Save the filtered array in E.
{         e# For each integer I in E:
  [2704{  e#   Do 2704 times:
    __    e#     Push two copies of the integer on the stack.
    T=    e#     Select the corresponding element from T.
    +     e#     Add it to the first copy.
  }*]     e#   Collect all results in an array.
  \-      e#   Remove I from that array.
  E&      e#   Intersect with E.
},        e# If the intersection is non-empty, keep the integer.
,g        e# Push the sign of the length of the filtered array.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.