avva: (moose)
avva ([personal profile] avva) wrote2013-05-13 01:17 am

альтернатива физзбаззу

Цитирую из подзамочной записи с разрешения автора, который работает в американской компании и интервьюирует программистов:
Интесная закономерность выявляется. Мы начинаем интервью с того, что просим кандидата прочитать вот такой код, и сказать, что он делает. Как бы он назвал эту функцию?

private static int ok(int a, int b) {
   while (a >= b) a -= b;
   return a;
}

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

[identity profile] gineer.livejournal.com 2013-05-13 09:14 am (UTC)(link)
да, я тоже так понял, сперва
но, там, всетаки, еще было ЭТО требование -- каждое из чисел встречается один раз. ;)

Re: :)

[identity profile] gineer.livejournal.com 2013-05-13 09:16 am (UTC)(link)
да, там было еще условие "каждое число, не больше одного раза"

Re: :)

[identity profile] raydac.livejournal.com 2013-05-13 09:26 am (UTC)(link)
я давал такое задание, но как раз там и был расчет что проверяемый скажет что сортировать не надо, тут выглядит что тот кто проверял, получил задачу от кого то не разобравшись в чем прикол

[identity profile] huzhepidarasa.livejournal.com 2013-05-13 09:29 am (UTC)(link)
Это только начало подковырки, краешек.

[identity profile] huzhepidarasa.livejournal.com 2013-05-13 09:30 am (UTC)(link)
Ну, memmove копирует байты, по определению. Та что с типами как раз проблем нет.

Re: :)

[identity profile] gineer.livejournal.com 2013-05-13 09:35 am (UTC)(link)
вот в том и прикол,
что проверял тот кто сформулировал
и не понял, даже когда
я ему начал намекать/объяснять
в чем прикол.

[identity profile] huzhepidarasa.livejournal.com 2013-05-13 09:36 am (UTC)(link)
reduce это питоновское название для fold :)

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

Re: :)

[identity profile] raydac.livejournal.com 2013-05-13 09:38 am (UTC)(link)
такие задачи не редкость, я даже как то услышал как кто то назвал их радикс-сортировкой

[identity profile] mtyukanov.livejournal.com 2013-05-13 09:42 am (UTC)(link)
Так "подсчитать количество каждого номера и сгенерировать массив" -- это и есть "сортировать" для данного случая. Если бы под "сортировать" имелось в виду "пользоваться стандартными методами сортировки" -- это было бы просто глупо.

А так -- легкая, минутная с набивкой кода, задачка, заставляющая быстро чуть-чуть подумать -- и при этом вполне практичная, такие случаи сплошь и рядом.

Можно развить ее до более задумчивой, если запретить использовать для подсчета внешний контейнер -- предположим, дело происходит в условиях жестких ограничений по памяти, нужен чистый inplace. Или просто порассуждать, когда для хранения количеств лучше пользоваться массивом, а когда динамической структурой вроде списка. Ну и, да, спросить, а что будет, если добавить условие "неповторяющиеся числа". Все легкое, но все вполне осмысленное.

Re: :)

[identity profile] gineer.livejournal.com 2013-05-13 09:52 am (UTC)(link)
ИМХО
это вообще все из оперы странного понимания
когда человек, или из учебной програмы так понял, или сам где-то
но... никакой проверки этого знания не произошло (а в нашей ИТ сфере, для этого как-то и возможностей нету... код друг друга не читаем, ошибки не обсуждаем)
и вот оно потом и вылазит

особенно характерно это видно на примере "паттернов" ;)

[identity profile] gineer.livejournal.com 2013-05-13 09:54 am (UTC)(link)
дык... там и была эта оговорка, про "неповторяющиеся числа",
которая обессмысливает вообще сам вопрос
по крайней мере с моей т.з.
с точки зрения интервбюера -- все было ок :)

[identity profile] d-ohrenelli.livejournal.com 2013-05-13 09:57 am (UTC)(link)
Я проверил, это, кстати, стандартный алгритм сортировки, на3ывается сортировка подсчетом или
counting sort.

Так что я был не прав.

