Помогите с объяснением решения задачи
Объясните, пожалуйста, подробно решение этой задачи
Задача "Кинотеатр"
В кинотеатре n рядов по m мест в каждом. В двумерном массиве хранится информация о проданных билетах, число 1 означает, что билет на данное место уже продано, число 0 означает, что место свободно. Поступил запрос на продажу k билетов на соседние места в одном ряду. Определите, можно ли выполнить такой запрос.
Входные данные Программа получает на вход числа n и m. Далее идет n строк, содержащих m чисел (0 или 1), разделенных пробелами. Затем дано число k.
Выходные данные Программа должна вывести номер ряда, в котором есть k подряд идущих свободных мест. Если таких рядов несколько, то выведите номер наименьшего подходящего ряда. Если подходящего ряда нет, выведите число 0.
Выходные данные Программа должна вывести номер ряда, в котором есть k подряд идущих свободных мест. Если таких рядов несколько, то выведите номер наименьшего подходящего ряда. Если подходящего ряда нет, выведите число 0.
Решение которое нужно подробно объяснить:
n, m = map(int, input().split())
rows = [input() for _ in range(n)]
k = int(input())
pat = ' '.join('0' * k)
row = next((i+1 for i, line in enumerate(rows) if pat in line), 0)
print(row)
Ответы (1 шт):
получаем размер кинотеатра
n, m = map(int, input().split())
формируем матрицу заполнения кинотеатра - т.е. список строк, содержащих статусы мест ряда
rows = [input() for _ in range(n)]
получаем кол-во билетов (свободных мест) в ряду
k = int(input())
формируем строку, содержащую статус свободных мест
pat = ' '.join('0' * k)
т.е. для k = 3 будет pat = '0 0 0'
а дальше в сформированных ранее рядах (состояниях мест) ищем встречается ли сформированная нами строка pat
row = next((i+1 for i, line in enumerate(rows) if pat in line), 0)
для этого список рядов превращаем в список кортежей (номер ряда, ряд)
enumerate(rows)
и проверяем входит ли в ряд (строку) сформированные пустые места (строка)
if pat in line
на выходе у нам получается список номеров рядов (начиная с 1, для чего делается i + 1 ибо счет рядов идёт с 0)
ну и на выходе выбираем первый найденный ряд
