Re[2]: Задача про Буратино и яблоки
От: Abalak США  
Дата: 28.06.12 14:08
Оценка:
Здравствуйте, abibok, Вы писали:

A>Правильный ответ: 5-2=3, потому что демонстрирует умение работать в условиях неполных данных, когда значения неизвестных величин выбираются так, чтобы задача имела практический смысл. Все остальное — это заумствующая школота, которая завалит проект.


Ну если мне не изменяет память, то правильный ответ 5, т.к. Буратино лично заявил Мальвине, что яблоки не отдаст.

Re: Задача про Буратино и яблоки
От: altmenn Германия DLR IPA
Дата: 06.07.12 15:58
Оценка:
Здравствуйте, Handie, Вы писали:

H>Для пятницы, есть очень интересная задача, которую задают кадидатам на собеседованиях. Цитирую


H>

H>сам любил задавать под конец собеседования тупые задачки типа "Буратино дали 5 яблок, потом 2 забрали, сколько яблок осталось у Буратино", но сразу предупреждал что задачки программерско-кодерские, и решение надо искать именно с точки зрения программерской.


H>Задачка оказалась совсем не простой. Главное в задаче что? Правильно — выбрать язык программирования и применить паттерны, показать так сказать класс программирования. Тут есть несколько походов.


H>1) Объектно ориентированный. Во первых надо создать класс Apple и переопределить оператор складывания яблок. Но ведь современные проги создаются по идеологии MVC а Apple это Model. Надо еще View — это будет класс AppleInspector и контроллер AppleAccountingBuratinoManager. Тут мы применили и объектно ориентированный дизайн и паттерны программирования. Не раскрыта тема метапрограммирования.


H>2) Метапрограммирование. В предыдущем случае мы написали класс Apple, но что будет если заказчику понадобятся груши? Правильно, класс Apple надо переименовать в класс AccountableAsset и сделать щаблоном. Во вторых, надо сделать инстанциацию количества ассетов на этапе компилляции, это на C++ делается через частичную специализацию когда у Буратино было 0 яблок, дали 5 и забрали 2. Частичная специализация шаблона даст нам частное решение на этапе компилляции. Общее решение останется в рантайме, но что делать, кто сказал что будет легко.


H>3) Функциональный подход. Императивные языки — вчерашний день. Компилятор сам должен вывести сколько у Буратино яблок. Мы должны задать только начальное состояние, представив подсчет яблок как совокупность последовательных состояний вычислительного процесса. Это же конечный автомат! Каждое добавление яблок изменят внутреннее состояние Буратино, каждый отъем яблок тоже сказывается на нем, причем отрицательно. Особенно полезен функциональный подход в связи с возможностью использования массового парралелизма, что позволит загрузить многопроцессорную систему.


H>Дальнейшие изыскания в объектно ориентированном дизайне показали — что буратино это контроллер! Тогда становится все ясно — яблоко это модель, Буратино это контроллер. Но контроллером яблок (в генерализованном виде AccountableAsset) может являться не только Буратино но и Бармалей. Тогда Буратино надо тоже генерализовать в виде ControllingActor. Ну осталось генерализовать View и у нас получается супергибкая модель, не не только Буратино может управлять владением яблок, но и Бармалей может владеть кокосами. Это же ахрененная гибкость получается, мы создали Univerasal Asset Management System. Это же практически архитектура логистического приложения!


H>Осталось только решить вопрос с финансированием. На месте кандидата я бы поинтересовался, готова ли контора оплатить дальнейшие изыскания в области управления ассетами. Вот, казалась бы простая задачка, а какая глубина за ней кроется!


А по-моему вам пора к врачу.
Безвыходных ситуаций не бывает!(Правило Кирхгофа)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.