Программа для ЕГЭ 2021 №27, Python

Написал программу для решения 27 номера из примера ЕГЭ. Не могу понять, почему при изменении условия отбора внутри цикла выдает совсем другое число

Задание 27 из примера ЕГЭ

Первоначальный вариант:

File = open('27-B.txt', 'r')

file_read = File.read()
file_list = file_read.split()

file_list = [int(i) for i in file_list]
file_list.pop(0)

res = 0

for i in range(0, len(file_list), 2):
    i1 = file_list[i]
    i2 = file_list[i+1]
      
    if (i1 >= i2) and (((res + i1) % 3) == 0):
        res = res + i1
        
    elif ((res + i2) % 3) == 0:
        res = res + i2

print(res)

File.close()

Изменено elif на if:

File = open('27-B.txt', 'r')

file_read = File.read()
file_list = file_read.split()

file_list = [int(i) for i in file_list]
file_list.pop(0)

res = 0

for i in range(0, len(file_list), 2):
    i1 = file_list[i]
    i2 = file_list[i+1]
      
    if (i1 >= i2) and (((res + i1) % 3) == 0):
        res = res + i1
        
    if (i2 > i1) and (((res + i2) % 3) == 0):
        res = res + i2
            
print(res)

File.close()

Ответы (1 шт):

Автор решения: Zhihar

Правильно ли я понимаю, что решение задачи выглядит вот так:

arr = [(1, 3), (5, 12), (6, 9), (5, 4), (3, 3), (1, 1)]

res = sum(max(obj[0], obj[1]) for obj in arr)

if res % 3 == 0:
    res = res - sorted(abs(obj[1] - obj[0]) for obj in arr if (obj[0] - obj[1]) % 3 != 0)[0]

print(res)

а можно сделать так в лоб:

res = 0
delta = 0

for obj in arr:
    res += obj[1] if obj[1] > obj[0] else obj[0]
    delta = abs(obj[1] - obj[0]) if (delta > abs(obj[1] - obj[0]) or delta == 0) and obj[0] != obj[1] else delta

res = res if res % 3 != 0 else res - delta

print(res)
→ Ссылка