Задание №9 — Обработка числовой информации
#69253Задание №9ФИПИ
Электронные таблицы
Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел. Определите количество строк таблицы, содержащих числа, для которых выполнены оба условия:
– в строке только одно число повторяется ровно два раза, остальные числа различны;
– среднее арифметическое неповторяющихся чисел строки не больше суммы повторяющихся чисел.
В ответе запишите только число.
Правильный ответ
2241
Пояснение
Решение:
В файле 6400 строк, в каждой шесть натуральных чисел. Строка подходит, если выполнены оба условия:
- ровно одно значение встречается в строке ровно два раза, а остальные четыре числа попарно различны — то есть среди шести чисел ровно одно «двойное» и ровно четыре «одиночных»;
- среднее арифметическое четырёх неповторяющихся чисел не превосходит суммы повторяющихся чисел; повторяющееся число стоит дважды, поэтому их сумма равна .
Проще всего перебрать строки программой, подсчитывая, сколько раз встречается каждое число (класс Counter):
import csv
from collections import Counter
count = 0
for row in csv.reader(open('data.csv'), delimiter=';'):
nums = [int(x) for x in row]
c = Counter(nums)
twice = [v for v, k in c.items() if k == 2] # значения, встречающиеся 2 раза
once = [v for v, k in c.items() if k == 1] # значения, встречающиеся 1 раз
if len(twice) == 1 and len(once) == 4:
if sum(once) / 4 <= 2 * twice[0]:
count += 1
print(count) # 2241
Условие len(twice) == 1 and len(once) == 4 как раз и означает «ровно одно число повторяется ровно два раза, остальные различны»: оно отбрасывает строки, где какое-то число встречается три и более раз или где повторяющихся пар несколько.
Программа находит 2241 подходящую строку.
Ответ: 2241