【命运2 终焉之形】救赎边缘老四自动化解题(外场)Python版代码
EricJustinger
2024年06月11日 13:08

在任何可以使用Python环境的地方运行本代码即可。

使用说明:

  1. 输入以空格隔开

  2. 可以使用任意字符作为标记,但注意保持一致,包括大小写(只能是一个字母或数字)

  3. 我没有在程序末尾加上freeze窗口的语句,程序运行完成后就会退出,如有需要自己加上

  4. 代码随便拿去抄,使用,优化都行,随你们怎么用,转载也不用at我

代码块
Python
自动换行
复制代码
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
复制成功

使用效果展示: