Tuesday, October 13th, 2009 07:38 pm
Придумал дурацкую задачку по C для интервью.

(a) Что делает следующий кусок кода:
char c;

c = getchar();

while (c != EOF) {
	putchar(c);
	c = getchar();
}


(б) Почему он перестаёт это делать при замене char на unsigned char?

(в) Как написать первый кусок кода более правильно?

Tuesday, October 13th, 2009 04:44 pm (UTC)
Лучше придумывай задачки про С++. Последнее указание партии и правительства.
Tuesday, October 13th, 2009 04:47 pm (UTC)
Даже если компилировать g++, эта задача не станет "задачей про С++".
Tuesday, October 13th, 2009 05:21 pm (UTC)
А зачем нужно заменять char на unsigned char? Можно заменить на int, и все будет работать.
Tuesday, October 13th, 2009 05:36 pm (UTC)

#ifndef EOF
# define EOF (-1)
#endif
Tuesday, October 13th, 2009 06:28 pm (UTC)
б, в
Tuesday, October 13th, 2009 05:45 pm (UTC)
б) Потому что EOF определен как (int)-1?
Tuesday, October 13th, 2009 06:06 pm (UTC)
вообще-то про -1 нигде не сказано.
Tuesday, October 13th, 2009 06:24 pm (UTC)
сказано про <0
Tuesday, October 13th, 2009 06:36 pm (UTC)
да, действительно
Tuesday, October 13th, 2009 06:40 pm (UTC)
Вполне годится для интервью:
Имеется набор из n чисел, в котором каждое число, кроме одного, встречается дважды.
Требуется найти непарное число за время O(n), используя O(1) памяти.
Tuesday, October 13th, 2009 06:54 pm (UTC)
По-моему, просто. Сложно, это когда в наборе два непарных числа (при тех же остальных условиях).
Tuesday, October 13th, 2009 06:58 pm (UTC)
Ты не индусов набираешь, надеюсь?
Tuesday, October 13th, 2009 06:53 pm (UTC)
O(1) ячеек памяти, считая, что каждое число в наборе помещается в одной ячейке.
Tuesday, October 13th, 2009 07:26 pm (UTC)
угу. вполне задачка на нормального чудака. жалко что таких будет очень мало.
Tuesday, October 13th, 2009 07:56 pm (UTC)
ИМХО, задачу нужно изначально упростить: подсказать что результат дает одна из логических операций. Если клиент не может сообразить какая, можно сказать что XOR и попросить объяснить почему.
Tuesday, October 13th, 2009 08:38 pm (UTC)
количество людей которые смогут объяснить после подсказки конечно больше, но все же не сильно больше.
Wednesday, October 14th, 2009 08:54 pm (UTC)
Да, это просто: заксорить. А теперь то же самое, но не одно число встречается единожды, а два.
Wednesday, October 14th, 2009 08:54 pm (UTC)
А, пардон, я вижу, вы этот вопрос уже выше задали.
Wednesday, October 14th, 2009 08:56 pm (UTC)
Да-да, я видел. Забавно, правда?
Wednesday, October 14th, 2009 06:39 am (UTC)
Пасибо, отличная задача! (Но не для интервью.)
Автора не знаю, но заранее уважаю :)
Tuesday, October 13th, 2009 10:31 pm (UTC)
Я тут читал книжку по алгебре и придумал вопрос для собеседования: "всегда ли верно утверждение 2*2 = 4?"
В мануале по getchar() это все, кажется, написано. Ты генту-то уже поставил? :-P
Вот сколько видел на собеседованиях вопросов "что делает этот кусок кода и как сделать лучше", все были совершенным пуком в лужу. И были они, ЕМНИП, везде. Бойан, в общем. Предлагаю новые формулировки:
-- что не делает этот кусок кода?
-- зачем здесь этот кусок кода?
-- какие ошибки не присутствуют в этом куске кода?
-- какие мануалы читал автор этого кода, а какие -- нет?
-- определите родной язык автора этого кода.

Ну, или хотя бы примеры брать с obfuscation contest'ов.
Wednesday, October 14th, 2009 06:36 am (UTC)
Я тебе столько идей предложил, а ты все про генту. :)
Sunday, October 18th, 2009 11:08 am (UTC)
Wednesday, October 14th, 2009 06:42 am (UTC)
Есть такой интересный для "почитать на досуге" текст, C for smarties. Почти любой параграф оттуда можно рассматривать как "дурацкую задачку" подобного типа.
Wednesday, October 14th, 2009 07:20 am (UTC)
А что должна выявить эта задачка? Умение запоминать man-ы?
Wednesday, October 14th, 2009 07:39 am (UTC)
А зачем? В man-е написано что getchar возвращает int. Даже более подробно написано.
Почему вы думаете что человек, который запомнил (именно запомнил) как заdefine-н EOF будет писать лучше, быстрее, правильнее?
Wednesday, October 14th, 2009 07:50 am (UTC)
> Кроме того, интервью не состоит из одной задачи, и мне интересно не столько то, решил ли человек задачу, сколько то, что он при этом говорит

Да, это правильно :-)