bad_test
Завдання для програми Become a Developer
Завдання - знайти наступні чотири/шість значень:
- максимальне число в файлі;
- мінімальне число в файлі;
- медіану ( https://goo.gl/hiCwVw );
- середнє арифметичне значення ( https://goo.gl/XJeAjZ );
- найбільшу послідовність чисел (які ідуть один за одним), яка збільшується (опціонально)
- найбільшу послідовність чисел (які ідуть один за одним), яка зменьшується (опціонально)
Запропонований метод рішення повинен знаходити всі чотири/шість величин з файлу не більше ніж за 90 секунд.
Обмеження #1:
Будь-яка людина повинна мати можливість скористатися вашим методом. Це означає, наприклад, якщо для вирішення завдання Ви використовували свою власну програму, то будь-яка інша людина повинна мати можливість її скомпілювати/запустити і т.д.; якщо Ви використовували сторонні програми/утиліти, то будь-яка людина повинна мати можливість їх також встановити та користуватися; також будь-яка людина може взяти зовсім інший файл з іншим набором цілих чисел і знайти всі чотири вказані величини;
Обмеження #2:
при вирішенні задачі не можна використовувати нелегальне програмне забезпечення (пропрієтарне ПЗ, яке зазнало злому, піратські копії ПЗ, тощо). Також якщо ви запозичили ідею рішення, ПЗ або вихідні джерела (або якусь їх частину) у друга/колеги/в інтернеті/де-завгодно, то згадайте джерело.
РІШЕННЯ:
Рішення виглядає як API, що має лише один ендпоінт. Можна завантажити .txt файл, розміром до 100мб. Сервіс зчитає всі цілі числа з файлу та видасть відповіді разом з часом виконаня у вигляді JSON.
Сервіс задеплоїний у тестовий продакшн, тож він відповідає вимозі Обмеження #2 стосовно того що будь-хто має можливість скористатися методом. Для того щоб протестувати, перейдіть за посиланням:
https://bad-test.foradmin.pp.ua
Код сервісу пожна подивитись за посиланням:
https://github.com/markraiter/bad_test
Для вирішення завдання використовується мова програмування Go (Golang), яка має потужний інструмент управління конкурентністю завдяки горутинам.
Цей код використовує горутини для обчислення максимального та мінімального значень, медіани та суми чисел одночасно, що дозволяє використовувати конкурентність для прискорення обчислень. Також використовується оптимальний алгоритм для пошуку медіани та обчислення суми чисел. Завдяки цьому, файл, який запропоновано в завданні (https://drive.google.com/file/d/1LxSB6UEAVK0NLgU0ah5y0CBbD0gL_oO9/) обробляється за 4,9 секунд.