fix: derive /break timing table from the actual lesson schedule

The old SCHEDULE dict was hand-written for a previous timetable and
never got updated when LESSON_SCHEDULE changed, so Wednesday (day=2)
was left empty ("Сегодня кайфуем дома, перекур не нужен") even though
the new schedule has 4 lessons that day. SCHEDULE is now generated
from the pairs actually present in _LESSON_WEEK plus PAIR_TIMES, so it
can't drift out of sync again.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
zovos 2026-09-02 11:35:10 +00:00
parent 47ef30800f
commit 5b025a7cc9

View file

@ -131,46 +131,45 @@ LESSON_SCHEDULE = {
"lower": _LESSON_WEEK,
}
# SCHEDULE — тайминг перекуров для /break, построен из фактических пар в
# _LESSON_WEEK, а не задаётся руками, чтобы не рассинхронизироваться при
# правках расписания (раньше здесь была отдельная захардкоженная таблица,
# которая не обновилась вместе с LESSON_SCHEDULE и врала на днях с занятиями).
# Каждая пара (95 мин) состоит из двух академ. часов по 45 мин с 5-минутным
# перекуром между ними; между парами перекур — фактический зазор по PAIR_TIMES.
def _time_to_minutes(t: time) -> int:
return t.hour * 60 + t.minute
def _minutes_to_time(m: int) -> time:
return make_time(m // 60, m % 60)
def _build_day_schedule(pairs: list[int]) -> list[tuple[time, time, int | None]]:
entries = []
for idx, pair in enumerate(pairs):
start_t, end_t = PAIR_TIMES[pair]
start_m = _time_to_minutes(start_t)
end_m = _time_to_minutes(end_t)
mid_m = start_m + 45
second_start_m = mid_m + 5
entries.append((start_t, _minutes_to_time(mid_m), 5))
if idx == len(pairs) - 1:
entries.append((_minutes_to_time(second_start_m), end_t, None))
else:
next_start_t, _ = PAIR_TIMES[pairs[idx + 1]]
gap = _time_to_minutes(next_start_t) - end_m
entries.append((_minutes_to_time(second_start_m), end_t, gap))
return entries
def _pairs_for_day(day_lessons: list[dict]) -> list[int]:
return sorted({item["pair"] for item in day_lessons if item.get("pair") is not None})
SCHEDULE = {
0: [ # Понедельник
(make_time(9, 50), make_time(10, 35), 5),
(make_time(10, 40), make_time(11, 25), 30),
(make_time(11, 55), make_time(12, 40), 5),
(make_time(12, 45), make_time(13, 30), 15),
(make_time(13, 45), make_time(14, 30), 5),
(make_time(14, 35), make_time(15, 20), 30),
(make_time(15, 50), make_time(16, 35), 5),
(make_time(16, 40), make_time(17, 25), None),
],
1: [ # Вторник
(make_time(9, 50), make_time(10, 35), 5),
(make_time(10, 40), make_time(11, 25), 30),
(make_time(11, 55), make_time(12, 40), 5),
(make_time(12, 45), make_time(13, 30), 15),
(make_time(13, 45), make_time(14, 30), 5),
(make_time(14, 35), make_time(15, 20), None),
],
2: [], # Среда
3: [ # Четверг
(make_time(8, 0), make_time(8, 45), 5),
(make_time(8, 50), make_time(9, 35), 15),
(make_time(9, 50), make_time(10, 35), 5),
(make_time(10, 40), make_time(11, 25), 30),
(make_time(11, 55), make_time(12, 40), 5),
(make_time(12, 45), make_time(13, 30), 15),
(make_time(13, 45), make_time(14, 30), 5),
(make_time(14, 35), make_time(15, 20), 30),
(make_time(15, 50), make_time(16, 35), 5),
(make_time(16, 40), make_time(17, 25), None),
],
4: [ # Пятница
(make_time(9, 50), make_time(10, 35), 5),
(make_time(10, 40), make_time(11, 25), 30),
(make_time(11, 55), make_time(12, 40), 5),
(make_time(12, 45), make_time(13, 30), 15),
(make_time(13, 45), make_time(14, 30), 5),
(make_time(14, 35), make_time(15, 20), None),
],
day: _build_day_schedule(_pairs_for_day(lessons))
for day, lessons in _LESSON_WEEK.items()
}
# --- Остальное ---