Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел.
Будем считать две заполненные ячейки соседними, если у них есть общая сторона или угол. У каждой ячейки в углах таблицы — три соседние, у не угловых ячеек в первых и последних строках и столбцах — по пять соседних, у внутренних ячеек таблицы — по восемь соседей.
Назовём ячейку таблицы интересной, если выполняются следующие условия:
— число в данной ячейке больше не встречается в данной строке;
— в соседних ячейках есть хотя бы одно число, меньшее, чем число в данной ячейке.
Определите количество строк таблицы, для которых выполнены следующие условия:
— строка содержит не менее трёх интересных ячеек;
— в строке есть повторяющиеся числа.
Определим максимальное значение в ячейках таблицы.
Для этого введем формулу:
и получим результат 100.
Добавим в начало пустую строку вначале и пустой столбец. В первую строку и в строку после последней, а также в первый столбец и столбец после данных впишем число заведомо большее, чем максимально возможное в ячейке. Таким образом, мы получим, что у всех ячеек будет одинаковое количество соседних.
Найдем, сколько раз числа повторяются в строке. Для этого
=СЧЁТЕСЛИ($B2:$G2;B2)
и скопируем ее на
Определим, является ли ячейка интересной, для этого
=ЕСЛИ(И(I2=1;ИЛИ(A1 < B2;B1 < B2;C1 < B2;C2 < B2;C3 < B2;B3 < B2;A3 < B2;A2 < B2));1;0)
и скопируем ее на
Посчитаем количество интересных ячеек в строке. Для этого
=СУММ(O2:T2)
и скопируем ее на
Проверим, выполняются ли для строки условия задачи. Для этого
=ЕСЛИ(И(СУММ(I2:N2)>6;U2>2);1;0)
и скопируем ее на
Окончательно находим количество искомых строк:
=СУММ(V2:V16001)
и получаем ответ — 2022.
Ответ: 2022.
Приведём решение Артёма Гридина на языке Python.
s = list(map(lambda s: [int(i) for i in s.split(';')], open('09.csv').read().splitlines()))
cnt = 0
for i in range(len(s)-1):
if len(set(s[i])) == len(s[i]):
continue
cnt_interesting = 0
for j in range (0, 6):
if s[i].count(s[i][j]) != 1:
continue
t = False
cell_type = 0
if (i, j) == (0, 0): cell_type = 1
elif (i, j) == (0, 5): cell_type = 2
elif (i, j) == (len(s)-1, 0): cell_type = 3
elif (i, j) == (len(s)-1, 5): cell_type = 4
elif i == 0: cell_type = 5
elif i == len(s)-1: cell_type = 6
elif j == 0: cell_type = 7
elif j == 5: cell_type = 8
shift_data = {0: (-1, 1, -1, 1), 1: (0, 1, 0, 1), 2: (0, 1, -1, 0),
3: (-1, 0, 0, 1), 4:(-1, 0, -1, 0), 5: (0, 1, -1, 1),
6: (-1, 0, -1, 1), 7: (-1, 1, 0, 1), 8: (-1, 1, -1, 0)}
for x in range(shift_data[cell_type][0], shift_data[cell_type][1]+1):
for y in range(shift_data[cell_type][2], shift_data[cell_type][3]+1):
if (x, y) == (0, 0):
continue
if s[i+x][j+y] < s[i][j]:
t = True
break
if t: break
if t: cnt_interesting += 1
if cnt_interesting >= 3:
cnt+=1
print(cnt)
Примечание. Файл требуется сохранить в формате csv.
Приведём решение Анны Ломакиной на языке Python.
f = open('09.csv')
sp = f.readlines()
count = 0
table = [[int(x)for x in st.split(';')] for st in sp]
for i in range(0, len(table)):
if len(set(table[i])) != 6:
interest = 0
for j in range(0, 6):
if table[i].count(table[i][j]) == 1:
flag = False
for Y in range(max(i-1, 0), min(len(table), i+2)):
for X in range(max(j-1, 0), min(6, j+2)):
if table[Y][X] < table[i][j]:
flag = True
if flag:
interest += 1
if interest >= 3:
count += 1
print(count)
Примечание. Файл требуется сохранить в формате csv.
Приведём решение Егора Чернецова на языке Python.
data = [list(map(int, line.split())) for line in open('09.csv')]
print(sum(1 for i, row in enumerate(data) if len(set(row)) < len(row) and
sum(1 for j, val in enumerate(row) if row.count(val) == 1 and
any(data[i+dx][j+dy] < val for dx in (-1,0,1) for dy in (-1,0,1)
if (dx or dy) and 0<=i+dx
Примечание. Файл требуется сохранить в формате csv.

