PDA

Просмотр полной версии : Тест: какой ты программист?



Хыиуду
09.01.2007, 10:32
тру тест )

Какой ты программист?
Источник: datamation, march, 1977

norman grabowsky "what kind of programmer are you?"

Этот тест расскажет о вашем программировании больше, чем вы сами хотели бы знать. Переменная i представляет собой полное слово с фиксированной точкой. i принимает значения 1 либо 2. Если i оказалось равным 1, замените его на 2 и наоборот. Сравните ваше решение с десятью предложенными. Найдите одно или несколько наиболее похожих на ваше и прочитайте в разделе "категории"
краткую характеристику. Вы можете кодировать на любом языке, но для сравнения предпочтительнее всего использовать pl/1.

Р е ш е н и я.

1. if i='2' then i=1;
else i=2;

2. if i=2 then i=1;
if i=1 then i=2;

3. if i=1 then goto skip;
i=1;
goto done;
skip: i=2;
done:

4. j=2;
if i=2 then j=1;
i=j;

5. declare switch label;
. . .
if i=1 then switch=one;
if i=2 then switch=two;
goto switch;
one: i=2;
goto done;
two: i=1;
done:

6. declare onetwo(2) fixed bin(31) init (2,1);
. . .
i=onetwo(i);

7. i=3-i;

8. i=i-(i/2*2)+1;

9. if i=2
then do;
i=1;
end;
else do;
i=2;
end;

10. if i=1 then i=2;
if i!=2 then do;
put list('ПЛoxoe i - Зameheho ha 1');
i=1;
end;

Т Е С Т
К А Т Е Г О Р И И

1. Недавний выпускник школы ibm.
Не более одного из десяти окончивших эту школу знают разницу между 2 и "2". Удивительно, как можно вообще программировать без знания столь фундаментальной концепции.

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

3. Программист на fortran'е, только что окончивший курс pl/1. Да, старую собаку не научишь новым штукам! Это решение дает верный результат, но это все, что можно про него сказать.

4. Программист на ассемблере, прошедший тот же курс.
Это решение не является ни прямым ни эффективным. Возможно, это результат обучения языку pl/1. В нем есть та прелесть, что оно не содержит самомодифицирующих кодов, но это лишь результат возврата на
землю после изучения языка высокого уровня.

5. Системный аналитик.
Прекрасная иллюстрация для тех, кто думает, что обязанность системного аналитика - такая разработка алгоритма, в которой окажется некомпетентен даже хороший и опытный программист.

6. Сomputer scientist.
Наверное, это самое умное решение. Однако такие "сальто-мортали" без комментариев оказываются весьма непонятными. Искусство требует
жертв, а жертвой будет тот, кто разбирается в этой программе - может быть, сам автор через три месяца.

7. Математик.
Очень похоже на предыдущее, столь же элегантно, но опять-таки встает проблема: как же в нем разобраться?

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

9. Структурный программист.
Каждому ясно, что сие произведение - структурная программа. Иногда заботятся только о том, сколько колонок надо отступить от края листа. Настоящее структурное программирование - это прежде всего техника, и применять ее надо с умом.

10. Хороший программист.
Заметьте, что ни одно из решений 1-9 не проверяло диапазон значений i, а это весьма опасно. К несчастью, вас не спасут ни структурность, ни фантастические алгоритмы, ни элегантность решения, если вдруг окажется,
что i первоначально не было равно ни единице ни двойке.

(10 - программист-идиот, который проверяет условие, которое было написано в постановке задачи в качестве непреложной истины, и при этом пишет код, который дает некорректные результаты. Проверьте! Прим. Хыиуду)

Хыиуду
09.01.2007, 11:27
Совместно нарожаем еще вариантов?

11. i=1.5+0.5*sign(1.5-i)

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

somewhere
09.01.2007, 11:37
12. i=i xor 3

Программист-математик, но живущий в мире двоичных чисел. В отличие от 7) никогда не вызовет ошибок переполнения.

Absurd
09.01.2007, 15:56
13) i = i != 2 ? i == 1 ? 2 : throw "bad i" : 1;

Фанат Лиспа

Хыиуду
09.01.2007, 16:27
14. i=not(i-1)+1

Программист-философ, для которого существуют только истина и ложь, а весь остальной мир косвенно выражается через них

Absurd
09.01.2007, 17:09
15) Немецкий программист - прагматик. Пишет настоящие немецкие системы, которые работают не благодаря но вопреки.
switch(i) {
case 1: i = 2; break;
case 2: i = 1; break;
default: throw "bad i";
}

Хыиуду
09.01.2007, 17:34
16)
if i=1
then i:=2
else if i=2
then i:=1;

Либо абсолютный новичок, либо консервативный гуру, привыкший полагаться на принцип "Все самое лучшее, что можно написать, уже давно написано"

Absurd
09.01.2007, 17:59
17) Абсолютный консерватор, поддерживающий стиль типичной системы написанную олегофренами (и сам ставший таким же).

rs = exec_sql("select iqf from dcf1 where qts = " + i + ";");
if (is_empty(rs)) then
i = 1;
else
i = fetch(rs, 1);
end;

