Блог пользователя DaddyM

Автор DaddyM, история, 4 недели назад, По-русски

Тесты задачи не учитывают очевидный кейс, когда во вводе присутствует имя с целым числом на хвосте. Например, вот это "Полное решение" https://codeforces.com/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.

Как можно поправить тесты к задаче?

  • Проголосовать: нравится
  • -4
  • Проголосовать: не нравится

»
4 недели назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Автокомментарий: текст был обновлен пользователем DaddyM (предыдущая версия, новая версия, сравнить).

»
4 недели назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Автокомментарий: текст был обновлен пользователем DaddyM (предыдущая версия, новая версия, сравнить).

»
4 недели назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

Такой тест, очевидно, не будет соответствовать условию задачи.

Цитата: Каждый запрос представляет собой непустую строку длиной не более 32 символов, состоящую только из строчных букв латинского алфавита.

  • »
    »
    4 недели назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    верно, но тогда тесты всё равно не покрывают условие задачи. Конкретно, можно сделать "полное решение", в котором подсказки не сохраняются в БД.

    Цитата: Если же на сайте уже присутствует пользователь с именем name, то система формирует новое имя и выдает его пользователю в качестве подсказки, при этом подсказка также добавляется в базу данных.

    Вот это "полное решение" — https://codeforces.com/contest/4/submission/36132880 — и ряд других не сохраняют подсказку в БД. Такие решения работают очевидно быстрее, чем те решения, которые учитывают требование условия задачи сохранять подсказку в БД. Получается что система тестирования условия задачи провоцирует unfair advantage.

    Предлагаю убрать из условия требование о сохранении подсказки в БД или добавить в тесты кейсы, которые тестируют наличие подсказок в БД, например, в выводе даётся снепшот БД и/или алфавит входных данных расширить с a..z до a..z,0..9

    • »
      »
      »
      4 недели назад, # ^ |
      Rev. 3   Проголосовать: нравится +21 Проголосовать: не нравится

      Говоря формально, в условии нет требования сохранять подсказку в БД. Второй абзац (в котором БД упоминается) содержит описание поведения системы регистрации, а вас просят реализовать прототип системы. Даже в реальном мире это (ПО и его прототип) разные вещи, и они совершенно не обязаны работать одинаково. То есть Вас просят реализовать не саму систему, а прототип, который ведет себя определенным образом (так же, как описанная система). Соответствие поведения проверяется путем тестирования. Все, что соответствует тестам — не является "unfair".

      Говоря неформально. Задачи на Сodeforces, ICPC, ВСОШ и подобных соревнованиях почти всегда (за очень редкими исключениями вроде дополнительных ограничений на используемый язык, всегда специально оговариваемыми) неявно подразумевают принцип: вы должны обеспечить требуемый вывод и уложиться в ограничения времени и памяти, а что именно вы делаете внутри — никого не интересует, пока вы не нарушаете общие правила, описанные в https://codeforces.com/blog/entry/4088. В частности, в пункте 2 раздела "решение задач" явно запрещена работа с любыми внешними ресурсами (файлы, сеть, права и т.п.). Очевидно, использование любой внешней БД (чтобы реализовать систему в полном соответствии с описанием из второго абзаца) запрещено как раз в этом пункте.

      Задача, в которой будут разрешены цифры во входных запросах либо потребуется вывод снимка системы, безусловно, имеет право на существование — но это просто будет другая задача. Создайте её, используя Polygon (https://polygon.codeforces.com/), и сообщество будет Вам только благодарно. Замечу лишь, что очень похожая задача встречалась совсем недавно на квалификации Уральского Четвертьфинала ICPC 2023 (https://sp.urfu.ru/qf/2023/qual/statements.pdf, задача G. "Прогрессивный NoSQL"), поэтому включение такой же задачи в какой-либо рейтинговый контест в обозримом будущем маловероятно.

      • »
        »
        »
        »
        4 недели назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        спасибо за развернутый ответ. Выходит что текст выделенный жирным, это просто текст и реализовывать его не надо т.к. в описании входных данных алфавит не подразумевает проверок с подсказками?

        Цитата: Если же на сайте уже присутствует пользователь с именем name, то система формирует новое имя и выдает его пользователю в качестве подсказки, при этом подсказка также добавляется в базу данных.

        • »
          »
          »
          »
          »
          4 недели назад, # ^ |
          Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

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

          • a -> a
          • a -> a1
          • a -> a11
          • »
            »
            »
            »
            »
            »
            4 недели назад, # ^ |
            Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

            только по условию вот так

            a -> a
            a -> a1
            a -> a2
            
          • »
            »
            »
            »
            »
            »
            4 недели назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            если условие понимать дословно, то требуемая программа должна сохранять подсказку в БД (я не прав?). Другое дело, что алфавит входных данных, как можно сразу заметить, не подразумевает проверок на обработку кейса, когда какой-нибудь пользователь введет логин такой же как уже ранее предложенная и сохраненная в БД подсказка.