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

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

После того, как на тимусе поправили вид профиля участника, работа скрипта по оценке решенных задач и их сложности в его текущем виде стала невозможной. Для правки скрипта потребовалась старая версия профиля. Но в кеше гугла не нашлось ни одной такой страницы, зато нашлось кое-то другое...

http://acm.timus.ru/tester/ - Тестер от Владимира Яковлева. Думаю многие знали или слышали о нём.

Но дальше пошло интереснее...

http://acm.timus.ru/KseniaSobchakFanclub/ - Ural Fanclub of Ksenia Sobchak

Our team at World Finals 2009 in Stockholm :-)

Ksenia Sobchak

^ кликабельно! ^


http://acm.timus.ru/LiudmilaPrivivkovaFanclub/ - Ural Fanclub of Liudmila Privivkova

Liudmila Privivkova




http://acm.timus.ru/LuyiMoFanclub/ - Ural Fanclub of Luyi Mo

Luyi Mo


Luyi Mo, ACM ICPC 2011 World Champion


А Яндекс выдал немного спама.

http://acm.timus.ru/Author.aspx?id=96823
АСУ ТП, НКУ, РЗА Релейная защита
Russian Federation

Прямые поставки электротехники и автоматизированных систем управления технологическими процессами объектам энергетики


http://acm.timus.ru/Author.aspx?id=99445
Комбинат автофургонов - спецтехника Камаз, ГАЗ, Урал, Краз
Russian Federation
Производство и продажа спецтехники на базе шасси ГАЗ, Камаз, Урал, Краз.
  • Проголосовать: нравится
  • +70
  • Проголосовать: не нравится

