Задача: «упростите код»

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

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

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

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


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

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

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

Olej

Об авторе Olej

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

Задача: «упростите код»: 3 комментария

  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. Задача состоит в оптимизации кода, ваше же решение обычное переписывание предложенного алгоритма с целью уменьшения количества строк.

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

Код размещайте в тегах: <pre class="lang:c++ decode:true ">YOUR CODE</pre>