Кубок CTF России

Разбор: Snake с отбора X Кубка CTF

Условие: misc с меткой beginner, задача без раздатки. Змейка на шестиугольном поле со стороной 5 клеток, всего 61 клетка. Ходы идут по websocket, таймера нет: змейка двигается только по сообщению. По таблице организаторов задание решили 580 раз.

Что требуется

Сервер присылает флаг, когда длина змейки достигает 61, то есть змейка занимает всё поле. Еда появляется в случайной свободной клетке, ошибаться нельзя.

Ход решения

  • Прочитать протокол: сообщение с направлением 0–5, в ответ полное состояние
  • Построить гамильтонов цикл через все 61 клетку
  • Вести голову по циклу: так змейка не врежется в себя
  • Срезать вперёд по циклу, пока тело лежит на дуге позади головы
  • Не перепрыгивать еду при срезе

Что вынести

Если таймера нет, задача сводится к надёжному плану, а не к реакции. Срезы дали примерно тысячу ходов вместо нескольких тысяч.

Пример

Пример условный. Один участник команды рисует цикл на бумаге, второй в это время пишет клиент для websocket. Встречаются на первом полном прогоне.

Чек-лист

  • ☐ Протокол снят из браузера
  • ☐ Цикл проверен на всех клетках
  • ☐ Бот ведёт журнал ходов
  • ☐ Приём записан в разбор команды

Документ уже составлен

Открыть «Разбор задачи для команды CTF» →

Основание: условие и решение авторов задачи, репозиторий acisoru/ctfcup2026-quals, misc/snake. Канал не принадлежит организаторам; официальный сайт — ctfcup.ru.

Первоисточник