在任何可以使用Python环境的地方运行本代码即可。
使用说明:
输入以空格隔开
可以使用任意字符作为标记,但注意保持一致,包括大小写(只能是一个字母或数字)
我没有在程序末尾加上freeze窗口的语句,程序运行完成后就会退出,如有需要自己加上
代码随便拿去抄,使用,优化都行,随你们怎么用,转载也不用at我
def string_replacer(string, idx, char):
return string[:idx] + char + string[idx+1:]
def one_step(inner, outer):
redundant = ['', '', '']
for i in range(3):
if outer[i][0] == outer[i][1]:
if inner[i] == outer[i][0]:
redundant[i] = outer[i]
else:
redundant[i] = outer[i][0]
else:
if inner[i] in outer[i]:
redundant[i] = inner[i]
redundant_sum = [len(x) for x in redundant]
# print(redundant)
# print(redundant_sum)
if sum(redundant_sum) == 0:
return None, outer
if redundant_sum.count(2) == 3:
switch = [inner[0], inner[1], '']
new_outer = [f'{inner[0]}{inner[1]}', f'{inner[0]}{inner[1]}', outer[2]]
return switch, new_outer
elif redundant_sum.count(2) == 1: # must be 2 1 1
idx_2 = redundant_sum.index(2)
switch = ['', '', '']
object_a = inner[idx_2]
object_b = redundant[(idx_2 + 1) % 3]
switch[idx_2] = object_a
switch[(idx_2 + 1) % 3] = object_b
new_outer = outer
# new_outer[idx_2][new_outer[idx_2].index(object_a)] = object_b
new_outer[idx_2] = string_replacer(new_outer[idx_2], new_outer[idx_2].index(object_a), object_b)
# new_outer[(idx_2+1)%3][new_outer[(idx_2+1)%3].index(object_b)] = object_a
new_outer[(idx_2+1)%3] = string_replacer(new_outer[(idx_2+1)%3], new_outer[(idx_2+1)%3].index(object_b), object_a)
return switch, new_outer
else:
# 1 1 1 or 1 1 0
if redundant_sum.count(1) == 3:
switch = [redundant[0], redundant[1], '']
idx0 = outer[0].index(redundant[0])
idx1 = outer[1].index(redundant[1])
new_outer = outer
# new_outer[0][idx0] = redundant[1]
new_outer[0] = string_replacer(new_outer[0], idx0, redundant[1])
# new_outer[1][idx1] = redundant[0]
new_outer[1] = string_replacer(new_outer[1], idx1, redundant[0])
return switch, new_outer
else: # must be 1 1 0
idx_0 = redundant_sum.index(0)
idx_1 = (idx_0 + 1) % 3
object_a = redundant[idx_1]
object_b = redundant[(idx_1+1)%3]
switch = ['', '', '']
switch[idx_1] = object_a
switch[(idx_1+1)%3] = object_b
new_outer = outer
# new_outer[idx_1][new_outer[idx_1].index(object_a)] = object_b
new_outer[idx_1] = string_replacer(new_outer[idx_1], new_outer[idx_1].index(object_a), object_b)
# new_outer[(idx_1+1)%3][new_outer[(idx_1+1)%3].index(object_b)] = object_a
new_outer[(idx_1+1)%3] = string_replacer(new_outer[(idx_1+1)%3], new_outer[(idx_1+1)%3].index(object_b), object_a)
return switch, new_outer
inner = input("内场:").split()
outer = input("外场:").split()
count = 1
while True:
switch, new_outer = one_step(inner, outer)
if switch is None:
break
outer = new_outer
print(f"第{count}轮交换:{switch[0]}\t{switch[1]}\t{switch[2]}")
count += 1 使用效果展示:
