В общем намалевал я тут кое-что, вроде как правильно, ибо тесты проходят, по следующей задаче:
"Условие
Политическая жизнь одной страны очень оживленная. В стране действует K политических партий, каждая из которых регулярно объявляет национальную забастовку. Дни, когда хотя бы одна из партий объявляет забастовку, при условии, что это не суббота или воскресенье (когда и так никто не работает), наносят большой ущерб экономике страны.
i-я партия объявляет забастовки строго каждые b_i дней, начиная с дня с номером a_i. То есть i-я партия объявляет забастовки в дни a_i, a_i + b_i, a_i + 2 * b_i и т.д. Если в какой-то день несколько партий объявляет забастовку, то это считается одной общенациональной забастовкой.
В календаре страны N дней, пронумерованных, начиная с единицы. Первый день года является понедельником, шестой и седьмой дни года — выходные, неделя состоит из семи дней.
В первой строке даны числа N и K. Далее идет K строк, описывающие графики проведения забастовок. i-я строка содержит числа a_i и b_i. Вам нужно определить число забастовок, произошедших в этой стране в течении года.“
Я думаю тут ни раз всплывало это задание, но мне интересно как можно оптимизировать именно мой ”тяп-ляп" код.
nk, res, output = [int(item) for item in input().split()], set(), set() #Поиск забастовок по шаблону партий def find_riot(month_day_quantity, start_day, step_day, weekend): ret = set() for day in range(1,month_day_quantity +1): if ((day - start_day > 0 and (day - start_day)%step_day == 0) or day == start_day) and day not in weekend: ret.add(day) return ret #Поиск выходных 6 и 7 дней недели for i in range(1,(nk[0]//7)+1): res.add((i*7)-1) res.add(i*7) if (nk[0] % 7) % 6 == 0: res.add(nk[0]-1) for i in range(nk[1]): st = [int(item) for item in input().split()] output |= find_riot(nk[0],st[0],st[1],res) print(len(output))#,output, res, sep='\n')
Входные данные для примера:
19 3
2 3
3 5
9 8