FizzBuzz тест
Сегодня я впервые написал FizzBuzz тест.
Узнал я про него из ежегодного опроса stackoverflow. Они интересовались прямо: «Have you ever been asked to solve FizzBuzz in an interview?». Пройдя по вполне рабочей ссылке, я оказался на странице, которая поясняла, что Fizz-Buzz тест – это тест, который мгновенно отфильтровывает 99.5% слабых кандидатов на работу программиста.
Напишите программу, которая выводит на экран числа от 1 до 100. Для множителей 3 выведите на экран Fizz вместо числа, а для множителей 5 – Buzz. Для чисел являющихся множителями одновременно и 3, и 5 выведите на экран FizzBuzz.
Серьзно? 99.5%?
Крайне удивленный, я создал файл
Далее я решил прочесть объяснение что же не так с этим тестом (spoilers ahead).
Оказалось все довольно просто:
P.S. Довольно интересно смотреть на разные другие решения этого теста. Меня, например, поразило в одном из примеров использование символа перевода каретки для решения.
Узнал я про него из ежегодного опроса stackoverflow. Они интересовались прямо: «Have you ever been asked to solve FizzBuzz in an interview?». Пройдя по вполне рабочей ссылке, я оказался на странице, которая поясняла, что Fizz-Buzz тест – это тест, который мгновенно отфильтровывает 99.5% слабых кандидатов на работу программиста.
Напишите программу, которая выводит на экран числа от 1 до 100. Для множителей 3 выведите на экран Fizz вместо числа, а для множителей 5 – Buzz. Для чисел являющихся множителями одновременно и 3, и 5 выведите на экран FizzBuzz.
Серьзно? 99.5%?
Крайне удивленный, я создал файл
kappa.py
и накидал код, который выполнял задание полностью. На страничке code golf залил его и получил результат – успешно, 253 символа, время выполнения 0.023026 секунды.Далее я решил прочесть объяснение что же не так с этим тестом (spoilers ahead).
Оказалось все довольно просто:
- При выполнении этого теста кандидатам приходиться делать то, на что у них нет механической копипасты с лекций и семинаров.
- Эту задачу нельзя линейно запрограммировать по ходу задания – если человек просто идет по тексту и пишет if-else условия по пути, то под конец он оказывается в ловушке деления и на 3, и на 5.
P.S. Довольно интересно смотреть на разные другие решения этого теста. Меня, например, поразило в одном из примеров использование символа перевода каретки для решения.
#include <iostream>
int main()
{
for(int i = 1; i <= 100; ++i)
{
std::cout << i << '\r'; // return to beginning of line for overwriting with "Fizz" or "Buzz"
if(i % 3 == 0) std::cout << "Fizz";
if(i % 5 == 0) std::cout << "Buzz";
std::cout << '\n';
}
return 0;
}
Комментарии
Отправить комментарий