В файле электронной таблицы в каждой строке записаны шесть натуральных...
Задание
В файле электронной таблицы в каждой строке записаны шесть натуральных чисел. Определите количество строк таблицы, для которых выполнены оба условия:
- в строке только одно число повторяется трижды, остальные числа различны;
- куб повторяющегося числа строки меньше произведения всех её неповторяющихся чисел.
В ответе запишите только число.
Решение
for line in open('9.csv'):
nums = [int(x) for x in line.split(';')]
n3 = {x for x in nums if nums.count(x) == 3}
n1 = [x for x in nums if nums.count(x) == 1]
p = 1
for x in n1:
p *= x
q += len(n3) == 1 and len(n1) == 3 and n3.pop()**3 < p
print(q)
Разбор кода. Файл 9.csv читается построчно, каждая строка разбивается по точке с запятой и превращается в список из шести чисел. Затем формируются два набора: n3 — множество чисел, которые встречаются в строке ровно три раза, и n1 — список чисел, которые встречаются ровно один раз.
Если первое условие выполнено, то в строке есть ровно одно число, повторяющееся трижды (значит, len(n3) == 1), и ровно три неповторяющихся числа (len(n1) == 3). Оставшиеся позиции автоматически заняты тройным повтором одного числа, поэтому других вариантов нет. Далее вычисляется произведение p всех неповторяющихся чисел и проверяется второе условие: n3.pop()**3 < p, то есть куб повторяющегося числа должен быть строго меньше этого произведения.
Ключевой момент: выражение q += условие1 and условие2 and условие3 использует то, что в Python True равно 1, а False равно 0. Поэтому счётчик увеличивается ровно тогда, когда истинны все три части. Метод n3.pop() извлекает единственный элемент множества — он корректен, потому что перед этим мы уже проверили len(n3) == 1.
Ответ: 179