First & CrimsonFang
CrimsonFang CrimsonFang
Всё думала, как круто было бы создать ИИ, который выводил бы разработчика на новый уровень, заставляя осваивать всё подряд. Интересно было бы посмотреть, сможет ли твой запал справиться с моей неутомимостью.
First First
Это смелая идея, но я уже работаю над ИИ, который заставляет навыки прокачиваться в реальном времени – без возможности расслабиться. Если ты готова проверить себя на дисциплину, давай прототипируем что-нибудь, что потребует мгновенного освоения и не оставит места для сомнений.
CrimsonFang CrimsonFang
Готов к безкомпромиссному испытанию? Покажи свой прототип, посмотрим, справится ли он с тем, что не останавливается ни на секунду.
First First
Вот суть: API, который выдает тебе микрозадачи каждые 30 секунд, автоматически проверяет код по скрытым тестам, и если ты допускаешь ошибку – следующее задание блокируется до исправления. Никаких панелей управления, только командная строка и ежедневная таблица лидеров. Попробуй, посмотрим, сможешь ли ты держать темп.
CrimsonFang CrimsonFang
Звучит жестко, но это мне только нравится. Давай, первая задача – кидай, я сразу вкалывать начну. Посмотрим, кто быстрее закончит день.
First First
Задание первое: Напиши функцию на Python `is_palindrome(s)`, которая возвращает True, если строка `s` является палиндромом, игнорируя пробелы, знаки препинания и регистр. Она должна работать за O(n) времени. У тебя 30 секунд. Удачи.
CrimsonFang CrimsonFang
Вот, смотри, версия, которая работает быстро и без лишних затрат памяти. Сложность O(n), и места достаточно, чтобы уместить очищенную строку – вполне хватит на полминуты.
First First
Отлично—чисто и эффективно. Если хочешь сэкономить микросекунды при поиске, просто замени этот набор на кортеж из 256 булевых флагов, проиндексированных по ord, чтобы не создавать набор каждый раз. Готова к заданию номер два? На этот раз кину алгоритм построения графов.
CrimsonFang CrimsonFang
Отличная идея с флагами, это значительно снизит нагрузку. Давай, выкладывай задание с графами, я готова слушать.
First First
Вот следующий: тебе дан список смежности для ориентированного графа (вершины имеют целочисленные индексы, начиная с 0). Напиши функцию `longest_cycle(adj)`, которая возвращает длину самого длинного ориентированного цикла или -1, если циклов нет. Она должна работать за время O(V+E) и использовать O(V) дополнительной памяти. Готова покорить это?
CrimsonFang CrimsonFang
Поняла. Вот DFS за линейное время, которая отслеживает обратные ребра и извлекает самый длинный цикл. ```python def longest_cycle(adj): n = len(adj) color = [0]*n # 0=unseen, 1=visiting, 2=done dist = [0]*n # distance from start of DFS tree best = -1 def dfs(u, d): nonlocal best color[u] = 1 dist[u] = d for v in adj[u]: if color[v] == 0: dfs(v, d+1) elif color[v] == 1: # back‑edge: cycle found cycle_len = dist[u] - dist[v] + 1 if cycle_len > best: best = cycle_len color[u] = 2 for i in range(n): if color[i] == 0: dfs(i, 0) return best ``` Работает за O(V+E) с O(V) дополнительной памяти. Прогони это на свои данные.
First First
Отличная структура, но следи за глубиной рекурсии, если будешь запускать её на графе с 10 тысячами узлов. Итеративный стек поможет избежать ограничений Python. Кинь мне несколько тестовых примеров – особенно граф с длинной цепочкой и маленьким циклом – чтобы я убедился, что твой счётчик правильно определяет самую длинную петлю. Поддержим темп.