Основи програмування на С ++ для початківців

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

Є цілий клас задач, складаються не в тому, що “напишіть свій код для того щоб…”, а так: “перед вами готовий код – спростите і укоротите його”. Мені такого роду завдання в якості тесту по вакансії прислала велика ізраїльська фірма. Це дуже цікавий клас задач, который:

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

Для практичного програміста такі завдання цінніше, ніж просто самому написати … Привіт Світ! цікаво те, що код завдання потрібно б спростити майже не розбираючись що цей код повинен робити – за правилами формального синтаксису C ++.

У цьому завданню:
func1() – в точності вихідний код функції, який має бути спрощена;
func2() – то що у мене вийшло після спрощення;
– … а все інше (main) – це тест порівняння виконання 2-х варіантів на кількох прикладах.


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

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

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

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

    $ ./strsimpl
    1 : => 3[2] ... 3[2]
    2 : => 7[6] ... 7[6]
    3 : => 3[2] ... 3[2]
    4 : => 5[4] ... 5[4]
    5 : => 6[5] ... 6[5]
    6 : => NULL ... NULL
    7 : => NULL ... NULL
    8 : => "" ... ""

  2. До речі…
    Наші ізраїльські друзі вважають таке рішення неправильним – вони мріяли про щось більш кошерної ;-)

    хоча, з іншого боку, я вважаю, що вони просто не вміють точно формулювати свої мрії про кошерності.
    Ось дослівно їх умову задачі:

    Спрощення реалізації нижче стільки, скільки ви можете.
    Ще краще, якщо ви можете також підвищити продуктивність в рамках спрощення!
    FYI: Цей код закінчений 35 лінії і більш 300 жетони, але вона може бути записана в 5 лінії і менш ніж 60 жетони.

    Тестування показує повну еквівалентність func1() і func2().

    Проте, цей епізод підказує, що завдання може мати кілька цікавих варіантів рішення. Пропоную бажаючим активно зайнятися їх пошуками!

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

  4. ” код завдання потрібно б спростити майже не розбираючись що цей код повинен робити - за правилами формального синтаксису C ++.”
    Але це не дуже відповідає умові в самому завданні – там начебто потрібно спростити саму реалізацію. А значить, слід спочатку постаратися зрозуміти сенс функції, і тоді краще рішення стане очевидним:

    1. Трохи поправив. У вашому варіанті, не перевіряється умова, коли один із параметрів a і b дорівнює '′, а другий не знайдений у s, а параметр s != “\0”.

      короткий i=0;
      do {
      if (s[i]==a || s[i]==b) повернути s+i;
      } while (s[i ]!=’’);
      повертати NULL;

залишити коментар

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *