Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - valexey_u

Страницы: 1 2 3 [4] 5 6 ... 201
46
Поправил скрипты, чтобы нормально отрабатывалось и модуловское решение (merge_qs), запустил быстрый прогон (каждый файл один раз будет прогнан). Так что часов через 5 наверно прогон будет закончен, результаты автоматически опубликуются.

47
Так, с ограничениями по памяти merge_qs падает:
Command exited with non-zero status 48
Но при этом, как ни странно, выдает правильный ответ. Что ломает нафиг мои скрипты.
Какие-то чудеса с этой модулой.

48
Так, с ограничениями по памяти merge_qs падает:
Command exited with non-zero status 48

49
Могу пока пользоваться xds для прогонов тестов, но уже на файле в 256Мб merge_heap выдает не правильный ответ. Поэтому, думаю, его в тесты пока не включу. merge_qs работает вроде бы корректно (на всех файлах еще не гонял).

50
Ну да. Но там же написано
SeqFile.OpenWrite(spill[spno], name, SeqFile.raw+SeqFile.read+SeqFile.old, res);
Угу. Глянул в исходники либы. Там (в FIO.mod, где собственно это дело и проверяется и кидается HALT с этим текстом) написано следующее:
TYPE
    FileUsage         = (unused, openedforread, openedforwrite, openedforrandom) ;
...
PROCEDURE CheckAccess (f: File; use: FileUsage; towrite: BOOLEAN) ;
VAR
   fd: FileDescriptor ;
BEGIN
   IF f#Error
   THEN
      fd := GetIndice(FileInfo, f) ;
      IF fd=NIL
      THEN
         IF f#StdErr
         THEN
            FormatError('this file has probably been closed and not reopened successfully or alternatively never opened\n')
         END ;
         HALT
      ELSE
         WITH fd^ DO
            IF (use=openedforwrite) AND (usage=openedforread)
            THEN
               FormatError1('this file (%s) has been opened for reading but is now being written\n',
                            name.address) ;
               HALT
            ELSIF (use=openedforread) AND (usage=openedforwrite)
            THEN
               FormatError1('this file (%s) has been opened for writing but is now being read\n',
                            name.address) ;
               HALT
...

То есть выходит, что чтобы и читать и писать, нужно использовать openedforrandom. Т.е., вероятно, использовать не SeqFile, а RndFile.

51
Вот тебе и стандарты ISO. :-( Сейчас еще обнаружил, что в xds CARD16, CARD32..., а в gm2  CARDINAL16, CARDINAL32...
Пробовал gm2 из пакета поставить, вроде установилось, но не работает.
Если что, я собирал прогу с помощью gm2 вот таким образом:
gm2 -O3 -flibs=iso,pim merge_heap.mod
Без этих опций (-flibs=iso,pim) оно не собирается.

Да! Еще надо поставить либу pth - если система дебианоподобная, то так: apt-get install  libpth-dev

52
Вот тебе и стандарты ISO. :-( Сейчас еще обнаружил, что в xds CARD16, CARD32..., а в gm2  CARDINAL16, CARDINAL32...
Пробовал gm2 из пакета поставить, вроде установилось, но не работает.
Насколько я понимаю, проблема в чем-то вроде, что файл был открыт c флагом O_WRONLY а надо было с O_RDWR. Это если на позиксно-сишный язык переводить.

53
Решение на modula-2 собранное gm2 шлепается с такой диагностикой:
this file (spill+0) has been opened for writing but is now being read
Command terminated by signal 6

54
Я сравнивал суммы чисел - такая упрощенная статистика.
Ну, сумма чисел -- это упрощённая контрольная сумма, тогда уж лучше сразу хеш делать, например SHA-2, а не MD5...
Тут есть нюанс суммы чисел можно посчитать имея input и не сортируя его, а вот md5 и sha2 уже не выйдет - чтобы их сравнивать с корректными нужно иметь сортированный корректный output. Т.е. чтобы проверить сортировку нужно реализовать сортировку.

55
Не понятно... Почему неубывающая последовательность неправильна?

И почему равенство значений подменяется равенством хэшей?

Потому, что вот псевдокод который пройдет твой тест:
in := open("input");
out := create("output");
for i:=0; i<in.size/4; ++i {
    out.write(i);
}
При этом он ничего сортировать не будет. Ему вообще плевать на входные данные, ему важно только сколько этих данных.

56
Кстати, тоже интересен способ проверки решений.

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

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

57
Похоже, что решение на модуле-2 (merge_heap, merge_qs еще не пускал) выдает не верные результаты на файлах больше 128 Мб. Но надо еще потестить.

58
Следующий прогон тестов будет запущен через 24 часа.
Мне надо допилить сборку и тестирование новых решений.

59
А вот как выглядит процесс тестирования в плане загрузки CPU & Disk IO на сервере.

60
Ага. Вижу появилось решение на Modula-2.

Страницы: 1 2 3 [4] 5 6 ... 201