Re[8]: Задача на собеседовании - обращение списка.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.02.12 18:55
Оценка: +1
Здравствуйте, зиг, Вы писали:

зиг>Здравствуйте, gandjustas, Вы писали:


H>>>>>>std::reverse(list.begin(), list.end())

.>>>>>Если в некой конторе будут ожидать такое решение, то лучше оттуда бежать, ибо требование знания наизусть функций стандартной библиотеки ни о чём хорошем не говорит.

H>>>>Это лучшее решение. В конторе где прогеры пишут реверс листа сами — очень многое говорит о неумении эффективно работать

зиг>>>никто нигде не пишет реверс лист сам.
зиг>>>это просто задача на интервью чтоб выявить тех кто не знает что такое список, как такое быстро и красиво закодить, и т.д.

G>>А зачем если в итоге такое все равно не пишут?

зиг>чтобы проверить способность писать аналогичное.
Тебе приходится часто на работе писать "аналогичное"? Тогда скорее всего ты чем-то не тем занимаешься.

зиг>работа не состоит из набора простых шагов, часто бывает что нужно что-то нестандартное или нетривиальное сделать.

Именно что состоит. Причем большинство этих шагов уже есть в готовых либах и надо уметь склеить кучу готовых кусочков в таком порядке чтобы получить правильный результат.
Работа программиста уже лет 40 как чисто инженерная деятельность, научной и исследовательской работы в мейнстримовом программировании почти нет.

зиг>с тем же успехом можно было дать реальную задачу из жизни, но тогда пришлось бы потратить кучу времени на объяснение деталей предметной области, все это ни к чему — лучше давать такие абстрактные задачи, требующие минимум вводных данных, показывающие возможность кандидата думать и быстро писать хороший код


Нахрен никому предметная область не нужна. Как говорил Фейнман: Если вы — ученый ядерный физик и не можете за 5 минут объяснить ребенку чем занимаетесь — вы шарлатан.
Как почитаешь форум — у всех супер-мега уникальные проекты, а на деле еще надо поискать чем принципиально две программы друг от друга отличаются.
Re[3]: Задача на собеседовании - обращение списка.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.02.12 18:58
Оценка:
Здравствуйте, b-3, Вы писали:

b-3>Здравствуйте, gandjustas, Вы писали:


G>>Потому что это задача не практическая, как и программирование сортировки. Все уже давно в либах есть и на практике никогда (в смысле вообще никогда) не приходится её писать.

G>>А если человек не делает что-то постоянно, то просто теряется навык.

b-3>А что — практическая задача? Навернуть экран linq-гуана, который автор без супер-мега-профайлера оптимизировать вообще отказывается, в качестве подтверждения корректности предлагает два с половиной юнит-теста, которые не покрывают даже всех 5 особых ситуаций, зато с понтом используют NMock c динамикой — это практическая задача? А аккуратно подвигать итератором — не практическая? Кажется, я понимаю, почему топик-стартер держится от таких "практиков", валящихся на детских задачках, по возможности подальше... Я б тоже держался подальше


Да ты не переживай, топистартер тупо решил "блеснуть эрудицией", занимается он таким де linq-гуаном, как и 100500 других программистов.
И ты кстати тоже таким занимаешься, может в другой форме, но суть не меняется.
Re[10]: Задача на собеседовании - обращение списка.
От: msk78 Россия http://miccro.livejournal.com
Дата: 24.02.12 19:08
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, msk78, Вы писали:


M>>Здравствуйте, Vzhyk, Вы писали:


V>>>24.02.2012 15:38, Паблик Морозов пишет:


>>>> кандидатов на публичных сайтах вакансий не ищем.

V>>>В общем мы поняли, что не подходим друг другу. Чтобы сэкономить твое и
V>>>свое время было бы хорошо, чтобы ты озвучил контору, куда мне не следует
V>>>слать резюме.
M>>Могу дать ответ на этот вопрос
M>>Компания BrightConsult.