15 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится
Видимо, страницы Ural Fanclub созданы для того, чтобы дать на них ссылку в графе homepage при регистрации команды на IPSC
15 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится
Я один увидев обновленный профиль на тимусе захотел там нарисовать какую-то картинку? (пикселей вполне хватит, для чего-то не сильно сложного =). )
15 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится
А что, если вывести в топ Релейную защиту? :)
Надо всего лишь угадать буквы из айдишника, 676 вариантов - не так и много
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
А что за скрипт по оценке решенных задач и их сложности? Можете рассказать?
  • 15 лет назад, скрыть # ^ |
    ← Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    Кажется речь о http://vspu.org/timus_rating.jsp
    Кстати я не понимаю в чём сложность отпарсить новую страницу. (можно например загрузить скриптом эту страницу и парсить код, а можно просить пользователя вставлять код.)
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Как человек, который тоже написал парсер тимуса, могу сказать, что тимус меняет оформление страницы в среднем раз в 4 месяца. Тупо надоедает :).
    • 15 лет назад, скрыть # ^ |
      ← Rev. 3  
      Проголосовать: нравится 0 Проголосовать: не нравится

      После последних нововведений скрипт пришлось переписывать.

      Раньше, чтобы получить всю нужную информацию достаточно было просто на странице автора скопировать содержимое страницы в поле ввода скрипта.

      Буквально вчера скрипт был переписан и теперь желающим им воспользоваться придется скопировать уже исходный текст страницы автора.

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

      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Главное анти-флуд не забудьте прикрутить какой-нибудь адекватный и будет всё ок.

        А Timus.API было бы вообще хорошо. :3
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        А зачем пользоваться этим скриптом, если примерно то же самое можно увидеть в архиве задач, если упорядочить задачи по сложности?
        • 15 лет назад, скрыть # ^ |
          ← Rev. 2  
          Проголосовать: нравится 0 Проголосовать: не нравится

          Видимо потому что это не отражает реальной статистики, ибо есть много людей, которые давным давно что-то решали и потом забили. Таким образом задача примерно из последних томов с 200-300 АС нормально решается, а задача из первого тома с таким количеством АС для многих настоящий ад.

          UPD. А в этом скрипте более менее они   выстроены по сложности.
          • 15 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится
            Что ж, предложите адекватную формулу расчета сложности, и мы ее реализуем.
            • 15 лет назад, скрыть # ^ |
              ← Rev. 2  
              Проголосовать: нравится 0 Проголосовать: не нравится

              Я не знаю точно, но кажется на vspu люди сами составляли рейтинг задач. Хотя может это и не так:  можно просто ввести рейтинг по количеству сдавших, умножая на какой-то коэффициент зависящий от номера тома. Либо можно ограничить количество учтённых авторов, то есть учитывыть например только АС тех авторов, которые за последний год-два решили хотябы одну задачу.
            • 15 лет назад, скрыть # ^ |
               
              Проголосовать: нравится 0 Проголосовать: не нравится
              Ну, мне кажется, хорошая формула должна как-то соотносить количество авторов по задаче с количеством авторов ближайших задач. Это будет нивелировать эффект "накопления" авторов со временем. Другое дело, что нужно еще как-то учитывать "эффект контеста" - ближайшие задачи могут дать bias, потому что на сложных контестах мало авторов вследствие их сложности, а не эффекта времени. Мне кажется, неплохая модель для ожидаемого количества авторов задачи (предполагая, что сложность всех задач одинакова) - это A*exp(B*t), где A и B - это некоторые константы, а t - это время, прошедшее с даты публикации задачи. Константы можно оценить ОЛСом в логарифмическом виде по всей выборке задач на тимусе. Тогда мы получим для каждой задачи некоторое число Ei - среднее ожидаемое количество авторов, скорректированное на эффект времени. Тогда Di = Ei/(реальное количество авторов задачи i) будет ее сложностью (чем число выше - тем выше сложность). Ну и можно это как-то отнормировать при желании, например Ni = (1-exp(-Di))/(1+exp(-Di)) - сложность от 0 до 1
              • 15 лет назад, скрыть # ^ |
                 
                Проголосовать: нравится 0 Проголосовать: не нравится

                >соотносить количество авторов по задаче с количеством авторов ближайших задач.

                Рейтинг VSPU использует подобную идею и как видно - весьма не плохо.

                >предполагая, что сложность всех задач одинакова

                Мне кажется это не так.

                • 15 лет назад, скрыть # ^ |
                   
                  Проголосовать: нравится 0 Проголосовать: не нравится
                  Ну так это предпосылка для расчета сложности - соотносить реальное количество авторов с количеством авторов, которое было бы, если бы сложность всех задач была одинаковая.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Про скрипт уже ответили. :)
    А спам удалят? ^_^
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Интересно, почему на новый вид не переведена например эта страница http://acm.timus.ru/author.aspx?id=64655
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Как пользоваться Тестером для java кода? На примере покажите пож-та.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Очень просто :)
    !test.exe java Solution
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Имею ввиду как настроить .ini файл, чтобы программа проходила через n наборов теста. Допустим у меня есть input.txt, output.txt, A.java. Не могли бы по по пунктам написать как протестировать java код?
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Скопируйте input.txt в tests/01, а output.txt - в tests/01.ans
        В !test.ini поменяйте:
           RunProgram = java A
        Остальные параметры оставьте как есть.
        Следующий тест назовите 02 и 02.ans и т.д.

        • 15 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится
          ERROR: No input files were found. Не видит входной файл.
          Разве у меня не будет только один файл? Т.е допустим программа сложения двух чисел A+B. В input.txt:
          2 3
          1 1
          4 5
          В output.txt:
          5
          2
          9
          При запуске нужно писать: !test.exe java A ?
          • 15 лет назад, скрыть # ^ |
            ← Rev. 2  
            Проголосовать: нравится 0 Проголосовать: не нравится

            Вообще-то, тестер предназначен для запуска на серии тестов. Чтобы запустить программу просто для файлов input.txt и output.txt выполните
            !test.exe -run:"java A"
            Учтите, что файл output.txt в этом случае перезапишется
            • 15 лет назад, скрыть # ^ |
               
              Проголосовать: нравится 0 Проголосовать: не нравится
              Спасибо! Разобрался. Удобная программа, когда проверяешь на большом наборе тестов.
              Но было бы еще удобнее, если набор тестов и ответов были в одном .in и .ans файлах соответственно.
              п.с.: Не знаете можно настроить так? :)
