Opened 4 years ago

Closed 4 years ago

#975 closed ожидается проверка (задача сдана)

HW #3

Reported by: Milyausha Sabirova Owned by: Vasily Alferov
Component: HW #3 (Huffman) Version: 2.0
Keywords: Cc:

Description

У меня не получилось отдебажить алгоритм архивирования/разархивирования, закоммитила пока только то, что есть :(

Change History (3)

comment:1 Changed 4 years ago by Vasily Alferov

Type: ожидается проверкаожидаются исправления

='((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((

Оно не компилируется с точностью до лишних точек с запятой и не работает совсем.
Я не знаю, что тут проверять :(

Можно досдавать до 22:59 понедельника с понижением оценки на 0.5. Правила этой акции Егор недавно кидал на почту.

comment:2 Changed 4 years ago by Milyausha Sabirova

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

(я не думала, что ты будешь это проверять, тот коммит был, чтобы показать, что я что-то активно пыталась сделать)

Теперь работает и даже компилируется (я надеюсь). Про беды с валгриндом при сжатии знаю, тесты не успела написать:(

comment:3 Changed 4 years ago by Vasily Alferov

Resolution: задача сдана
Status: assignedclosed

Так гораздо лучше.

Баллы в таблице умножаются на 0.5.

Корректность 6/9
Тесты 0/8 (отсутствуют)
Архитектура 3/5
Стиль 6/8

Траблов с валгриндом я не заметил, а вот некоторые бинарные файлы виснут. Например, содержащий все байты.

По архитектуре: в основном ОК, но публичные поля у классов — не ОК.

Стиль. Строчки длинные, местами не очень читаемые, в src/Huffman.cpp нет пустой строки после инклюдов.

    auto compare = [](const HuffmanNode *first, const HuffmanNode *second)
    { return first->frequency > second->frequency; };
    std::priority_queue<HuffmanNode*, std::vector<HuffmanNode*>, decltype(compare)> min_heap(compare);

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

Несколько вариантов, как можно было бы улучшить:

  1. Структурка-функтор.
  1. Темплейтный тайпдеф
    template<class T, class Compare>
    using heap = std::priority_queue<T, std::vector<T>, Compare>;
    
  1. Тайпдеф на компаратор
    using Compare = decltype(compare);
    // или даже так:
    using Compare = std::function<bool (HuffmanNode*, HuffmanNode*)>;
    
  1. А лучше комбинация 2 + (1 или 3).

И на будущее.
В современном мире эксепшны можно писать так:

class CLI_exception : public std::runtime_error { /* не std::exception, а его наследник */
public:
    CLI_exception(const std::string& message)
      : std::runtime_error(message)
    {}
};
Note: See TracTickets for help on using tickets.