/for-twin

Тестовое задание для twin

Primary LanguagePHP

Тестовое задание для Junior PHP Backend разработчика

Предположим, у нас есть доступ к последовательности целых чисел произвольной длины. Вся последовательность заранее неизвестна. Мы можем получать только одно число за раз (например, если читаем данные из сокета или файла). Программно мы можем оформить это в виде генератора случайных чисел:

$digits = function(int $length)
{
    while ($length > 0) {
        yield mt_rand();
        --$length;
    }
};

Требуется:

Написать класс принимающий на вход последовательность произвольной длины n и возвращающий m самых больших чисел последовательности. Пример использования класса может быть таким:

$sequence = new Sequence($m);
foreach ($digits($n) as $number) {
   $sequence->add($number);
}
print_r($sequence->getMaxNumbers());

Или таким:

$sequence = new Sequence($digits($n), $m);
print_r($sequence->getMaxNumbers());

Ну или ваш вариант. Добавьте в класс Sequence логирование всех основных шагов вашего алгоритма.

Код следует написать на PHP версии 7.3.* или выше.

Как будет оцениваться тестовое задание: Корректность решения. Программа должно делать ровно то, что требуется в задании. Оптимальность. Чем меньше программа потребляет памяти и чем быстрее она работает, тем лучше. Чистота кода. Код будет проверяться на соответствие принципам SOLID и принципам написания “чистого” кода (т.е. насколько код читабелен и насколько легко в него можно вносить изменения).

Приемлемое время выполнения тестового задания: не более 8 часов.


composer install запустить тесты: vendor/phpunit/phpunit/phpunit src/TestSequence.php