Тесты задачи не учитывают очевидный кейс, когда во вводе присутствует имя с целым числом на хвосте. Например, вот это "Полное решение" https://codeforces.me/contest/4/submission/36132880 неверно обрабатывает следующий ввод:
7
first
first
first1
second
second
third
third
Ожидаемый вывод:
OK
first1
first11 <----
OK
second1
OK
third1
Актуальный вывод:
OK
first1
OK <----
OK
second1
OK
third1
first1 не должен быть ОК, т.к. он уже есть в БД. Согласно условию задачи программа должна предложить пользователю новый логин first11.
Как можно поправить тесты к задаче?
Автокомментарий: текст был обновлен пользователем DaddyM (предыдущая версия, новая версия, сравнить).
Автокомментарий: текст был обновлен пользователем DaddyM (предыдущая версия, новая версия, сравнить).
Такой тест, очевидно, не будет соответствовать условию задачи.
Цитата: Каждый запрос представляет собой непустую строку длиной не более 32 символов, состоящую только из строчных букв латинского алфавита.
верно, но тогда тесты всё равно не покрывают условие задачи. Конкретно, можно сделать "полное решение", в котором подсказки не сохраняются в БД.
Цитата: Если же на сайте уже присутствует пользователь с именем name, то система формирует новое имя и выдает его пользователю в качестве подсказки, при этом подсказка также добавляется в базу данных.
Вот это "полное решение" — https://codeforces.me/contest/4/submission/36132880 — и ряд других не сохраняют подсказку в БД. Такие решения работают очевидно быстрее, чем те решения, которые учитывают требование условия задачи сохранять подсказку в БД. Получается что система тестирования условия задачи провоцирует unfair advantage.
Предлагаю убрать из условия требование о сохранении подсказки в БД или добавить в тесты кейсы, которые тестируют наличие подсказок в БД, например, в выводе даётся снепшот БД и/или алфавит входных данных расширить с a..z до a..z,0..9
Говоря формально, в условии нет требования сохранять подсказку в БД. Второй абзац (в котором БД упоминается) содержит описание поведения системы регистрации, а вас просят реализовать прототип системы. Даже в реальном мире это (ПО и его прототип) разные вещи, и они совершенно не обязаны работать одинаково. То есть Вас просят реализовать не саму систему, а прототип, который ведет себя определенным образом (так же, как описанная система). Соответствие поведения проверяется путем тестирования. Все, что соответствует тестам — не является "unfair".
Говоря неформально. Задачи на Сodeforces, ICPC, ВСОШ и подобных соревнованиях почти всегда (за очень редкими исключениями вроде дополнительных ограничений на используемый язык, всегда специально оговариваемыми) неявно подразумевают принцип: вы должны обеспечить требуемый вывод и уложиться в ограничения времени и памяти, а что именно вы делаете внутри — никого не интересует, пока вы не нарушаете общие правила, описанные в https://codeforces.me/blog/entry/4088. В частности, в пункте 2 раздела "решение задач" явно запрещена работа с любыми внешними ресурсами (файлы, сеть, права и т.п.). Очевидно, использование любой внешней БД (чтобы реализовать систему в полном соответствии с описанием из второго абзаца) запрещено как раз в этом пункте.
Задача, в которой будут разрешены цифры во входных запросах либо потребуется вывод снимка системы, безусловно, имеет право на существование — но это просто будет другая задача. Создайте её, используя Polygon (https://polygon.codeforces.com/), и сообщество будет Вам только благодарно. Замечу лишь, что очень похожая задача встречалась совсем недавно на квалификации Уральского Четвертьфинала ICPC 2023 (https://sp.urfu.ru/qf/2023/qual/statements.pdf, задача G. "Прогрессивный NoSQL"), поэтому включение такой же задачи в какой-либо рейтинговый контест в обозримом будущем маловероятно.
спасибо за развернутый ответ. Выходит что текст выделенный жирным, это просто текст и реализовывать его не надо т.к. в описании входных данных алфавит не подразумевает проверок с подсказками?
Цитата: Если же на сайте уже присутствует пользователь с именем name, то система формирует новое имя и выдает его пользователю в качестве подсказки, при этом подсказка также добавляется в базу данных.
Если задача "выбрать что-нибудь из всех возможных множеств целых чисел", то это не значит что надо написать перебор всех комбинаций из бесконечного множества, а понять что из написанного можно не делать. Видимо подсказка добавляется в базу означает, что второй раз она уже не выдаётся.
только по условию вот так
если условие понимать дословно, то требуемая программа должна сохранять подсказку в БД (я не прав?). Другое дело, что алфавит входных данных, как можно сразу заметить, не подразумевает проверок на обработку кейса, когда какой-нибудь пользователь введет логин такой же как уже ранее предложенная и сохраненная в БД подсказка.