查找两个列表的排序以匹配总和

这是一个关于编码的谜语。我不确定这是否是一个好问题,但我很难找到解决方案。我有两个元组A = (9,2,58,58)B = (57,1,57,8).
有没有办法对列表 B 进行排序,以便 BA 给出所有相同的结果?
答案是Bs = (8,1,57,57)B-A = (-1,-1,-1,-1)
,但我怎么能找到这种排序算法?

回答

您可以按照以下方式处理此问题:

A = (9,2,58,58)
B = (57,1,57,8)

diff = (sum(B) - sum(A)) // len(A)

B_sorted = tuple(x + diff for x in A)
# (8, 1, 57, 57)

# assert sorted(B) == sorted(B_sorted)
# if the assertion fails, no such ordering exists

逻辑:如果你可以从AB通过增加相同数量的diff每一个元素,它必须认为

sum(A) + len(A) * diff = sum(B)

然后使用此公式计算diff并应用加法。


以上是查找两个列表的排序以匹配总和的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>