Хыиуду
09.01.2007, 21:48
18)
mas=(0,2,1)
i=(mas+i)^

Упертый Сишник (даже не плюсплюсовец), обожающий арифметику указателей

Хыиуду
09.01.2007, 21:53
19)


l=[1,2]
if i=2:
l.reverse()
l.reverse()
i=l[0]


Прикалывающийся любитель Python

Ramzey
10.01.2007, 03:53
80h36h05h01h03h
(xor i, 00000011b
i db ?)

Хыиуду
10.01.2007, 10:19
21)
create table temp(code int(3), result int(3))
insert into temp(code,result) values(1,2)
insert into temp(code,result) values(2,1)
i=select result from temp where code=i

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

Absurd
10.01.2007, 11:26
22)
int res[] = {0,1,2};
i = res[i];

аккуратный Сишник, который знает, что указатели и массивы имеют разное linkage.

Хыиуду
10.01.2007, 11:58
23) call swap1and2(var i)

Руководитель проекта

Хыиуду
10.01.2007, 12:02
24) for each j in [1,2] do
{if (i<>j) i=j}

Недавний любитель Паскаля, который открыл для себя конструкцию for each в других языках

Absurd
10.01.2007, 12:41
25) Любитель языка Bitfuck

i = i >> 1 | (i & 1) << 1;

DeeJayC
10.01.2007, 15:28
26)


int a[] = {2,1};
i = a[i-1]


Любитель жабы - сибирский мастурбатор.

Хыиуду
10.01.2007, 17:00
27) i=odd(i)+1

Гибрид пунктов 7, 8 и 11. Идеально облегченный код, работающий безошибочно, без малейшего намека на логику и абсолютно безжалостный к тем, кто будет потом этот текст разбирать.

Absurd
10.01.2007, 17:58
28)
union {
struct {
bool b1:1;
bool b2:1;
};
int a;
};
a = i;
bool tmp = b1;
b1 = b2;
b2 = tmp;
i = a;

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

Хыиуду
15.01.2007, 17:11
i=2*(i==1)+(i==2)
Еще один апологет Си, любящий вставлять логические операции внутрь присвоений

Программист Женя
29.05.2007, 21:13
Очень много вариантов здесь: www.hackersdelight.org
Например как делать выбор из трех вариантов без оператора if:
f(x)=((-(x=c))&a)+((-(x-a))&b)+((-(x=b))&c), где
a,b,c - значения которые перебираем

Хыиуду
31.05.2007, 10:42
мдя, код шикарный. и непонятно на каком языке. потому что на всех языках это будет работать (если вообще будет) совершенно по-разному
и еще: в скобках все-таки минус стоит или равно?

C_O_D_E
14.02.2008, 21:54
30) Решение программиста-студента, начинавшего с Кумира и/или Интала, на Pascal'е
т.е. решение бедного, четко выполняющего условия, студента, который знает о некорректном вводе и зацикливании программы:rolleyes:
Repeat
Read(i);
If i=1 then i:=2
Else
If i=2 then I:=1;
Until (i=1) or (i=2);

darhark
22.05.2008, 19:16
i = range(3)[-i]
программист-математик, просто до ужаса помешанный на python style

-----
a = lambda i : -(i==2)+2
i = a(i)
-----
i = (16>>(i<<2)) + 1

F-R-O-S-T
01.07.2008, 18:52
32)
if (i==1)
if (i==1)
if (i==1)
if (i==1)
i=2;
else
if (i==2)
if (i==2)
if (i==2)
if (i==2)
i=1;
else
{
printf("Так и знал что Обманут ((");
i=2;
}

Недоверчивый программист , он никому , абсолютно никому в этой жизни не доверяет , даже компилятору , он знает что никому верить нельзя и все перепроверяет по несколько раз )))

soldat.des
01.07.2008, 23:16
удалите это сообщение

Хыиуду
29.08.2008, 16:20
33) i=i and 1+1
Программист, пишущий маленькие утилитки для внутреннего пользования, уверенный, что он сам себя обманывать не будет

[Crimson]
21.12.2008, 21:27
интересная тема =)

atavin-ta
03.02.2009, 12:07
34)
if ((i>=1)&(i<=2))
{
if (i==1)
{
i=2;
}
else
{
i=1;
}
}
else
{
ShowMessage ("There is error in the date!");
}
Еврей, структурирующий всё, до чего может доятнуться.

Albor
03.02.2009, 15:32
34)
if ((i>1)&(i<2))
.........................................
Еврей, структурирующий всё, до чего может доятнуться.
Хреново он структурирует. Не будет этот вариант работать.

atavin-ta
06.02.2009, 12:06
Ну пропустил знак '=' в логический операциях. Сейчас исправил. В настоящем исходнике подобных ошибок не было.

Albor
06.02.2009, 13:01
тогда наводящий вопрос: при каком значении i условие (i>1) & (i<2) , будет истинным? Используйте хоть &, хоть &&.
Упс, пардон. Однако & и && разные вещи.

atavin-ta
09.02.2009, 08:41
Прочитай исправленный вариант. Там не if ((i>1) & (i<2)), а if ((i>=1) & (i<=2)).