8. Интеграция и пробный тур
Занятия 10–12. Слепые задачи, пробный тур, пост-разбор
Занятие 10. Слепые задачи: метод разбора за 10 минут
Цель занятия: обучающиеся раскладывают незнакомую мини-задачу на «ввод → обработка → вывод», находят её компетенцию и таблицу баллов и оценивают риски попытки.
Разминка: кумулятивный квиз (10 мин, занятия 2–9)
- Медиана показаний {14, 15, 14, 90, 15} — чему равна и почему 90 не мешает?
- Порог отражения при W=78, B=12?
- Стрелка на 135°, шкала из 8 секторов — цифра?
- (A + B/4)·A при A=4, B=2?
- −6 // 4 и int(−6/4)?
- Таблица (B И A) ИЛИ НЕ A: строка, где результат 0?
- Что делает Задание 4 при n=0?
- Три события, оплачиваемые по 5 баллов независимо от вычислений?
Разбор (worked example): протокол разбора незнакомой задачи
На турнире вы получите условие впервые. Метод — таблица разбора, заполняется до открытия среды программирования:
| Вопрос | Ответ по условию |
|---|---|
| Ввод: чем и что вводится? | датчик/карточки/энкодер/кнопки/ГСЧ; диапазон; кто командует |
| Обработка: формула/свойство/логика? | выписать со скобками; отметить / vs //; особый случай (ноль?) |
| Вывод: канал и формат? | экран/консоль/цвет/звук/стрелка; 0/1 или ДА/НЕТ; сколько секунд держать |
| Протокол: перезапуск? попытки? порядок событий? | из условия и общих правил (2 попытки, лучшая в зачёт) |
| Таблица баллов: где «дешёвые» баллы? | выводы введённых значений — забрать даже при сомнении в формуле |
| Риски | калибровка, дребезг, ноль, единицы измерения, формат |
Меню задач (регламент разрешает одну программу с запуском по кнопке): держите заготовку — левая кнопка листает номер задачи на экране, правая запускает выбранную. Это экономит минуты на перезаливке между сдачами.
from hub import button, light_matrix
import runloop
async def wait_press(b):
while not button.pressed(b):
await runloop.sleep_ms(10)
while button.pressed(b):
await runloop.sleep_ms(10)
async def zadacha_1(): ... # сюда встают решения дня
async def zadacha_2(): ...
async def zadacha_3(): ...
ZADACHI = [zadacha_1, zadacha_2, zadacha_3]
async def main():
i = 0
while True:
await light_matrix.write(str(i + 1))
if button.pressed(button.LEFT):
await wait_press(button.LEFT)
i = (i + 1) % len(ZADACHI)
if button.pressed(button.RIGHT):
await wait_press(button.RIGHT)
await ZADACHI[i]()
await runloop.sleep_ms(50)
runloop.run(main())Практика: три слепые задачи
Наставник выдаёт условия, собранные из компетенций (не совпадающие с Заданиями 1–4 дословно), например: «объект в одной из 4 зон → номер зоны звуком: N коротких сигналов»; «ввести A кнопками (счёт нажатий), B — карточками; вывести ДА, если A·B делится на 3»; «ГСЧ 1–20; чётное — стрелка на “+”, нечётное — на “−”; вывести A % 4 на экран». Для каждой — таблица разбора за 10 минут (проверяется до кода), затем одна задача по выбору доводится до сдачи на время (30 минут).
Мини-проверка выхода
Три таблицы разбора без пропущенных строк; одна задача сдана партнёру-судье в лимит.
Занятие 11. Пробный тур
Цель занятия: обучающиеся сдают 4 мини-задачи по протоколу турнира. Итоговое оценивание модуля.
Регламент тура (условия, приближенные к реальным)
Выдача заданий
Утро тура: пакет из 4 мини-задач выдаётся всем одновременно. Состав собирается наставником из компетенций 1–6 заново (Задания 1–4 Приложения 1 можно использовать как одну-две задачи из четырёх, остальные — новые). Поля, стенка, призма, карточки — по Приложениям 1–2.
Подготовка
Ограниченное время на разбор, программирование и калибровку на рабочем месте (рекомендация: 2–2,5 часа, уточняется по положению конкретного турнира). Наставник не консультирует — только отвечает на вопросы о процедуре, как судья.
Сдача
Каждая мини-задача сдаётся отдельно, в любом порядке, 2 попытки, в зачёт лучшая. Судья ведёт протокол по таблицам баллов регламента; события фиксируются в порядке условия.
Фиксация
По каждой попытке — строка протокола: задача, попытка, событие → получено/потеряно баллов, причина потери (калибровка / протокол / формула / формат / конструкция).
Оценка модуля: баллы регламента + тренировочная рубрика сдачи (см. главную страницу). 12+ из 16 по рубрике и ≥70% суммы баллов тура — готовность подтверждена; иначе занятие 12 фокусируется на западающих задачах.
Чек-лист дня турнира (собрать с вечера)
- Устройство в сборе + запасные крепления датчиков и детали для шкалы/стрелки (компетенция 7: могут попросить дверь, шлагбаум, крышку — берите балки, оси, картон, скотч, ножницы);
- Ноутбук заряжен, среда открывается офлайн, кабель + запасной;
- Хаб заряжен на 100%, зарядка с собой;
- Шаблоны в среде:
median_sm,refl_median,wait_press,encoder_digit,show5, меню задач; - Свои поля и игровые элементы для тренировки в зоне ожидания;
- Ритуалы на месте: калибровка отражения; совмещение нулевой метки мотора и шкалы; проверка
-1датчика расстояния; - Правило попыток: первая попытка — только после полного прогона у себя на столе; «дешёвые» баллы (вывод введённых значений) забираем даже при сомнении в формуле.
Занятие 12. Пост-разбор и доводка
Цель занятия: обучающиеся находят причину каждой потери баллов на туре и чинят решение.
Разминка-вспоминание (5 мин)
Три вопроса наставника строятся из реальных потерь тура (например: «команда X потеряла 10 баллов на втором сравнении Задания 1 — назовите две возможные причины»).
Основная активность: таблица «ошибка → причина → исправление»
Каждая команда по своему протоколу тура: (1) выписывает каждую потерянную строку баллов; (2) классифицирует причину — калибровка / протокол сдачи / формула-типы / формат вывода / конструкция / стресс-тайминг; (3) чинит код или процедуру; (4) пересдаёт слабую задачу наставнику-судье. Групповой итог — топ-3 причины потерь группы → они уходят в раздел «Данные и итерация» модуля.
Рефлексия (завершение по Такману)
Каждый участник письменно: что на туре сработало из тренировочных ритуалов; что буду делать иначе в первый час реального турнира; какая компетенция всё ещё «жёлтая». Наставник переводит «жёлтые» компетенции в план самоподготовки до даты турнира: по одной мини-задаче в неделю из соответствующего раздела модуля.