# 优势洗牌
a = [
12, 24, 8, 32
]
b = [
13, 25, 32, 11
]
# 思路:
# 都排序,然后找出对方最强的,如果我们最强的打不过它,则用最弱的来顶包,
def youshi(nums1, nums2):
# 需要记住 nums2 的顺序
res = [0] * len(nums2)
sorted_nums2 = [(i,k) for i, k in enumerate(nums2)] # i 是存下之前该数 的原位置
sorted_nums2.sort(key=lambda x: x[1], reverse=True)
nums1.sort(reverse=True)
left = 0
right = len(nums2) - 1
print(nums1)
print(sorted_nums2)
for i in range(len(nums2)):
# index, value = i
if nums1[left] > sorted_nums2[i][1]: # 如果大于的话,直接用 把 nums1 上的最大数保存到结果数组的nums2 对应原位置
res[sorted_nums2[i][0]] = nums1[left]
left += 1
else:
res[sorted_nums2[i][0]] = nums1[right] # 如果不行, 则从最右边拿个没有用过的最小的数充数
right -= 1
print(res)
return res
# youshi(a, b)
# 找数
from collections import defaultdict
def solution():
# 思路: 穷举法
def compare(a, b):
# 对比 三位数a 和 b ,返回 几个号码一样,以及几个位置一样
dict_a = defaultdict(int)
dict_b = defaultdict(int)
count_position = 0
for i in range(3):
tmp_a = a % 10
tmp_b = b % 10
if tmp_a == tmp_b: # 统计位置相同
count_position += 1
dict_a[tmp_a] += 1
dict_b[tmp_b] += 1
a //= 10
b //= 10
res = set(dict_a.keys()).intersection(set(dict_b.keys()))
if not res:
return 0, 0
count = 0
for i in res: # 统计几个号码一样
count += min(dict_a[i], dict_b[i])
return count, count_position
# print(compare(883, 288))
# print(compare(215, 246))
# print(compare(6, 246))
res = []
for i in range(0, 1000):
if compare(i, 246) ==(1, 1) and compare(i, 692) == (2, 0) and compare(i, 174) == (0, 0) and compare(i, 419) == (1, 0):
print(i)
res.append(i)
print(res)
solution()