总共三题算法,分值100',200',300',150分以上通过
第一题:正则表达式
判断系统接收的命令是否合法,由小写字母,a AND b,a OR b, NOT a拼接起来的命令,如a AND b OR c OR NOT d,正确输出为1,错误为0,不允许连续出现NOT
代码用例通过
import sys import re def valid(command): if not re.match(r'^(NOT )?[a-z](( AND | OR )(NOT )?[a-z])*$',command): return False if 'NOT NOT'in command: return False return True def main(): a = sys.stdin.read().strip().split('\n') for command in a: if command: if valid(command): print(1) else: print(0) if __name__ == "__main__": main()
第二题:路径搜索
获取一个n列m行的地图,有S起点,Q终点,#不可走路径,.可走路径组成,每走一步用时t加一,判断能否在t时间内走到,如果成功则输出0,失败输出-1
代码(未测试)
from collections import deque
def can_reach_in_time(grid, start, end, time):
rows, cols = len(grid), len(grid[0])
directions = [(0, 1), (0, -1), (1, 0), (-1, 0)] # 右、左、下、上
queue = deque([(start[0], start[1], 0)]) # (x, y, time)
visited = set()
visited.add((start[0], start[1]))
while queue:
x, y, t = queue.popleft()
if (x, y) == (end[0], end[1]):
return 0 # 成功到达终点
for dx, dy in directions:
nx, ny = x + dx, y + dy
if 0 <= nx < rows and 0 <= ny < cols and grid[nx][ny] != '#' and (nx, ny) not in visited:
if t + 1 <= time and grid[nx][ny] == '.':
queue.append((nx, ny, t + 1))
visited.add((nx, ny))
return -1 # 无法在规定时间内到达终点
# 示例地图
grid = [
['.', '.', '#', '.', '.'],
['.', '#', '.', '.', '.'],
['.', '.', '.', '#', '.'],
['.', '.', '.', '.', 'Q'],
['S', '.', '.', '.', '.']
]
# 起点和终点
start = (4, 0)
end = (3, 4)
# 每走一步的时间
time = 7
# 判断是否能在规定时间内到达终点
result = can_reach_in_time(grid, start, end, time)
print(result)
第三题:字典匹配