G>Там же CRM в основном. Причем тут разворот списков? Кто-то решил повыделываться?

Как говорил Фоменко, чем бы дитя не тешилось, лишь бы не руками.
Судя по изначальному сообщению ветки про БрайтКонсалт, там сначала давали тесты на IQ: http://rsdn.ru/forum/job/4260056.aspx
Автор: Паттерн-Фигаттерн
Дата: 05.05.11
Re[9]: Задача на собеседовании - обращение списка.
От: зиг Украина  
Дата: 24.02.12 19:08
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, зиг, Вы писали:


зиг>>Здравствуйте, gandjustas, Вы писали:


H>>>>>>>std::reverse(list.begin(), list.end())

.>>>>>>Если в некой конторе будут ожидать такое решение, то лучше оттуда бежать, ибо требование знания наизусть функций стандартной библиотеки ни о чём хорошем не говорит.

H>>>>>Это лучшее решение. В конторе где прогеры пишут реверс листа сами — очень многое говорит о неумении эффективно работать

зиг>>>>никто нигде не пишет реверс лист сам.
зиг>>>>это просто задача на интервью чтоб выявить тех кто не знает что такое список, как такое быстро и красиво закодить, и т.д.

G>>>А зачем если в итоге такое все равно не пишут?

зиг>>чтобы проверить способность писать аналогичное.
G>Тебе приходится часто на работе писать "аналогичное"? Тогда скорее всего ты чем-то не тем занимаешься.
да уж конечно. все занимаются чем-то не тем, и только один чувак все про всех знает чем им надо заниматься на работе.

зиг>>работа не состоит из набора простых шагов, часто бывает что нужно что-то нестандартное или нетривиальное сделать.

G>Именно что состоит. Причем большинство этих шагов уже есть в готовых либах и надо уметь склеить кучу готовых кусочков в таком порядке чтобы получить правильный результат.
G>Работа программиста уже лет 40 как чисто инженерная деятельность, научной и исследовательской работы в мейнстримовом программировании почти нет.
бугага. т.е. реверс списка это научная и исследовательская работа, поняли, так и запишем

зиг>>с тем же успехом можно было дать реальную задачу из жизни, но тогда пришлось бы потратить кучу времени на объяснение деталей предметной области, все это ни к чему — лучше давать такие абстрактные задачи, требующие минимум вводных данных, показывающие возможность кандидата думать и быстро писать хороший код

G>Нахрен никому предметная область не нужна. Как говорил Фейнман: Если вы — ученый ядерный физик и не можете за 5 минут объяснить ребенку чем занимаетесь — вы шарлатан.
G>Как почитаешь форум — у всех супер-мега уникальные проекты, а на деле еще надо поискать чем принципиально две программы друг от друга отличаются.

жду с нетерпением краткого описания _реальной_ задачи, чтоб все мгновенно было понятно что и как надо сделать, и чтобы у меня не возникало тысячи попутных вопросов по ходу дела (мы же на интервью? у нас только 5 минут, не забываем.).
Re[3]: Задача на собеседовании - обращение списка.
От: minorlogic Украина  
Дата: 24.02.12 19:11
Оценка:
Я бы мог проконсультировать ваших HR за большие деньги. Но вам рекомендую поменять HR
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[2]: Задача на собеседовании - обращение списка.
От: _stun_ Россия  
Дата: 24.02.12 19:12
Оценка:
Здравствуйте, Dair, Вы писали:

D>Насколько плохо? Интересно.


Подозреваю, топикстартер хотел, чтобы типа "по месту" реверснули.
Re: Задача на собеседовании - обращение списка.
От: antonio_banderas Россия  
Дата: 24.02.12 19:18
Оценка:
Паблик Морозов, а озвучьте плз бюджет.
"вроде конкурентноспособная" это мало о чем говорит.
Для некоторых и 40-50 тыс. для Москвы конкурентноспособная.
А вдруг после этого всё станет на свои места? (в плане понимания чего-то в этой жизни)

