Летняя стажировка 2010. Тестовая задача.
В прошлом году было огромное количество желающих попасть на Летнюю Стажировку СКБ Контур. Нам пришлось потратить довольно много времени изучая ваши заявки и порой, признаемся, жертвовать детальностью их изучения. Как настоящие разработчики, мы решили автоматизировать этот рутинный процесс! :-) Для этого нам предстояло придумать простенькую, но интересную тестовую задачу, которая бы помогала выявлять интересных нам кандидатов среди всех прочих.
В частности мы хотели с помощью задачи отфильтровать людей не знакомых с языком C# (основным языком разработки в нашей компании) и его библиотекой типов. NET Framework. Поэтому, если вы ещё не знакомы с C# и. NET Framework, то для решения задачи вам придется это исправить.
1. Решением задачи должен быть один файл с программой на языке C#. Мы просим поместить все решение в один файл, чтобы решения было проще проверять. Вы можете по каким-либо причинам решить послать нам еще какие-то cs-файлы (например, тесты), но тогда лучше на всякий случай явно пояснить, какой из имеющихся cs-файлов содержит решение.
2. Программа может использовать все что угодно из стандартных библиотек. NET Framework 2.0 или 3.5.
Кроме того, мы хотели сделать задачу достаточно простой, чтобы вам не пришлось тратить на нее много времени. В результате появилась вот такая первая версия:
Написать утилиту командной строки, которая принимает один аргумент — имя xml-файла. Можно рассчитывать на то, что xml-файл будет всегда корректный.
Утилита должна напечатать на консоль одно целое число — максимальную глубину вложенности xml-элементов, в переданном ей xml-файле.
Вот пара примеров поясняющих суть задания. Для файла:
<xml/>
глубина вложенности — 0, а для файла
<depth_0>
<depth_1 a="v">text, attributes do not matter — only elements</depth_1>
</depth_0>
глубина вложенности — 1.
Какая скучная, тривиальная и неинтересная задача, не правда ли? Нет, в таком виде задача нас не удовлетворяла. Поэтому мы начали придумывать дополнительные хитрые требования так, чтобы сделать из нее настоящий вызов для программиста! Да, придумалось довольно необычное и совершенно не жизненное требование, но тем интереснее должен стать процесс решения задачи для вас! Итак, дополнительное требование:
3. Исходный код программы не должен содержать подстрок "while", "do", "for" и "goto".
Гм... Но ведь каждый хороший студент компьютерной специальности должен знать этот фундаментальный факт: любую программу с циклами можно переписать без циклов. Задача стала интереснее, но по-прежнему оставалась довольно простой и понятной, а как следствие не давала действительно умным кандидатам возможности выделиться среди остальных. Поэтому мы добавили ещё одно требование. На этот раз очень жизненное и реальное, но при этом не обязательное. Если у вас не получается его удовлетворить — вы все равно можете прислать ваше решение нам!
4. Хорошо бы, чтобы ваша программа могла работать с очень большими xml-файлами (чем больше, тем лучше). В реальности обычно xml-файлы не бывают очень уж глубокими, но зато бывают очень длинными. Поэтому можно полагаться на то, что искомая глубина xml-файла будет не более 1000.
Ну вот, теперь задача стала по настоящему интересной!
Впрочем у хорошего разработчика она все ещё займет не боле 15 минут (хоть и заставит несколько призадуматься перед тем, как начать писать код), так что не пугайтесь раньше времени. :-)
Удачи в решении!
Появились вопросы? Задай их по адресу: *****@***ru


