Задача: “упростите код”

Есть целый класс задач, состоящих не в том, что “напишите свой код для того чтобы…”, а так: “перед вами готовый код – упростите и укоротите его”. Мне такого рода задачу в качестве теста по вакансии прислала крупная израильская фирма. Это очень интересный класс задач, который:

  • учит понимать чужой код;
  • требует тонкого знания синтаксиса для упрощения.

Для практического программиста такие задачи ценнее, чем просто самому написать … Hello World! Интересно то, что код задачи нужно бы упростить почти не разбираясь что этот код должен делать – по правилам формального синтаксиса C++.

В данной задаче:
func1() – в точности исходный код функции, который нужно упростить;
func2() – то что у меня получилось после упрощения;
– … а всё остальное (main) – это тест сравнения выполнения 2-х вариантов на нескольких примерах.


Результат выполнения:

с++ задачи и решение, исходный код, практика программирования на c++

Рассылка новых уроков по программированию:

Задача: “упростите код”
5 (100%) 1 vote

Об авторе Olej

Стаж практических программных разработок около 40 лет. Преподаватель международной софтверной компании Global Logic. Постоянный автор публикаций IBM Developer Works. Научный редактор книжного издательства компьютерной литературы "Символ-Плюс", Санкт-Петербург.

Задача: “упростите код”: 4 комментария

  1. Ну и результат выполнения теста тогда нужно показать для полноты картины:

  2. Кстати…
    Наши израильские друзья считают такое решение неверным – они мечтали о чём-то более кошерном ;-)

    Хотя, с другой стороны, я считаю, что они просто не умеют точно формулировать свои мечты о кошерности.
    Вот дословно их условие задачи:

    Simplify the implementation below as much as you can.
    Even better if you can also improve performance as part of the simplification!
    FYI: This code is over 35 lines and over 300 tokens, but it can be written in 5 lines and in less than 60 tokens.

    Тестирование показывает полную эквивалентность func1() и func2().

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

  3. Задача состоит в оптимизации кода, ваше же решение обычное переписывание предложенного алгоритма с целью уменьшения количества строк.

  4. ” код задачи нужно бы упростить почти не разбираясь что этот код должен делать — по правилам формального синтаксиса C++.”
    Но это не очень соответствует условию в самом задании – там вроде нужно упростить саму реализацию. А значит, следует сначала постараться понять смысл функции, и тогда лучшее решение станет очевидным:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *