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

Автор alaudo, 10 лет назад, По-русски

Добрый день!

Я внимательно прочитал правила и прекрасно понимаю всю мотивацию администрации сайта почему они не выдают полные тесты. И я полностью готов мириться с этим ради такого прекрасного сайта, единственного известного мне, где я могу смотреть на решения "чемпионов" и сравнивать со своими.

Но вот что делать, если твой код -- который тебе кажется правильным -- не проходит какой-то из "длинных" тестов?

Если просто выдается неправильное решение, то система также указывает и ожидаемый ответ и на основании этой информации что-то можно сделать.

А что делать при падении кода? Вот у меня вроде бы рабочий код, падает на одном из длинных тестов: 6810527. И я совершенно не знаю, что мне теперь делать -- то ли он при чтении данных еще падает, то ли при расчёте, а может при выдаче?

Я понимаю, что тут аргументы "сам виноват", и у других код работает нормально -- но я же хочу понять, в чем была моя ошибка.

Есть ли какая-то возможность вернуть при падении хоть какую-то отладочную информацию? Я могу без проблем сам выдать всю нужную информацию в stderr, если я бы ее потом увидел в результатах теста (или хотя бы первые 200 символов, чтобы не допустить жульничества и "проброса" входных данных).

Заранее спасибо, Александр.

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

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

Как один из вариантов, можно выводить отладочную информацию в stdout под условием, которое впервые выполняется на интересующем тесте (m == 10067 в конкретном примере).

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

    Не могли бы Вы пояснить, что Вы имеете в виду?

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

      if (m == 10067) вывести в stdout отладочную информацию вместо правильного ответа.

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

        Да, спасибо, это действительно помогает! Даже не надо условие специальное искать -- просто заворачиваешь весь код в try/catch и выдаешь иссключение в консоль. Сразу стало понятно, что проблема в переполнении Sum() LINQ метода. Это мне сразу помогло найти проблему в коде (и ошибку в алгоритме тоже :) ).

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

Часто помогает написание второго решения и своего генератора для тестов.

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

    Второе решение обосновано в том случае, если бы первое не проходило ряд тестов. А здесь оно просто падает. Поскольку решение кардинально отличается от авторского мне и хочется проверить именно его.

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

      Если решение падает, обосновано написание генератора тестов и прогон решения на нем.