15 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится
Не знаете почему частенько выходит ошибка: crach (ACCESS_VIOLATION) ?
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Может, обращаетесь к памяти, которая вам не принадлежит? Можно взглянуть на код?
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +2 Проголосовать: не нравится
      Конечно.
      import java.io.*;
      import java.util.*;

      public class A {
      public static void main(String[] args) throws IOException {
      new A().run();
      }
      PrintWriter pw;
      Scanner sc;
      public void run() throws IOException {
      sc = new Scanner(new File("input.txt"));
      pw = new PrintWriter(new File("output.txt"));
      int a = sc.nextInt();
      int b = sc.nextInt();
      pw.print(a+b);
      pw.close();
      System.exit(0);
      }
      }

      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +9 Проголосовать: не нравится
        Вы бы FAQ почитали, он для этого и создан. Там без файлов все.
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Кстати, недостаток Тимуса: если написать System.exit(1), не будет Crash.
        Будет либо AC, если в выходной поток уже выведен верный ответ, либо WA в противном случае
        • 15 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится

          Да поможет вам в вашем dirty debug 

          throw new Error()

          • 15 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится
            Это фикс со стороны участника, а хотелось бы - со стороны Тимуса...
            • 15 лет назад, скрыть # ^ |
               
              Проголосовать: нравится 0 Проголосовать: не нравится
              Да там еще и Exception'ы кидать нельзя в C++. Раздражает.
              Думаю, они просто не дописали несколько строк в своей "обёртке", которая цепляется к программе как дебаггер и ловит исключения процессора. А вижак кидает свои точно также, но с другим кодом. Вот этот код сейчас никто отличать не умеет.
              • 15 лет назад, скрыть # ^ |
                 
                Проголосовать: нравится 0 Проголосовать: не нравится
                А зачем Вы кидаете исключения в acm-овских программах, на вход которым почти всегда поступают корректные данные? Вы пытаетесь строить на этом логику работы?

                А если по существу, то скажите, на каких acm-соревнованиях можно кидать исключения в C++? Лично я этот вопрос не изучал, и считаю, что даже если на каком-то одном соревновании так можно делать, то все равно найдутся другие, на которых так делать будет нельзя (и об этом не будет объявлено заранее).

                • 15 лет назад, скрыть # ^ |
                   
                  Проголосовать: нравится 0 Проголосовать: не нравится
                  ===================================
                  Например, мне удобно так писать геометрию. Определили структуру "прямая", оператор &, и кидаем исключение, если прямые не пересекаются. Конечено, если не требуется выполнять такую операцию тысячи раз - всё-таки выброшенное исключение тормозит.

                  Не изучал этот вопрос. Разумеется, где-то будет нельзя. Это обычно выясняется на пробном туре и запоминается. А вот на тренировках хотелось бы концентрировать внимание на решении и написании задачи, без проблем с ограничением на стэк 8МБ (IOI, могут быть проблемы с сложным DFS'ом - надо эмулировать стек ручками или писать BFS) и запрещёнными исключениями.
                  Казалось бы, в рамках одной конкретной проверяющей системы их отфильтровать от всего остального не очень сложно. Поправьте, если ошибаюсь
                  • 15 лет назад, скрыть # ^ |
                     
                    Проголосовать: нравится 0 Проголосовать: не нравится
                    ===================================
                    Не понимаю такого подхода, по-моему на тренировках надо писать так же как и на соревновании. Зачем для этого какой-то отдельный стиль?
                    • 15 лет назад, скрыть # ^ |
                       
                      Проголосовать: нравится 0 Проголосовать: не нравится
                      ==========================
                      Я не совсем правильно употребил слово "тренировка". Имелось ввиду не пятичасовое командное прорешивание за несколько недель до олимпиады, а регулярная сдача нескольких задач в день "для поддержания формы".
                      Казалось бы, тут главное не приближенность к соревнованию, а решение.
                • 15 лет назад, скрыть # ^ |
                   
                  Проголосовать: нравится 0 Проголосовать: не нравится
                  Возможно исключения и другие плохие завершения программы есть смысл кидать, чтобы подобрать тест к нерадивой задаче. :-)

                  Пример. :-)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
В этой теме всплыла ссылка на скрипт http://www.vspu.org/timus_rating.jsp , а какие еще есть полезные ресурсы для людей, прорешивающих Тимус?
15 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится
На Тимусе появилась "сложность" задач и возможность сортить по ней
PS вроде никто раньше не писал, это появилось только сегодня
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Прикольно. И вроде бы не совпадает с рейтингом vspu.
    Но не сказать, чтобы очень адекватно... 1822 совсем простая - бинпоиск по ответу и поиск в глубину. А находится ниже (сложнее чем) 1828 (производная) и 1706 (кмп/z/хэши). Хотя это лишь ИМХО.
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Есть сильное подозрение, что на vspu не зря рейтинг обновляется примерно 1 раз в год. За это время добавляется солидное число задач и рейтинг новых задач весьма "устаканивается".
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Ну с новыми задачами что-то тоже надо делать. Если рейтинг будет обновляться в онлайне и устаканиваться по мере жизни задачи, то вроде бы ничего плохого не случится.
15 лет назад, скрыть # |
 
