Comments 27
Если честно, несмотря на то, что организаторы не защитились от трюка со второй почтой и передачи задач между знакомыми, публиковать задачи с решениями в настолько массовом доступе до окончания отбора не кажется правильным.
Что же касается результатов, они довольно ожидаемы, возможно, в ближайшие месяцы алгоритмические собеседования и отборы в компаниях будут как-то пересмотрены (а может и не везде, ведь собеседования вживую и предложения порассуждать над задачей и/или кодом вслух никто не отменял)
Это просто первый этап. Если на сайт зайти, то там ещё гора условий. Например, то же интервью
Интервью
Пригласим тех, кто заполнил анкету и успешно сдал экзамен. Интервью продлится 40—60 минут.
Решите задачи по вашему треку. Расскажите о мотивации, продемонстрируйте навыки командной работы и другие софт-скиллы
Это все понятно, и в теории от этого в списывании генерации решений должно стать меньше смысла, а на практике - не уверена. Сколько тех, кто до поста не знал о стипендии или думал, что точно не пройдет отбор, а теперь пойдет засылать эти решения "на авось" и, быть может, сместит проходные на следующий этап [который пройти не сможет, в отличие от многих из тех, кто сам решил все задачи, кроме 1-2]?
Отслеживание такого фрода - в целом забота организаторов конкурса, но все равно, через 10 дней эта статья смотрелась бы гораздо лучше, не вызывая подобных этических вопросов :)
в ближайшие месяцы алгоритмические собеседования и отборы в компаниях будут как-то пересмотрены
Но ведь и неалгоритмические вопросы вполне могут быть решены этим чатом, даже с более высоким процентом успеха, чем алгоритмические.
Боюсь, очень скоро к чату прикрутят распознавалку речи (+ граббинг содержимого из текстового поля всяких там codeinterview.io), и вот тогда на онлайн-собесах начнется полная вакханалия. Придется возвращать старые добрые собесы вживую. У меня последний такой был летом 2019, и, по правде, немного скучаю по тем временам..
Мне регулярно приходится собеседовать народ на работе и лично я уже давно ушел от практики "напиши мне код который делает то-то"'. Считаю это бессмысленным по многим причинам. Мне важнее понять, способен ли кандидат думать в разных плоскостях, генерировать разные варианты решения одной и той же задачи, критически их оценивать, сравнивать между собой и выбирать наиболее перспективные для дальнейшей проработки с учетом возможных ограничений. Это в работе инженера куда более важный скилл, чем умение писать конечный код
А как это так получилось, что в пятой задаче решение за куб внезапно оказалось верным при ограничениях 10^5? Конечно, есть шанс, что магия срезов оптимизировала этот код до квадрата, но даже так оно не должно работать ну никак за адекватное время.
есть шанс, что магия срезов оптимизировала этот код до квадрата
Вряд ли - там ведь ещё уникальность будет проверяться..
Навскидку, в этой задаче надо из всех возможных срезов (коих N(N+1)/2 штук) выкинуть все такие срезы s[i]...s[j], у которых s[i]==s[j], потому как они не добавляют новых результатов. Оные срезы легко посчитать: проходим по строке, определяем сколько раз встретилась каждая буква. Если некоторая буква встретилась K раз, то к ней относится K(K+1)/2 выкидываемых срезов, которые на неё начинаются/заканчиваются. Итого O(n).
Там не две буквы меняются местами, а подстрока целиком разворачивается. abcde может превратиться в edcba, а не ebcda.
Поясню на примере: допустим, строка "abcdb". Разворот подстроки "bcdb" приводит к тому же результату, как и разворот "cd". То есть "bcdb" можно не рассматривать.
Это да, но как помогает? Пусть у меня N символов в строке, а разных символов Sigma (~26). Тогда имеем n(n+1)/2 - sigma*(n/sigma)*(n/sigma+1)/2 = (n^2+n - (n^2/sigma+n))/2 = n^2*(1-1/sigma)/2 срезов. Это всё ещё O(n^2) при sigma>=2.
Помогает очень просто: мы можем легко узнать, сколько подстрок надо выкинуть из подсчета. Для этого сначала определяем количества букв. В моём примере это будет
counts = {a: 1, b: 2, c: 1, d: 1}
Далее по этому словарю и формуле K(K+1)/2 легко определяем, что надо выкинуть по одной подстроке для букв a/c/d, и 2*(2+1)/2 = 3 подстрок для буквы b
Словарь, конечно же, будет в виде массива из 26 элементов, где индексом служит (код символа минус код "a"). Собрать такой словарь очевидно можем за O(n), ну а проход по нему и сумма - вообще О(1)
Я подозреваю, что система показывает только результат запуска на тестах из условия и окончательное тестирование на полном наборе тестов будет уже после окончания отбора.
Решение из статьи даже на случайной строке длиной 2000 работает долго.
Я через несколько дней после написания статьи тоже об этом подумал. В любом случае, из проведенного теста видно, что нейросеть сможет решить простые задачи. А к сложным, как минимум, накинет идеи и предложит неоптимальное решение.
Ну, и я сомневаюсь, что кто-то специально тренировал ChatGPT на олимпиадные задачи.
Более того, система тестирует решение только на 1ом примере из условий. Это скорее даже проверка на скомпилировалось/не скомпилировалось. И об этом явно написано в условиях каждой задачи
а насколько необходимы алгоритмические собеседования, если нейросети могут успешно решать подобные задачи
Делаем тесты закрытыми и до свидания "успешность" нейросети.
В таких контестах 1-3 теста всегда даются в условии для примера, а в системе еще десятки закрытых
Значит закрыть существенные или иным способом закрыть возможность получать бесконечный фидбек. Я не считаю "успешной" систему, для получения правильного ответа в которой надо перебирать правдоподобные варианты бесконечно и бесплатно.
Обычно есть ограничения на количество отправок. В данном случае было 200. Но даже при увеличенном лимите перебрать все возможные варианты для прохождения тестов (большинство из которых закрыто и приходит только с вердиктом "неверно") выглядит как что-то маловероятное.
За 4-5 часов по 6-8 задачам бесконечно не переберешь :) Тем более, что такое "правдоподобный вариант" в данном случае? Очередная итерация отредактированного кода с какими-то ошибками или без них? Так и живой человек может забыть какой-то случай или неправильно понять часть условия, это нормально.
В целом же система таких контестов (с небольшими модификациями вроде штрафов за попытки или более позднее время получения вердикта ОК) используется много где, включая серьезные соревнования вроде Всероса и ICPC (там условия такие, чтобы исключить списывание, но это уже другой вопрос), и серьезных претензий к ней не видно.
Вот будет прикол, когда Тинькофф на своей стороне настроит ChatGPT проверять присланные решения :-)
Статья вычитана с помощью ChatGPT
А писять вы тоже с помощью ChatGPT ходите? К чему была эта ремарка про вычитку?
Если вы не в курсе, то существует отдельная профессия людей, которая занимается вычиткой текста. Не каждый человек знает все правила русского языка.
Даже профессиональные писатели прибегают к вычитке текста. Это не значит, что они не пишут текст. Я к тому, что все ошибки могут быть исправлены нейросетью. Теперь можно использовать ChatGPT для вычитки текста, вместо того чтобы делать это в Word или с помощью специальных людей.
Матвей, спасибо за статью! Чуть прокомментируем от компании. На стипендию и правда могут подаваться только не трудоустроенные студенты. Мы помогаем им, чтобы они могли сосредоточиться на учебе.
Участникам, которые уже написали экзамен своими силами, переживать не о чем. Фрод отлавливается, конкуренция остается адекватной, а кроме экзамена есть еще несколько этапов: скрининг портфолио и интервью. Всем успехов на отборе!
Автор пишет: "P.S. Статья вычитана с помощью ChatGPT". Но ИИ тоже ошибается. Раздел "Косяки Тинькофф", абзац 2: "....Создал временную почту, зарегЕстрировался, ..."
Как получать стипендию Тинькофф, зная лишь ChatGPT?