任务 · 算法 中等 Python ·
Shortest path in a maze
The maze is a list of equal-length strings; "." is open and "#" is a wall. Moving one cell up, down, left or right costs one step. Return the fewest steps from the top-left cell to the bottom-right cell, or -1 if it can't be reached (including when either of them is a wall). A 1×1 open maze needs 0 steps. Mazes can be up to 800×800.
函数签名
def maze_steps(grid: list[str]) -> int:示例
maze_steps(['..', '..']) # -> 2
maze_steps(['.#', '#.']) # -> -1
maze_steps(['...#', '##.#', '....', '.##.']) # -> 6另有 6 个隐藏测试和 2 个限时海量数据测试;其输入数据不公开。 任务以英文提示词提供给模型。
第 1 名OpenAI GPT-6.1 Sol已解决 · 通过 11/11 个测试生成耗时 14 秒 · 执行耗时 703 毫秒 · $0.0074 ✓ maze_steps(['..', '..'])预期 2 <1 毫秒 ✓ maze_steps(['.#', '#.'])预期 -1 2 毫秒 ✓ maze_steps(['...#', '##.#', '....', '.##.'])预期 6 <1 毫秒 ✓ 3 毫秒✓ 3 毫秒✓ 4 毫秒✓ 3 毫秒✓ 2 毫秒✓ 6 毫秒⏱ 288 毫秒⏱ 390 毫秒代码
def maze_steps(grid: list[str]) -> int: if not grid or not grid[0]: return -1 h, w = len(grid), len(grid[0]) if grid[0][0] == "#" or grid[-1][-1] == "#": return -1 if h == 1 and w == 1: return 0 stride = w + 2 border = b"#" * stride cells = bytearray(border) for row in grid: cells.extend(b"#") cells.extend(row.encode()) cells.extend(b"#") cells.extend(border) start = stride + 1 target = h * stride + w cells[start] = 35 frontier = [start] distance = 0 while frontier: next_frontier = [] append = next_frontier.append for p in frontier: if p == target: return distance q = p + 1 if cells[q] == 46: cells[q] = 35 append(q) q = p - 1 if cells[q] == 46: cells[q] = 35 append(q) q = p + stride if cells[q] == 46: cells[q] = 35 append(q) q = p - stride if cells[q] == 46: cells[q] = 35 append(q) frontier = next_frontier distance += 1 return -1第 1 名Google Gemini 4 Argon已解决 · 通过 11/11 个测试生成耗时 17 秒 · 执行耗时 721 毫秒 · $0.0052 ✓ maze_steps(['..', '..'])预期 2 3 毫秒 ✓ maze_steps(['.#', '#.'])预期 -1 3 毫秒 ✓ maze_steps(['...#', '##.#', '....', '.##.'])预期 6 1 毫秒 ✓ 2 毫秒✓ 1 毫秒✓ 2 毫秒✓ 3 毫秒✓ 3 毫秒✓ 4 毫秒⏱ 286 毫秒⏱ 413 毫秒代码
def maze_steps(grid: list[str]) -> int: if not grid or not grid[0]: return -1 R = len(grid) C = len(grid[0]) if grid[0][0] == '#' or grid[R - 1][C - 1] == '#': return -1 if R == 1 and C == 1: return 0 W = C + 1 bar = '#' * W flat = bytearray((bar + '#'.join(grid) + '#' + bar).encode('ascii')) start = W target = R * W + C - 1 FLAT_DOT = 46 # ord('.') flat[start] = 35 # ord('#') q = [start] steps = 0 neg_W = -W while q: steps += 1 next_q = [] append = next_q.append for pos in q: p = pos + 1 if flat[p] == FLAT_DOT: if p == target: return steps flat[p] = 35 append(p) p = pos + W if flat[p] == FLAT_DOT: if p == target: return steps flat[p] = 35 append(p) p = pos - 1 if flat[p] == FLAT_DOT: if p == target: return steps flat[p] = 35 append(p) p = pos + neg_W if flat[p] == FLAT_DOT: if p == target: return steps flat[p] = 35 append(p) q = next_q return -1第 3 名Anthropic Claude Haiku 5.5已解决 · 通过 11/11 个测试生成耗时 2.4 秒 · 执行耗时 1.6 秒 · $0.0003 ✓ maze_steps(['..', '..'])预期 2 1 毫秒 ✓ maze_steps(['.#', '#.'])预期 -1 3 毫秒 ✓ maze_steps(['...#', '##.#', '....', '.##.'])预期 6 3 毫秒 ✓ 3 毫秒✓ 2 毫秒✓ 1 毫秒✓ 3 毫秒✓ 1 毫秒✓ <1 毫秒⏱ 691 毫秒⏱ 900 毫秒代码
from collections import deque def maze_steps(grid: list[str]) -> int: if not grid or not grid[0]: return -1 rows = len(grid) cols = len(grid[0]) if grid[0][0] != '.' or grid[rows - 1][cols - 1] != '.': return -1 if rows == 1 and cols == 1: return 0 total = rows * cols dist = [-1] * total dist[0] = 0 queue = deque([0]) target = total - 1 while queue: cur = queue.popleft() r, c = divmod(cur, cols) nd = dist[cur] + 1 # up if r > 0: nxt = cur - cols if dist[nxt] == -1 and grid[r - 1][c] == '.': dist[nxt] = nd if nxt == target: return nd queue.append(nxt) # down if r < rows - 1: nxt = cur + cols if dist[nxt] == -1 and grid[r + 1][c] == '.': dist[nxt] = nd if nxt == target: return nd queue.append(nxt) # left if c > 0: nxt = cur - 1 if dist[nxt] == -1 and grid[r][c - 1] == '.': dist[nxt] = nd if nxt == target: return nd queue.append(nxt) # right if c < cols - 1: nxt = cur + 1 if dist[nxt] == -1 and grid[r][c + 1] == '.': dist[nxt] = nd if nxt == target: return nd queue.append(nxt) return -1第 4 名SpaceXAI Grok 4.7未解决 · 通过 0/11 个测试生成耗时 120 秒 回复中无代码
✗ maze_steps(['..', '..'])预期 2回复中无代码 — ✗ maze_steps(['.#', '#.'])预期 -1回复中无代码 — ✗ maze_steps(['...#', '##.#', '....', '.##.'])预期 6回复中无代码 — ✗ 回复中无代码✗ 回复中无代码✗ 回复中无代码✗ 回复中无代码✗ 回复中无代码✗ 回复中无代码⏱ 回复中无代码⏱ 回复中无代码
Token 成本: $0.01 · 轮次运行与评分规则 →