Проголосовать: нравится +11 Проголосовать: не нравится
Сегодня я добавил экспериментальную формулу сложности задачи. Теперь задачи можно упорядочивать по сложности в архиве задач и в карте решенных задач в профиле. Жду ваших предложений/замечаний.

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

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

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

    Теперь наглядней вижу, что можно в первую очередь сдавать.

  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +1 Проголосовать: не нравится
    Было бы неплохо вернуть кнопку перехода к следующему/предыдущему тому.
  • 15 лет назад, скрыть # ^ |
    ← Rev. 13  
    Проголосовать: нравится +3 Проголосовать: не нравится

    Я провел некоторый эконометрический анализ - и оказалось, что лучшая зависимость между количеством авторов и временем - это ln(authors) = a + b*t, где t - это время от публикации задачи до сегодня, как я и писал раньше (R^2 около 35%, что неплохо, учитывая разброс по сложности). Исходя из этого я построил свой рейтинг задач, и он довольно неплохо работает (с вашим хорошо коррелирует, но не во всем). Если интересно - могу прислать результаты моего мини-исследования. Кроме того, я нашел неплохую нормировку рейтинга от 0 до 1.
    Собственно, ниже картинка, показывающая обнаруженную зависимость (не знаю, почему не отображается, но можно в новом окне открыть)


    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Можете пояснить, что значат эти графики?

      Я изучал графики количества авторов, сдавших конкретную задачу. Это количество растет линейно в течение всего времени, кроме первых 4 месяцев. В первые месяцы задача сдается чаще. Эту ситуацию можно вообще не рассматривать, так как подавляющее большинство задач старше 4 месяцев. Текущая формула немного завысит сложность новых задач, но я не вижу в этом ничего страшного.
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +6 Проголосовать: не нравится
        А почему бы не сделать так, чтобы пользователи сами устанавливали рейтинг задачи? Понятно, что решение в стиле - "отметить по шкале от 1 до 10 сложность задачи" не катит. Но а что, если бы пользователю предлагалось на сравнение 2(?) задачи и он бы выбрал - какая из них показалась ему сложнее. В фильме "социальная сеть" это правда уложило сеть универа, но всё-таки :-)
        • 15 лет назад, скрыть # ^ |
           
          Проголосовать: нравится +1 Проголосовать: не нравится
          1) Сложность для каждого участника достаточно редко будет объективна.
          2) Не все захотят ставить эту сложность.
          3) Проблема флешмобов а-ля "давайте выведем сокобан в самые простые".
      • 15 лет назад, скрыть # ^ |
        ← Rev. 3  
        Проголосовать: нравится 0 Проголосовать: не нравится

        Графики построены в эконометрическом пакете EViews. По оси x - фактически время, прошедшее с даты публикации (на самом деле - задачи в тимусе по порядку, но на графике это почти то же самое, по оси y - логарифм <количества авторов + 1>. Имхо, линейная зависимость между этими величинами неплохая. Как я написал, я проверял чисто линейную зависимость (которую используете вы) - результаты намного хуже по всем критериям (Akaike, Schwartz, общая значимость регресии и R^2, хотя он здесь плохо применим). График классический: красным - показано фактическое количество логарифма авторов, зелененьким (почти прямая линия - непрямая потому что публикация задач не совсем равномерна во времени) - матожидание количества авторов, синим - остатки регрессии. Как видите, fit совсем неплохой, большие отрицательные ошибки около 400-го наблюдения отражают сложные задачи в конце 4-го тома, что согласуется с реальностью.
        Если вы пришлете мне графики количества авторов, сдавших конкретную задачу, я смогу провести более подробный анализ. Ведь вполне может оказаться, что линейная зависимость, обнаруженная на глаз - вполне может быть экспоненциальной зависимостью с не очень большим коэффициентом роста. Кстати, в моих результатах так и есть: регрессия вида LAUTH = 4.42832683 + 0.0007194597997*T, или, если взять экспоненту:
        (авторы) = e^4.42 * exp(0.0007 * (время с даты публикации в днях))

        P.S. Формула с логарифмом учитывает тот факт, что сначала задача сдается "Активно" (при t=0 сразу имеем кол-во авторов ~ e^4.42), а потом - более размеренно (коэффициент роста со временем ~ в e^0.25 раз в год
15 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится
Тоже хочу решить весь тимус.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    У меня пока менее крутая цель - сделать связными верхнюю и нижнюю строку списка задач (если двигаться можно только по зеленых).

    Пока у меня можно добраться еле-еле до второго тома))) А если двигаться и по диагонали тоже - до четвертого.

    Сделаю это - глядишь, начну гоняться за полностью решенными строками/столбцами... 

    А там уже можно будет и весь сайт сдавать)

15 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится
Сегодня обнаружил давно желанную фичу - сравнение карты задач двух авторов. Пример.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +3 Проголосовать: не нравится
    Скажите, пожалуйста, для чего вы используете сравнение карт решенных задач двух авторов? Сравниваете только себя и других авторов или двух произвольных авторов? Нам нужно это знать, чтобы сделать этот инструмент удобнее.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Мне было бы интересно посмотреть на "сравнение команд". Т.е. сравнивать не множества задач, решенных одним автором, а множества задач, решенных хоть одним автором "из команды" (размер команды от 1 до ... пользователей). Например, так можно было бы сравнивать именно команды - в какой решили больше; автора и остальную часть команды (было бы удобным посмотреть, что же такого тиммейты решили, что не решил я); университеты (выбрав в "команды" представителей этих университетов).