You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

锁屏解锁序列路径距离计算的Python算法实现需求

手机锁屏解锁序列路径距离计算函数实现

任务说明

我有一项训练任务,需编写Python函数计算手机锁屏解锁序列的路径距离。输入为1到9的随机序列,序列中每个数字只能紧跟其在手机锁屏上的相邻数字。

示例

锁屏数字布局如下:

matrix = [[6, 1, 9], [5, 2, 8], [4, 3, 7]]

输入序列:

hits = [9, 8, 1, 2, 3, 4]

该序列的路径总长度为 1 + 1.44 + 1 + 1 + 1。

现有代码问题

你提供的代码片段仅处理了序列前两个元素的情况,且存在索引越界风险、位置查找逻辑繁琐等问题,无法支持任意合法序列的计算。

完整实现方案

以下是完善后的代码,通过建立数字到坐标的映射简化位置查找,遍历整个序列计算总路径距离:

def calculate_lock_path_distance(hits):
    # 建立数字到对应坐标的映射,匹配给定的锁屏布局
    num_to_pos = {
        6: (0, 0),
        1: (0, 1),
        9: (0, 2),
        5: (1, 0),
        2: (1, 1),
        8: (1, 2),
        4: (2, 0),
        3: (2, 1),
        7: (2, 2)
    }
    
    total_distance = 0.0
    # 遍历序列中连续的数字对
    for i in range(1, len(hits)):
        # 获取当前数字和前一个数字的坐标
        prev_pos = num_to_pos[hits[i-1]]
        curr_pos = num_to_pos[hits[i]]
        
        dx = abs(curr_pos[0] - prev_pos[0])
        dy = abs(curr_pos[1] - prev_pos[1])
        
        # 判断距离类型:上下左右相邻(距离1)或对角线相邻(距离1.44)
        if dx + dy == 1:
            total_distance += 1.0
        elif dx == 1 and dy == 1:
            total_distance += 1.44
    
    return total_distance

# 测试示例
hits = [9, 8, 1, 2, 3, 4]
print(calculate_lock_path_distance(hits))  # 输出:5.44

代码说明

  1. 数字坐标映射:用字典直接存储每个数字对应的矩阵坐标,避免每次遍历矩阵查找位置,提升效率。
  2. 遍历序列计算:循环遍历序列中每一对连续数字,计算它们的坐标差。
  3. 距离判断:
    • 若横纵坐标差之和为1,说明是上下或左右相邻,距离加1;
    • 若横纵坐标差均为1,说明是对角线相邻,距离加1.44(与示例中的近似值保持一致)。

内容的提问来源于stack exchange,提问作者Netbek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 11:18:28