问题描述
某特种部队采用了一套性格密码机制来筛选执行特定任务的最佳士兵,该机制的规则如下:
- 每个人的性格可以通过
m
个维度来描述,每个维度分为A, B, C, D, E
五种类型。 - 同一维度内,字母距离越近,性格类型差异越小,匹配程度越高。比如,A 和 B 的差异为
1
,A 和 D 的差异为3
。 - 其中
AE
、BD
、CE
、BE
为不相容性格类型,差异值设为无穷大(无法匹配)。 - 如果某一维度存在不相容性格类型,则表示两个士兵性格完全不匹配。
- 对于符合匹配条件的士兵,差异值总和越小表示匹配程度越高。
现在,有一个重要的机密任务,要求找到最匹配该任务所需性格密码的士兵。你需要编写一个算法,帮助部队找到符合条件的最佳人选。如果有多个最佳人选,请按他们在 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")