[identity profile] mopexod.livejournal.com 2013-05-13 10:01 am (UTC)(link)
В кондовом стандартном С нету байтов :(

http://en.wikipedia.org/wiki/C_data_types

[personal profile] laruldan 2013-05-13 10:03 am (UTC)(link)
Иногда нет. Если известно, что в большинстве случаев a меньше С*b, такой цикл может быть быстрее. Конечно, это сильно процессоро-зависимо.

[identity profile] mopexod.livejournal.com 2013-05-13 10:20 am (UTC)(link)
get, который делает delete - это как раз логично: сделал get, взял себе один, больше не осталось.

[identity profile] d-ohrenelli.livejournal.com 2013-05-13 10:27 am (UTC)(link)
А оно всегда так.
У меня есть 3 таких вопроса (рассказывать не буду), которые с точностью 99 % предсказывают результат интервью, причем годный человек отвечает на них мгновенно, а негодный трепыхается по 10 минут на каждом.

А на вопросе о разделении файла на четные и нечетные строчки валится такая дикая толпа народу, что подумать страшно.

[identity profile] vrml.livejournal.com 2013-05-13 10:38 am (UTC)(link)
В качестве байтов всегда использовались char.

[identity profile] huzhepidarasa.livejournal.com 2013-05-13 10:59 am (UTC)(link)
Есть. Читайте не википедию, а стандарт ;)

[identity profile] huzhepidarasa.livejournal.com 2013-05-13 11:01 am (UTC)(link)
А по секрету? ;)

[identity profile] dism.livejournal.com 2013-05-13 11:05 am (UTC)(link)
В каком плане разделении?

[identity profile] polenova.livejournal.com 2013-05-13 11:22 am (UTC)(link)
А что он имел в виду? Отсортировать массив длиной 256? Хотя, зачем тогда длину давать?
Получи я на интервью задачу из поста, я бы в первую очередь испугалась, что функцию написал тот, кто меня интервьюирует и что он ошибки сам не видит. И что тогда делать? Не всякому интервьюеру понравится, если ему сказать, что он дурак, даже в мягкой форме.
Я когда прочитала код, прежде чем думать, что он делает, я озадачилась, что он при входных нулях зацикливается. На интервью я бы, скорее всего, не знала, что отвечать, именно из-за глупости ситуации.
Забавно, что такого рода задачки очень любят давать русские, и никогда - американцы. Зададут дурацкий вопрос и смотрят с видом превосходства. Особенно нелепо, когда на интервью на позицию по вебу, например, просят написать сортировку пузырьком или обойти двоичное дерево. Как будто, если я умею писать сортировку, я что-то в вебе понимаю.

[identity profile] d-ohrenelli.livejournal.com 2013-05-13 11:23 am (UTC)(link)
Проще не бывает.

Задача:

Написать программу на языке С, которая принимает через командную строку 3 имени файла
и переписывает из первого файла все четные строчки во второй файл, а нечетные - в третий файл соответственно.

Дополнительные требования к задаче:
программа не должна падать.
программа должна работать корректно.
программа должна работать относительно быстро.

Писать надо на бумаге.
Справка ко всем стандартным функциям файлового ввода вывода - на столе.

Заваливаться там действительно негде, а поди ж ты - то у кого-то программа работает только с четным количеством строк(а на нечетном падает), то кто аргц не проверит и соответственно упадет, кто последнюю строчку не выдаст ...

[identity profile] mopexod.livejournal.com 2013-05-13 11:25 am (UTC)(link)
http://flash-gordon.me.uk/ansi.c.txt

Параграф '3.1.2.5 Types' (вообще не упоминает слово byte):
An object declared as type char is large enough to store any member of the basic execution character set.

Параграф '1.6 DEFINITIONS OF TERMS':
Byte --- the unit of data storage in the execution environment large enough to hold any member of the basic character set of the execution environment.

Каждый из них "large enough", но про одинаковость - ни слова.

[identity profile] d-ohrenelli.livejournal.com 2013-05-13 11:25 am (UTC)(link)
Как задачи сменим - обязательно расскажу :)

[identity profile] mopexod.livejournal.com 2013-05-13 11:27 am (UTC)(link)
*** ссылка на стандарт убрана из-за спамоловки ***

Параграф '3.1.2.5 Types' (вообще не упоминает слово byte):
An object declared as type char is large enough to store any member of the basic execution character set.

Параграф '1.6 DEFINITIONS OF TERMS':
Byte --- the unit of data storage in the execution environment large enough to hold any member of the basic character set of the execution environment.

Каждый из них "large enough", но про одинаковость - ни слова.

Page 5 of 11