Здравствуйте, Паблик Морозов, Вы писали:

ПМ>Почему 9 из 10 соискателей не могут её решить? Причём у людей минимум от 3-х лет опыта разработки, позиционируют они себя, как сеньёр-девелоперы, ЗП вроде конкурентноспособная (немного выше, если отсортировать вакансии с HH по зарплате и пропустить жöлтенькие).


ПМ>Может быть я что-то не понимаю в этой жизни? <skipped>
Re[3]: Задача на собеседовании - обращение списка.
От: Dair Россия  
Дата: 24.02.12 19:21
Оценка:
__>Подозреваю, топикстартер хотел, чтобы типа "по месту" реверснули.

ооок, чуть проще (вот тут уже три минуты, потому как меньше "переключение"):
template<class T>
struct Node<T>* reverseInPlace(struct Node<T>* n)
{
    struct Node<T>* prev = NULL;
    struct Node<T>* current = n;
    struct Node<T>* next = NULL;
    while (current != NULL)
    {
        next = current->next;

        current->next = prev;

        prev = current;
        current = next;
    }

    return prev;
}
Re[10]: Задача на собеседовании - обращение списка.
От: b-3 Россия  
Дата: 24.02.12 19:21
Оценка: 1 (1)
Здравствуйте, gandjustas, Вы писали:

ПМ>>Если подумать, может что получше напишу. Кстати, есть подозрение, что это сложнее обращения списка.

G>Ну вот. Ты проверку не прошел. Код очень простой, даже проще чем разворот списков.


i=0;
k = arr.length();
assert(n <= k);

while(n>0)
{
    if(rand(k) < n)
    {
        result.push_back(arr[i]);
        n--;
    }
    i++;
    k--;
}


Это не "очень простой" код, это обычный говнокод, поскольку скопипащено правильно, да не под ту задачу... По каждому элементу массива (i++) вызывается rand(k), до тех пор, пока n элементов не будут найдены. Количество вызовов rand(k) таким образом в точности равно номеру последнего выбранного элемента, что есть O(числа элементов массива). И камлания именем кнута да дейкстры как-то не отменяют факт, что ты в своём стиле, как обычно, пафосно облажался.

