Python-100:最佳人选

问题描述

某特种部队采用了一套性格密码机制来筛选执行特定任务的最佳士兵,该机制的规则如下:

  1. 每个人的性格可以通过 m 个维度来描述,每个维度分为 A, B, C, D, E 五种类型。
  2. 同一维度内,字母距离越近,性格类型差异越小,匹配程度越高。比如,A 和 B 的差异为 1,A 和 D 的差异为 3
  3. 其中 AEBDCEBE 为不相容性格类型,差异值设为无穷大(无法匹配)。
  4. 如果某一维度存在不相容性格类型,则表示两个士兵性格完全不匹配。
  5. 对于符合匹配条件的士兵,差异值总和越小表示匹配程度越高。

现在,有一个重要的机密任务,要求找到最匹配该任务所需性格密码的士兵。你需要编写一个算法,帮助部队找到符合条件的最佳人选。如果有多个最佳人选,请按他们在 array 中出现的顺序,用空格隔开返回答案。

  • m 表示性格密码的维度。
  • n 表示备选特种兵的数量。
  • target 是代表任务的性格密码。
  • array 是一个包含 n 个元素的列表,每个元素为 m 位的性格密码。

代码

 

def solution(m, n, target, array):

    # Edit your code here

    assert m == len(target) == len(array[0])

    assert n == len(array)

    def get_diff_value(a: str, b: str, m: int) -> int:

        sum_diff = 0

        x = "AEBDCEBE"

        for i in range(m):

            for j in range(0, 8, 2):

                if (a[i] == x[j] and b[i] == x[j + 1]) or (a[i] == x[j + 1] and b[i] == x[j]):

                    return -1

            sum_diff += abs(ord(a[i]) - ord(b[i]))

        return sum_diff

    min_value = float('inf')

    b_value = []

    for i in range(n):

        diff_value = get_diff_value(target, array[i], m)

        b_value.append(diff_value)

        if diff_value != -1:

            min_value = min(min_value, diff_value)

    if min_value == float('inf'):

        return "None"

    else:

        ans = []

        for i in range(n):

            if b_value[i] == min_value:

                ans.append(array[i])

        return " ".join(ans)


 

if __name__ == "__main__":

    # Add your test cases here

    matrix = [

        "AAAAAA", "BBBBBB", "ABDDEB"

    ]

    print(solution(6, 3, "ABCDEA", matrix) == "ABDDEB")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

完成大叔

你的鼓励是创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值