Здравствуйте, Nik_1, Вы писали:
N_>Слова типичного сишника Что за такая паническая боязнь ООП?
это не боязнь ООП. это непонимание зачем делать сложным простые вещи? я предложил свой вариант решения, который быстро писать и легко сопровождать. предложите свой. с учетом, что вы запросили в четыре (!) раза больше времени (на самом деле даже больше, ибо мне и 25 минут много), от вас ожидается нечто-суперское. производительность или расщиряемость.
а вот типичная болезнь Объективно Озабоченных Программистов -- тащить общее решение с могучей архитектурой там, где с лихвой хватает простого частного решения.
вы думаете -- чтобы такого добавить в программу, чтобы показать свою крутость, а вот я думаю -- а что из нее еще можно выкинуть. иногда чуть ли не до драк доходит. вот тут решил задачу в одну строку. коллеги говорят, что она будет тормозить, т.к. по их мнению у меня сложность в худшем случае O(2^N). в ответ я прикрутил профилировку и показал, что в худшем случае это 35 ms, когда все остальное занимает секунды и что даже если эти 35 ms оптимизировать до нуля, то никто не заметит никаких изменений.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Дабы минимизировать дальнейшее время при выборе кандидата, просьба решить тестовое задание, по итогам решения которого мы сможем пригласить Вас на собеседование. Решенное задание просьба отправить на электронный адрес jobs@CENSORED.ru (оно должно занять не более 25 минут)
Также Вы можете более подробно ознакомиться с вакансией программист С++, размещенной на нашем сайте www.CENSORED.ru в разделе вакансии.
Реализовать на языке C++ консольное приложение, принимающее 2 параметра: <format> — ID формата (1 — арифметическое выражение) <data> — определяется форматом. Для формата 1 — арифметическое выражение. Результат работы приложения определяется форматом. Для формата 1 — вывод в stdout результата вычисления арифметического выражения. Реализовать простейшую поддержку арифметического выражения в виде <Операнд> <Операция> <Операнд> <Операнд> — десятичная целочисленная константа <Операция> — "+", "-", "/", "*" При решении задачи исходить из того факта, что в дальнейшем форматы будут добавляться. Реализация должна быть кроссплатформенной. Необходима полноценная обработка ошибок. Можно использовать любые библиотеки и любой компилятор, поддержка G++ 4.x обязательна.
Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни?
М>>c) с учетом простоты задания и времени, отпущенного на его решения, можно предположить, что оно дается для отсеивания явных неадекватов. кстати, попытки городить архитектуру на пустом месте делая за час то, что можно сделать за пять минут -- это тоже неадекват. причем клинический без надежды на исцеление. если человек пишет switch, то есть шансы, что он научится, а вот если воздвигает классы, там где они не нужны, то он перезанимался и теперь будет везде лепить монстров.
N_>Слова типичного сишника Что за такая паническая боязнь ООП?
Есть класс людей, которые пишут слишком generic код с ООП/темплейтами вместо того чтобы то же самое написать просто и понятно. Как говорил один коллега, такое впечатление что есть конторы, в которых считается лоховтсвом писать просто
...Отсеивающий тех, кто не видит, что полноценого парсинга арифметических выражений в задаче не требуется.
В текущем вариант условия действительно делается за полчаса.
Здравствуйте, Sashaka, Вы писали:
S>Дабы минимизировать дальнейшее время при выборе кандидата, просьба решить тестовое задание, по итогам решения которого мы сможем пригласить Вас на собеседование. Решенное задание просьба отправить на электронный адрес jobs@CENSORED.ru (оно должно занять не более 25 минут)S>Реализовать на языке C++ консольное приложение, принимающее 2 параметра: <format> — ID формата (1 — арифметическое выражение) <data> — определяется форматом. Для формата 1 — арифметическое выражение. Результат работы приложения определяется форматом. Для формата 1 — вывод в stdout результата вычисления арифметического выражения. Реализовать простейшую поддержку арифметического выражения в виде <Операнд> <Операция> <Операнд> <Операнд> — десятичная целочисленная константа <Операция> — "+", "-", "/", "*" При решении задачи исходить из того факта, что в дальнейшем форматы будут добавляться. Реализация должна быть кроссплатформенной. Необходима полноценная обработка ошибок. Можно использовать любые библиотеки и любой компилятор, поддержка G++ 4.x обязательна. S>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни?
Не могу оценить сложность написания именно на С++, но само задание кажется вполне нормальным. Только оно не на 25 минут, конечно.
Здравствуйте, Donz, Вы писали:
D>Здравствуйте, Sashaka, Вы писали:
D>Не могу оценить сложность написания именно на С++, но само задание кажется вполне нормальным. Только оно не на 25 минут, конечно.
Здравствуйте, olegkr, Вы писали:
O>Здравствуйте, Alexey_VL, Вы писали:
A_V>>Учитывая, что можно использовать библиотечные функции, вполне можно написать за 25 минут. O>Ну так напиши. Время пошло
Отличный ход — запустить время, пока чел не в курсе
Мафиозная диктатура это нестабильность. Если не мафиозная диктатура, то Конституция и демократия.
Здравствуйте, landerhigh, Вы писали:
L>Мне было бы интересно, чем и как обеспечивается расширяемость кода, какие используются паттерны/подходы и так далее, причем одного-единственного верного варианта, как можно увидеть, тут нет.
Выделенное говорит о том, что лучшим решением будет забить на расширяемость. Т.к. все равно по условию задачи непонятно в какую сторону будет производиться расширяемость, соответственно с высокой вероятностью написанное расширяемое решение отправится в мусорку. Поэтому задача плохая, т.к. провоцирует на отбор программеров, которые не имея достаточной информации наворачивают на задачу кучу абстракций, что потом только мешает реализовывать новые требования.
По-моему, все, кто пишет про парсеры, невнимательно читали задание:
S>Реализовать простейшую поддержку арифметического выражения в виде <Операнд> <Операция> <Операнд> S> <Операнд> — десятичная целочисленная константа <Операция> — "+", "-", "/", "*"
Требуется разбирать только выражения из двух операндов и одной операции между ними. Без скобок, без приоритетов, операнды только целые числа.
Зачем тут какие-то парсеры?
Найти в строке один из символов "+", "-", "/", "*", разбить им строку на две части, эти части преобразовать в целое число с помощью atoi.
Не забыть, если atoi вернет ноль, проверить, действительно там ноль или ошибка.
Все на коленке делается, уложиться в 25 минут вполне можно — если на своем компьютере и в привычной среде разработки.
Здравствуйте, Sashaka, Вы писали:
S>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни?
на delphi подобное со скобочками методом рекурсивного спуска сделал за 2 часа
Здравствуйте, Sashaka, Вы писали:
S>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни?
Переписать решение из Страуструпа или найти готовое в инете займет примерно столько, я думаю.)
Здравствуйте, Sashaka, Вы писали:
S>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни?
Если взять Bison, то все это реально, но надо понимать чем занимается контора. Пишут парсеры на лету по несколько в день? Еще можно понять, чем либо иным — задание не имеет смысла.
P.S. Что всегда удивляет, что же так все скрывают названия контор? Думают, что контора оценит и даст бонус или кар опасаются?
Здравствуйте, Nik_1, Вы писали:
N_>Здравствуйте, мыщъх, Вы писали:
М>>Здравствуйте, Sashaka, Вы писали:
М>>25 минут это с отладкой и с подробными комментариями. а если через switch и без комментов, то тут и в 5 минут можно уложиться.
N_>Только в таком виде решение "зватьли на собеседование" было бы скорей всего отрецательным. Думаю всетаки хотели посмотреть на качество кода и архитектурные навыки, а не просто принципиальную возможность кое-как написать такую программку. А с ООП тут есть где развернуться Вобщем вместе с проектированием и отладкой задача примерно на час.
a) задание _очень_ простое, развернуться тут негде. надеюсь, если нас просят скопировать строку A в строку B, то использование контроллера DMA было бы излишним (и нерабочим выше XT).
b) в ТЗ сказано -- 25 минут. вы говорите -- час. я так понимаю, работадателя вы уже завалили, объяснив ему, что он не прав и теперь его осталось затоптать ногами? я уже предложил архитектурное решение, свободно укладывающееся в 25 минут, где основная логика вынесена в строку вида "+", add, "-", sub. минусы и плюсы такого решения -- тема отдельного разговора, но это всяко лучше switch;
c) с учетом простоты задания и времени, отпущенного на его решения, можно предположить, что оно дается для отсеивания явных неадекватов. кстати, попытки городить архитектуру на пустом месте делая за час то, что можно сделать за пять минут -- это тоже неадекват. причем клинический без надежды на исцеление. если человек пишет switch, то есть шансы, что он научится, а вот если воздвигает классы, там где они не нужны, то он перезанимался и теперь будет везде лепить монстров.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, мыщъх, Вы писали: М>c) с учетом простоты задания и времени, отпущенного на его решения, можно предположить, что оно дается для отсеивания явных неадекватов. кстати, попытки городить архитектуру на пустом месте делая за час то, что можно сделать за пять минут -- это тоже неадекват. причем клинический без надежды на исцеление. если человек пишет switch, то есть шансы, что он научится, а вот если воздвигает классы, там где они не нужны, то он перезанимался и теперь будет везде лепить монстров.
Слова типичного сишника ;) Что за такая паническая боязнь ООП?
Здравствуйте, мыщъх, Вы писали:
М>Здравствуйте, Nik_1, Вы писали:
N_>>Слова типичного сишника ;) Что за такая паническая боязнь ООП? М>это не боязнь ООП. это непонимание зачем делать сложным простые вещи? я предложил свой вариант решения, который быстро писать и легко сопровождать. предложите свой. с учетом, что вы запросили в четыре (!) раза больше времени (на самом деле даже больше, ибо мне и 25 минут много), от вас ожидается нечто-суперское. производительность или расщиряемость.
Это тестовое задание, а не реальный проект. Думаю, они там всетаки хотели уведеть некоторые архитектурные навыки, а не умение просто написать коекак эту простую задачу.
Здравствуйте, Sashaka, Вы писали:
D>>Не могу оценить сложность написания именно на С++, но само задание кажется вполне нормальным. Только оно не на 25 минут, конечно. S>Задание нормальное, неадекватно время выполнения.
Не стоит так зацикливаться на времени исполнения. Мало ли кто приложил руку к составлению письма. Мб проджект-менеджер полез в найм и решил, что у него будет "дримтим", которая все делает за полчаса.
А ты с ними до этого общался? Если они действительно неадекваты, это было бы видно сразу.
Здравствуйте, Sashaka, Вы писали:
S>Пришло письмо:
S>Дабы минимизировать дальнейшее время при выборе кандидата, просьба решить тестовое задание, по итогам решения которого мы сможем пригласить Вас на собеседование. Решенное задание просьба отправить на электронный адрес jobs@CENSORED.ru (оно должно занять не более 25 минут) S>Также Вы можете более подробно ознакомиться с вакансией программист С++, размещенной на нашем сайте www.CENSORED.ru в разделе вакансии.
S>Реализовать на языке C++ консольное приложение, принимающее 2 параметра: <format> — ID формата (1 — арифметическое выражение) <data> — определяется форматом. Для формата 1 — арифметическое выражение. Результат работы приложения определяется форматом. Для формата 1 — вывод в stdout результата вычисления арифметического выражения. Реализовать простейшую поддержку арифметического выражения в виде <Операнд> <Операция> <Операнд> <Операнд> — десятичная целочисленная константа <Операция> — "+", "-", "/", "*" При решении задачи исходить из того факта, что в дальнейшем форматы будут добавляться. Реализация должна быть кроссплатформенной. Необходима полноценная обработка ошибок. Можно использовать любые библиотеки и любой компилятор, поддержка G++ 4.x обязательна.
S>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни?
Это ASSIST. Мне присылали без указания времени. Заранее узнайте у HR за какие плюшки (насколько большие и пропеченые) придется работать.
Неоконченная мысль всегда казалась Шри Япутре слишком
Здравствуйте, Donz, Вы писали:
D>Здравствуйте, Sashaka, Вы писали:
S>>Дабы минимизировать дальнейшее время при выборе кандидата, просьба решить тестовое задание, по итогам решения которого мы сможем пригласить Вас на собеседование. Решенное задание просьба отправить на электронный адрес jobs@CENSORED.ru (оно должно занять не более 25 минут)S>Реализовать на языке C++ консольное приложение, принимающее 2 параметра: <format> — ID формата (1 — арифметическое выражение) <data> — определяется форматом. Для формата 1 — арифметическое выражение. Результат работы приложения определяется форматом. Для формата 1 — вывод в stdout результата вычисления арифметического выражения. Реализовать простейшую поддержку арифметического выражения в виде <Операнд> <Операция> <Операнд> <Операнд> — десятичная целочисленная константа <Операция> — "+", "-", "/", "*" При решении задачи исходить из того факта, что в дальнейшем форматы будут добавляться. Реализация должна быть кроссплатформенной. Необходима полноценная обработка ошибок. Можно использовать любые библиотеки и любой компилятор, поддержка G++ 4.x обязательна. S>>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни?
D>Не могу оценить сложность написания именно на С++, но само задание кажется вполне нормальным.
Здравствуйте, Sashaka, Вы писали:
S>Пришло письмо:
S>Дабы минимизировать дальнейшее время при выборе кандидата, просьба решить тестовое задание, по итогам решения которого мы сможем пригласить Вас на собеседование. Решенное задание просьба отправить на электронный адрес jobs@CENSORED.ru (оно должно занять не более 25 минут) S>Также Вы можете более подробно ознакомиться с вакансией программист С++, размещенной на нашем сайте www.CENSORED.ru в разделе вакансии.
S>Реализовать на языке C++ консольное приложение, принимающее 2 параметра: <format> — ID формата (1 — арифметическое выражение) <data> — определяется форматом. Для формата 1 — арифметическое выражение. Результат работы приложения определяется форматом. Для формата 1 — вывод в stdout результата вычисления арифметического выражения. Реализовать простейшую поддержку арифметического выражения в виде <Операнд> <Операция> <Операнд> <Операнд> — десятичная целочисленная константа <Операция> — "+", "-", "/", "*" При решении задачи исходить из того факта, что в дальнейшем форматы будут добавляться. Реализация должна быть кроссплатформенной. Необходима полноценная обработка ошибок. Можно использовать любые библиотеки и любой компилятор, поддержка G++ 4.x обязательна.
S>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни?
Если я правильно понял задание, все что нужно это по сути взять строчку с арифметическим выражением из целых и вывести чему равен результат. Учитывая, что можно использовать библиотечные функции, вполне можно написать за 25 минут.
Мафиозная диктатура это нестабильность. Если не мафиозная диктатура, то Конституция и демократия.
Здравствуйте, Sashaka, Вы писали:
S>Пришло письмо:
Еще раз — вопрос не в сложности задания, а в самой постановке вопроса "не более 25 минут". Вот кому-нибудь дают задания на работе на 25 минут?
А если бы давали, долго бы вы так проработали? В чем смысл устраивать гонку? Как подразумевается оценивать время выполнения задания? От момента получения письма? Или время не контролируется и это такое предупреждение кандидатам о "ритме" работы в данной компании? Или присылают кусок говнокода на WinAPI, строк 100, надо добавить функциональность, найти баги и отрефакторить за 3 часа, в чем смысл? Или вот еще задание, просто для того чтобы пригласили на собеседование:
Реализовать сервер обмена сообщениями.
ОС Linux
Требования:
— регистрация и авторизация пользователя по логину и паролю
— передача сообщения от одного пользователя нескольким
— передача сообщения от одного пользователя другому (приватное сообщение)
— тестовый клиент, позволяющий протестировать реализованный функционал
Обосновать выбор или реализацию сетевого протокола
Обосновать выбор хранилища данных
Здравствуйте, Alexey_VL, Вы писали:
A_V>Учитывая, что можно использовать библиотечные функции, вполне можно написать за 25 минут.
Ну так напиши. Время пошло
Здравствуйте, Sashaka, Вы писали:
S>Пришло письмо:
S>Дабы минимизировать S>Реализовать на языке C++ консольное приложение, принимающее 2 параметра S>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни?
Как тестовое задание — очень хорошо. Такое задание позволяет оценить сразу много вещей — способность выдавать рабочий и тестируемый код, обработку ошибок, умение писать простой (25 минут!) и в то же время расширяемый код (поддержка многих форматов в будущем), знание стандартных библиотек. Время тоже вполне адекватно. Если не мудрить — то его достаточно (еще раз перечитайте требования — два параметра, одно примитивное арифметическое выражение).
31.03.2011 18:05, 637 пишет:
> > Как тестовое задание — очень хорошо. Такое задание позволяет оценить > сразу много вещей — способность выдавать рабочий и тестируемый код, > обработку ошибок, умение писать простой (25 минут!) и в то же время > расширяемый код (поддержка многих форматов в будущем), знание > стандартных библиотек. Время тоже вполне адекватно.
Да, если у вас на конторе рабочие задачи сравнимы с этой.
Здравствуйте, Sashaka, Вы писали:
S>Еще раз — вопрос не в сложности задания, а в самой постановке вопроса "не более 25 минут". Вот кому-нибудь дают задания на работе на 25 минут?
Нет, задачу нужно оценивать в том виде, в каком ее дает руководитель, а не пытаться на простенькую программу обработки элементарных арифметических выражений накручивать заварку кофе с использованием Azure в нагрузку.
S>А если бы давали, долго бы вы так проработали? В чем смысл устраивать гонку? Как подразумевается оценивать время выполнения задания? От момента получения письма? Или время не контролируется и это такое предупреждение кандидатам о "ритме" работы в данной компании? Или присылают кусок говнокода на WinAPI, строк 100, надо добавить функциональность, найти баги и отрефакторить за 3 часа, в чем смысл?
Смысл — в отборе адекватных кандидатов, умеющих анализировать поставленную задачу и решать ее адекватными средствами. И не боящихся сказать "начальник, да ты гонишь!". По делу, разумеется.
S> Или вот еще задание, просто для того чтобы пригласили на собеседование:
S>Реализовать сервер обмена сообщениями. S>ОС Linux S>Требования: S>- регистрация и авторизация пользователя по логину и паролю S>- передача сообщения от одного пользователя нескольким S>- передача сообщения от одного пользователя другому (приватное сообщение) S>- тестовый клиент, позволяющий протестировать реализованный функционал
S>Обосновать выбор или реализацию сетевого протокола S>Обосновать выбор хранилища данных
На знание TCP/IP что-ли?
Не требуется реализовывать полноценную безопасность, не стоят требования по числу клиентов, масштабируемости и т.п. Да и задачка, судя по всему, навеяна ПМ-у чтением в далекой молодости чего-нибудь типа "Секреты TCP/IP", в которых очень любят именно настольные обменники сообщениями. В качестве примеров.
Чего не так?
- Простите, профессор, не пса, а когда он уже был человеком.
— То-есть он говорил? Это еще не значит быть человеком. (с) Булгаков
Здравствуйте, Vzhyk, Вы писали:
V>31.03.2011 18:05, 637 пишет:
>> >> Как тестовое задание — очень хорошо. Такое задание позволяет оценить V>Да, если у вас на конторе рабочие задачи сравнимы с этой.
это тест. fuzz-buzz. причем здесь реальные задачи?
Здравствуйте, Sashaka, Вы писали:
S>Пришло письмо:
S>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, S>но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни?
даже с учетом того, что программирование не есть моя основная деятельность, за 25 минут это можно написать даже постоянно сверясь со справочником по сишным функциям.
как бы это делал я.
1) переводим операнд через atol (strloul);
2) заводим массив структур типа: операция, указатель на функцию (для скорости написания можно отказаться от структр и просто массив указателей, где чередуются указатели на операцию с указателями на функцию);
3) ну дальше поиск операции в массиве.
это -- если писать предельно расширяемо.
25 минут это с отладкой и с подробными комментариями. а если через switch и без комментов, то тут и в 5 минут можно уложиться.
задание для джуниоров. вот если бы вас попросили калькулятор написать в стиле 1-2*3 то это да, 25 минут это только если вы точно знаете какие библиотеки вам помогут и как их юзать.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, tlp, Вы писали:
tlp>...Отсеивающий тех, кто не видит, что полноценого парсинга арифметических выражений в задаче не требуется. tlp>В текущем вариант условия действительно делается за полчаса.
Для идеальных данных, да. Но ты надеюсь видел, что требуется обработка ошибок?
Здравствуйте, minorlogic, Вы писали:
M>Здравствуйте, мыщъх, Вы писали: M>... М>>это -- если писать предельно расширяемо.
M>Даже близко нерасширяемо помоему. M>...
почему? {"+", add, "-", sub, "*", mul, "/", div, 0}.
добавление новых операций очень легко. как и удаление. как и добавление синонимов. например, мы хотим поддержать "3 плюс 2" -- просто добавляем -- "плюс", add, -- и все. big num элементарно поддержать. flot поддерживается прозрачно.
а ваш вариант увидеть можно?
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, мыщъх, Вы писали:
М>Здравствуйте, minorlogic, Вы писали:
M>>Здравствуйте, мыщъх, Вы писали: M>>... М>>>это -- если писать предельно расширяемо.
M>>Даже близко нерасширяемо помоему. M>>... М>почему? {"+", add, "-", sub, "*", mul, "/", div, 0}. М>добавление новых операций очень легко. как и удаление. как и добавление синонимов. например, мы хотим поддержать "3 плюс 2" -- просто добавляем -- "плюс", add, -- и все. big num элементарно поддержать. flot поддерживается прозрачно.
А парсить ьсложные мат выражения?
М>а ваш вариант увидеть можно?
Здравствуйте, XuMuK, Вы писали:
S>>Реализация должна быть кроссплатформенной. Необходима полноценная обработка ошибок. Можно использовать любые библиотеки и любой компилятор
XMK>http://codepad.org/YEIooCr8 — поддержку форматов добавить за оставшиеся 10 минут =)
А можно ли считать буст кроссплатформенным? Я встречался по крайней мере с 2 платформами, куда он не портирован..
Здравствуйте, minorlogic, Вы писали:
M>Здравствуйте, мыщъх, Вы писали:
M>>>Даже близко нерасширяемо помоему. M>>>... М>>почему? {"+", add, "-", sub, "*", mul, "/", div, 0}. М>>добавление новых операций очень легко. как и удаление. как и добавление синонимов. например, мы хотим поддержать "3 плюс 2" -- просто добавляем -- "плюс", add, -- и все. big num элементарно поддержать. flot поддерживается прозрачно. M>А парсить ьсложные мат выражения?
во-первых, про них в ТЗ ни слова. во-вторых, при моем подходе легко и мы сохраним максимум кода.
изначально мы имели тривиальный вырожденный "парсер", принимающий три аргумента. допустим, теперь нам нужно реализовать полноценный калькулятор. уже написанная часть кода _не_ измениться, т.к. после разбивки сложного выражения на последовательность простых и опрделения порядка их вычисления мы вновь возвращаемся к задаче "операнд-операция-операнд".
в парсер можно реализовать как _независмый_ фронт-энд к уже написанной функции или даже консольной утилите, вызывая ее с аргументами командной строки.
но при _любом_ решении ТЗ это можно сделать. это не демонстрирует (не) расширяемость и если говорить о расширяемости, то только в контексте прикрутить bignum, hex-ввод, float...
хотя, да, тут вы правы. на стадии прикручивая float возникает проблема, т.к. нам сначала надо определить тип операндов, а только потом -- выяснить какими функциями мы их будем обрабатывать. в принципе, мы можем захотить складывать и умножать строки. а вот вычитание и деление для строк бессмысленно. и тогла нужно плясать от
1) определяем тип операндов:
2) переключаемся на таблицу функций для данного типа операндов;
но, черт, возьми!!! даже в этом случае мое решение будет работать!!! уже написанный код обрабатывает целочисленку. если нужно прикрутить строки, то создаем таблицу функций для строк {"+", cat_str, "*", mul_str, 0}.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, Ytz, Вы писали:
Ytz>Здравствуйте, XuMuK, Вы писали:
XMK>>http://codepad.org/YEIooCr8 — поддержку форматов добавить за оставшиеся 10 минут =)
Ytz>Где обработка ошибок? Например деления на ноль? Откуда информация, что числа числа и операторы разделены пробелами?
Про деление совершенно не подумал, но это одна своя функция, а про пробелы из 1го поста, там они есть.
Здравствуйте, midcyber, Вы писали:
M>Здравствуйте, XuMuK, Вы писали:
S>>>Реализация должна быть кроссплатформенной. Необходима полноценная обработка ошибок. Можно использовать любые библиотеки и любой компилятор
XMK>>http://codepad.org/YEIooCr8 — поддержку форматов добавить за оставшиеся 10 минут =)
M>А можно ли считать буст кроссплатформенным? Я встречался по крайней мере с 2 платформами, куда он не портирован..
function и bind — да, тем более что они будут в С++B
Здравствуйте, minorlogic, Вы писали:
M>Здравствуйте, мыщъх, Вы писали: M>... М>>это -- если писать предельно расширяемо.
M>Даже близко нерасширяемо помоему. M>...
Плагинами забабахать!
+ лог-систему с подключаемыми каналами вывода, ошибки спамить как в std::cerr, так и в syslog!
+ парсер командной строки с дружелюбным выводом доступных опций из подключенных модулей
+ написать тесты для разных случаев
Можно взять готовое и связать воедино Тогда работа сводится больше к интеграции, нежели непосредственной разработке..
Неоконченная мысль всегда казалась Шри Япутре слишком
Здравствуйте, мыщъх, Вы писали:
М>Здравствуйте, Sashaka, Вы писали:
S>>Пришло письмо:
S>>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, S>>но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни? М>даже с учетом того, что программирование не есть моя основная деятельность, за 25 минут это можно написать даже постоянно сверясь со справочником по сишным функциям.
М>как бы это делал я. М>1) переводим операнд через atol (strloul); М>2) заводим массив структур типа: операция, указатель на функцию (для скорости написания можно отказаться от структр и просто массив указателей, где чередуются указатели на операцию с указателями на функцию); М>3) ну дальше поиск операции в массиве.
М>это -- если писать предельно расширяемо.
М>25 минут это с отладкой и с подробными комментариями. а если через switch и без комментов, то тут и в 5 минут можно уложиться.
Только в таком виде решение "зватьли на собеседование" было бы скорей всего отрецательным. Думаю всетаки хотели посмотреть на качество кода и архитектурные навыки, а не просто принципиальную возможность кое-как написать такую программку. А с ООП тут есть где развернуться ;) Вобщем вместе с проектированием и отладкой задача примерно на час.
K> такое впечатление что есть конторы, в которых считается лоховтсвом писать просто
у меня тоже такое впечатление. только не о конторах, а о людях. впечатление, что они бояться написать просто, потому что окружающие могут посчитать их дураками. особенно умилем код вида "a = b << 1; // a = 2*b;". _любой_ компилятор это оптимизирует и сам, но писать 2*b это типа признать себя лохом.
так же непонятно слепое следование заветом: не использовать глобальные переменные и goto. если мне нужно по быстрому прикрутить логгирование в какой-то функции, то не передавать же мне дескриптор и флаги уровня логирования через арументы?
а Goto нужно не только для выхода из трех четырех циклов, но и goto err удобно использовать. во всяком случае с goto понятно. а вот бывают конструкции типа:
while(1)
{
if open_file_is_NOT_ok break;
while(1)
{
if allocate_memory_is_NOT_ok break;
close_the_file;
break;
};
free_the_block;
break;
};
ну и что с того что код хрен поймешь -- зато без goto. и это не первое апреля. такой код действительно доводилось видеть...
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, Ytz, Вы писали:
Ytz>Здравствуйте, tlp, Вы писали:
tlp>>...Отсеивающий тех, кто не видит, что полноценого парсинга арифметических выражений в задаче не требуется. tlp>>В текущем вариант условия действительно делается за полчаса.
Ytz>Для идеальных данных, да. Но ты надеюсь видел, что требуется обработка ошибок?
Здравствуйте, tlp, Вы писали:
tlp>Здравствуйте, Ytz, Вы писали:
Ytz>>Здравствуйте, tlp, Вы писали:
tlp>>>...Отсеивающий тех, кто не видит, что полноценого парсинга арифметических выражений в задаче не требуется. tlp>>>В текущем вариант условия действительно делается за полчаса.
Ytz>>Для идеальных данных, да. Но ты надеюсь видел, что требуется обработка ошибок?
tlp>Видел. Если не требуется — делается за 10 минут.
Здравствуйте, dilmah, Вы писали:
S>>Задание нормальное, неадекватно время выполнения. D>почему это? В С++ коде делаешь popen, и всю реализацию делаешь строчкой на шелле. Можно успеть.
Тогда будет не кроссплатформенно.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Sashaka, Вы писали:
S>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни?
У меня в универе такое задание было на 1 курсе, только без кроссплатформ. за минут 20 где-то и сделал, ну тут бы я за 25 не выкрутился.
Здравствуйте, dilmah, Вы писали:
D>>>почему это? В С++ коде делаешь popen, и всю реализацию делаешь строчкой на шелле. Можно успеть. V>>Тогда будет не кроссплатформенно. D>позикс кроссплатформен
Не везде есть шелл одинаковый.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, dilmah, Вы писали:
V>>Не везде есть шелл одинаковый. D>позикс специфицирует шелл (и awk, и другие утилиты). D>Не составляет труда писать на шелле портабельно.
Да нету этих утилит в винде.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, tlp, Вы писали:
tlp>...Отсеивающий тех, кто не видит, что полноценого парсинга арифметических выражений в задаче не требуется. tlp>В текущем вариант условия действительно делается за полчаса.
То есть, хотят нанять человека, который при виде неоднозначного и не полного ТЗ не задаст ни одного вопроса, не подумает о возможном дальнейшем развитии и поддержке проекта, а тупо выполнит именно то, что написано?
Это очень странный тест будет. Хотят обычно противоположное.
Здравствуйте, dilmah, Вы писали:
V>>Да нету этих утилит в винде. D>винда это маргинальная ОС. Сейчас все на *БСД, линукс, макОС и хромОС.
В огороде бузина, а в Киеве дядька
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, dilmah, Вы писали:
V>>Да нету этих утилит в винде. D>винда это маргинальная ОС. Сейчас все на *БСД, линукс, макОС и хромОС.
И вообще, отучаемся за всех говорить.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
D>То есть, хотят нанять человека, который при виде неоднозначного и не полного ТЗ не задаст ни одного вопроса, не подумает о возможном дальнейшем развитии и поддержке проекта, а тупо выполнит именно то, что написано?
Нет, всего лишь хотят отсеять тех, кто не умеет внимательно читать задание, прежде, чем его делать.
Остальное можно выяснить на собеседовании.
S>При решении задачи исходить из того факта, что в дальнейшем форматы будут добавляться. Реализация должна быть кроссплатформенной. Необходима полноценная обработка ошибок. Можно использовать любые библиотеки и любой компилятор, поддержка G++ 4.x обязательна.
Уж на что я противник тестовых заданий (точно бы не стал делать и это), но в данном случае хочется даже выразить свое уважение его авторам.
Прикол в выделенном. Наговнокодить всякой фигни много времени не надо. Думаю, тут прикол в том, каким образом будет обеспечиваться расширяемость.
Если бы я проверял результат решения, то собственно на правильность реализации парсера и корректности выполнения операций даже и не стал бы смотреть. Мне было бы интересно, чем и как обеспечивается расширяемость кода, какие используются паттерны/подходы и так далее, причем одного-единственного верного варианта, как можно увидеть, тут нет.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, landerhigh, Вы писали:
L>>Мне было бы интересно, чем и как обеспечивается расширяемость кода, какие используются паттерны/подходы и так далее, причем одного-единственного верного варианта, как можно увидеть, тут нет.
U>Выделенное говорит о том, что лучшим решением будет забить на расширяемость. Т.к. все равно по условию задачи непонятно в какую сторону будет производиться расширяемость,
Вообще-то в условии задачи черным по белому написано "предусмотреть возможность добавления форматов".
Сделать это можно полусотней разных методов.
Здравствуйте, мыщъх, Вы писали:
М>с учетом, что вы запросили в четыре (!) раза больше времени (на самом деле даже больше, ибо мне и 25 минут много), ...
В два раза с небольшим.
В часе 60 минут, а не 100 (surprise!)
Здравствуйте, midcyber, Вы писали:
M>Здравствуйте, XuMuK, Вы писали:
S>>>Реализация должна быть кроссплатформенной. Необходима полноценная обработка ошибок. Можно использовать любые библиотеки и любой компилятор
XMK>>http://codepad.org/YEIooCr8 — поддержку форматов добавить за оставшиеся 10 минут =)
M>А можно ли считать буст кроссплатформенным? Я встречался по крайней мере с 2 платформами, куда он не портирован..
какие? мне тут доводилось сталкиваться с одной, где собрать буст не удалось... но кое-что из header only libraries всетаки работало...
Здравствуйте, Sashaka, Вы писали:
S>Пришло письмо:
S>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни?
1-е решение.
Берем Tcl/Python или т.п. Встраиваем в свою прогу. Передаем ей текст выражения — вот вам и результат с обработкой ошибок. Можно ведь юзать любые библиотеки. Tcl/Python вполне себе переносимы.
2-е решение.
Берем генератор парсеров и пишем коротенькую грамматику для выражений, запихивая их вычисление в semantic actions.
Здравствуйте, _Obelisk_, Вы писали:
_O_>Здравствуйте, Sashaka, Вы писали:
S>>Пришло письмо:
S>>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни?
_O_>1-е решение. _O_>Берем Tcl/Python или т.п. Встраиваем в свою прогу. Передаем ей текст выражения — вот вам и результат с обработкой ошибок. Можно ведь юзать любые библиотеки. Tcl/Python вполне себе переносимы.
_O_>2-е решение. _O_>Берем генератор парсеров и пишем коротенькую грамматику для выражений, запихивая их вычисление в semantic actions.
Ок, ты крут. Речь вообще-то не про сложность задания, а про 25 минут. А если ты никогда не использовал Tcl/Python или генератор парсеров то за 25 минут вряд ли уложишься. Опять же то что ты его не использовал ничего не говорит о твоем уровне как программиста.