Спрашивается, а зачем писать фигню на хаскеле, если в цикле while(n > 0) { if (..) { push_back(arr[i] }; i++ }, где матожидание числа циклов, после которых n==0, при фиксированном n — пропорционально arr.length() — доблесный хаскелист не видит эквивалентости с линейным поиском элемента массива? Ну, в смысле о-больших?

Стыд и позор
Забанен с формулировкой "клинический дисидент".
Re[5]: Задача на собеседовании - обращение списка.
От: UA Украина  
Дата: 24.02.12 19:42
Оценка: +1
Здравствуйте, Паблик Морозов, Вы писали:

ПМ>C++ — это вообще одна большая помойка, не на что там равняться. Единственное, за что уважаю плюсовиков, то что среди них действительно чуть меньше полных идиотов — помойка ошибок не прощает, чуть что — сразу граблями по лбу.


Пока что этой помойке по эффективности и гибкости нет равных.
Re[8]: Задача на собеседовании - обращение списка.
От: зиг Украина  
Дата: 24.02.12 19:44
Оценка: -2
Здравствуйте, зиг, Вы писали:

зиг>>>никто нигде не пишет реверс лист сам.

зиг>>>это просто задача на интервью чтоб выявить тех кто не знает что такое список, как такое быстро и красиво закодить, и т.д.

AVV>>безапелляционность утверждений не есть признак ума


зиг>ваше утверждение безапелляционно!


эй вы там, у вас флешмоб сегодня чтоб мне рейтинг что ли повысить?
Re[15]: Задача на собеседовании - обращение списка.
От: Lloyd Россия  
Дата: 24.02.12 20:24
Оценка:
Здравствуйте, gandjustas, Вы писали:

L>>Ты можешь ответить на простой вопрос "зачем для разворота списка нужна рекурсия"?

G>Я тут в соседнем посте писал:


G>
G>list = x::list | nil
G>reverse nil = nul
G>reverse x:xs = (reverse xs)::[x]
G>


Какой-то совершенно новый для меня синтаксист java/C#-а.

G>Это наивное определение. И самое интересное что можно попробовать написать реализацию разворота списка на месте таким образом, но это будет крайне сложный код.


L>>Не нужно уходить в высокии материи и пытаться на основе того, что список пожет быть реализован как рекурсивная структура данных, делать вывод, что это неотъемлемое свойство списка.

G>А оно так и есть, даже если ты этого не знаешь.

Нет, это не так.

G>А вот как вывести нужный вариант:


G>Для начала попробуем определить разворот списка через другую, "родную" для списков операцию — свертку.


G>Но функции fold в C нету и надо написать. Обобщенный fold писать смысла нет, можно сразу написать (fold f)


G>Теперь можно и в C попробовать написать такой хелпер для С (пишу прямо в форуме не проверяя)


G>Далее видна хвостовая рекурсия в reverseHelper, её можно преобразовать в цикл.

G>Для этого условие выхода обращаем и делаем условием цикла, а вместо возврата делаем переход к следующей итерации


G>Далее убираем лишнюю косвенность из reverse


А теперь после всего написаного поднимаемся на пару-тройку сообщений вверх и с удивлением обнаруиваем, что ни haskell, ни C не обсуждается.
Re[6]: Задача на собеседовании - обращение списка.
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 24.02.12 20:42
Оценка:
Здравствуйте, Vzhyk, Вы писали:

V>За 20 лет ни разу не понадобилось писать оное самому. Всегда была в

V>наличии функция sort.

Было похожее: надо из 10 000 000 элементов вывести 1000 первых по определенному критерию. Обычный sort оверхид, ибо сортирует все. Может и есть что готовое, но проще было написать самому...
Re[14]: Задача на собеседовании - обращение списка.
От: Паблик Морозов  
Дата: 24.02.12 20:48
Оценка:
Здравствуйте, gandjustas, Вы писали:

ПМ>>Ты его скорее всего переписал с ошибкой. Потому что если взять n = 1, то в худшем случае он сделает k итераций.

G>Может ошибся в о\О нотации. Алгоритм проверил по работающей программе.

Нет, просто не умеешь оценивать сложность алгоритмов.

ПМ>>И рассказывайте мне теперь, что умение писать алгоритмы не нужно, потому что все алгоритмы есть в Интеренете. Этот есть, и фигали толку?

G>Действительно нету. Ведь ты умудряешься спрашивать на собеседовании один алгоритм, а сам другие, довольно известные, не знаешь и вывести не можешь.

Я привёл два варианта: O от длинны массива без разрушения массива, и O от кол-ва элементнов с разрушением. Ты привел O от длинны массива с O от кол-ва элементнов по памяти, т.е. не на много лучше моего первого варианта (хотя лучше, не спорю). При этом еще смог четко обозначить вычислительные сложности, и, подозреваю, не сможешь показать, что в твоём алгоритме вероятность выбора элемента не зависит от его позиции в массиве (хотя не зависит). По-моему это говорит только о том, что написание такого алгоритма требует чуть больше познаний в теории вероятностей и выч. сложности, чем написание обращения списка. Но утверждение о том, что человек, не способный написать обращение списка, вообще ни на что нихрена не способен — это не опровергает.

G>Ты кстати и сам писал что сначала не мог его сходу написать, а потом, натренировавшись на собеседованиях, запомнил (но не понял).


Я такого не писал.

ПМ>>Очень даже показательно. Есть те, кто могут и те, кто нет.

G>Ты — не можешь. О чем это говорит?

Неверная начальная посылка.
Re[6]: Задача на собеседовании - обращение списка.
От: Паблик Морозов  
Дата: 24.02.12 20:53
Оценка: -1
Здравствуйте, UA, Вы писали:

UA>Пока что этой помойке по эффективности и гибкости нет равных.


Тренды на TIOBE говорят об обратном.
Re[4]: Задача на собеседовании - обращение списка.
От: Паблик Морозов  
Дата: 24.02.12 21:04
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Я бы мог проконсультировать ваших HR за большие деньги. Но вам рекомендую поменять HR


Давайте обсудим это. Расскажите о своём успешном опыте в области консалтинговой деятельности, о компаниях, где вы смогли улучшить процесс найма сотрудников, о методиках оценки эффективности, во что это вылилось. Думаю, я мог бы договориться о небольшой презентации для менеджмента компании, если Вам действительно есть что сказать.
Re[5]: Задача на собеседовании - обращение списка.
От: minorlogic Украина  
Дата: 24.02.12 21:08
Оценка:
Здравствуйте, Паблик Морозов, Вы писали:

ПМ>Здравствуйте, minorlogic, Вы писали:


M>>Я бы мог проконсультировать ваших HR за большие деньги. Но вам рекомендую поменять HR


ПМ>Давайте обсудим это. Расскажите о своём успешном опыте в области консалтинговой деятельности, о компаниях, где вы смогли улучшить процесс найма сотрудников, о методиках оценки эффективности, во что это вылилось. Думаю, я мог бы договориться о небольшой презентации для менеджмента компании, если Вам действительно есть что сказать.


За большую плату я дам вам контакты квалифицированных HR, за ОЧЕНЬ большую плату переведу с ними переговоры о консалтинговых услугах.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[5]: Задача на собеседовании - обращение списка.
От: о_О
Дата: 24.02.12 21:15
Оценка: 1 (1)
Здравствуйте, Banned by IT, Вы писали:

BBI>Здравствуйте, UA, Вы писали:


UA>>Как то пишут вот так и до сих пор не запутались:

BBI>У STL один из самых хреновых стилей которые я когда либо видел.

Как у стл может быть стиль, если у каждого своя реализация? Или ты никакой кроме Динкумварэ не видел?
Re[2]: Задача на собеседовании - обращение списка.
От: Паблик Морозов  
Дата: 24.02.12 21:18
Оценка:
Здравствуйте, antonio_banderas, Вы писали:

_>Паблик Морозов, а озвучьте плз бюджет.

_>"вроде конкурентноспособная" это мало о чем говорит.
_>Для некоторых и 40-50 тыс. для Москвы конкурентноспособная.
_>А вдруг после этого всё станет на свои места? (в плане понимания чего-то в этой жизни)

Ну, допустим, от 100т.р. на руки.
Re[2]: Задача на собеседовании - обращение списка.
От: Паблик Морозов  
Дата: 24.02.12 21:26
Оценка:
Здравствуйте, Dair, Вы писали:

D>
D>template<class T>
D>struct Node {
D>    T value;
D>    struct Node* next;

D>    Node(const T& v):
D>        value(v),
D>        next(NULL)
D>    {
D>    }
D>};

D>template<class T>
D>struct Node<T>* createReversed(struct Node<T>* n)
D>{
D>    struct Node<T>* ret = NULL;
D>    struct Node<T>* currentNode = n;

D>    while(currentNode != NULL)
D>    {
D>        struct Node<T>* newNode = new struct Node<T>(currentNode->value);
D>        newNode->next = ret;

D>        currentNode = currentNode->next;
D>        ret = newNode;
D>    }

D>    return ret;
D>}
D>


D>Насколько плохо? Интересно.


Во-первых хватит писать сюда ответы, я еще надеялся поиспользовать эту задачу, во-вторых не заработает на списке из одного элемента. Правильный вариант у Stanislav V. Zudin, если интересно.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.