荣耀网安笔试

总共三题算法,分值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)

第三题:字典匹配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值