Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Какой ты программист?

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Обсуждение статей] >> Какой ты программист?
Имя
Сообщение << Старые топики   Новые топики >>
Какой ты программист? - 2007-05-08 22:58:48   
ArtAdmin

Сообщений: 11556
Оценки: 14
Присоединился: 2007-01-17 16:55:01.430000
Обсуждение статьи "Какой ты программист?"
Post #: 1
Gurgraz;&nbsp; e-mail: virusxpdos@yahoo - 2007-05-08 22:58:48.093333   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
mne kajetsea 4to oni po4ti Bce odiHakoBye , moi variant 2), nemnogo izmenion 9) a 10) kajetsea 4to samii lu4wii
Post #: 2
Darksite;&nbsp; e-mail: darksite@xakep.ru - 2007-05-08 22:58:48.106666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Я сделал бы комбинацию 7-го и 10-го.
Post #: 3
Anton Wolf;&nbsp; e-mail: anton_wolf@pisem.net - 2007-05-08 22:58:48.123333   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
А я бы на асме делал после проверки сдвиг вправо\влево… типа экономия ресурсов :)
А вообще, прикольно!
Post #: 4
Narod;&nbsp; e-mail: - 2007-05-08 22:58:48.123333   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Туфта… Сказано же: "I принимает значения 1 или 2." Если каждый кубик будет проверять правильность входных данных, то можно забыть о производительности и компактности. Если сказано, что "I принимает значения 1 или 2", то это значит, что выполнение этого условия должен обеспечить кубик более высокого уровня.
Post #: 5
GanDJuStas;&nbsp; e-mail: - 2007-05-08 22:58:48.140000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
В условии сказано что I ЦЕЛОЕ ЧИСЛО, принимающее значение 1 или 2, т.е. первый вариант абсурден(к стати второй вариант вообще не правильный). Я бы выбрал вариант 7 т.к. сам математик
Post #: 6
KING;&nbsp; e-mail: - 2007-05-08 22:58:48.140000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Кстати, 2 стопудова неправильный, впрочем как и 8…
А вот вам комбинация 7 и правильного 8го
a:=sqrt(sqrt((a-3)*(a-3)*(a-3)*(a-3)))
Post #: 7
&gt;/&lt;eHbKa;&nbsp; e-mail: - 2007-05-08 22:58:48.153333   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
King, так зачем же ты копровал 7 ещё раз? хотел показать что ты его не понял? так все могут написать:
a=((3-a)^n)^(1/n) Но всё это только если ты хочешь убить эффективность программы….
Post #: 8
BlackGhost;&nbsp; e-mail: blackghost[собака]myzona.net - 2007-05-08 22:58:48.153333   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
А я бы писал вот так:
i = ( i & 1 ) + 1;
или вот так вот, на худой конец:
i = i - 1 ? 1 : 2;
А примеры все какие-то стремные. :о)
Post #: 9
Pastushok;&nbsp; e-mail: prince_nik@mail.ru - 2007-05-08 22:58:48.170000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
вариант 4 рядом с ассемблером не стоял,думаю с т.зрения скорости и краткости кода так:нециклический сдвиг вправо,jnz метка,I=2,метка, хотя вар7 рулит:)
Post #: 10
KING;&nbsp; e-mail: - 2007-05-08 22:58:48.186666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
2 Женька Я думаю мы все знаем алгебру за 8 класс, просто 8й пример неверный, но как идею(запутанности) я и использовал в комбинации с 7).
Мне кажеться автор под 8й и имел в виду что-то похожее на мою мутотень..
Насчёт быстродействия- вариант 7 В ЛЮБОМ СЛУЧАЕ самый быстрый, быстрее невозможно придумать..
Post #: 11
KING;&nbsp; e-mail: - 2007-05-08 22:58:48.186666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
c001 }{aЦkeЯ, ну ты блин прям оправдываешь мои надежды! А вот условия - читай- Дано I! И писать надо на PL/1(хотя это фиг знает что, паскаль первый????) ТАк вот- кто же тебе этот i в еах засунет? пока засунуть будешь просить проц уже время потратит, так что 7 рулит=)))
Тем более в слове 31337 Первая с конца 7ка!
Post #: 12
c001 }{aЦkeЯ;&nbsp; e-mail: - 2007-05-08 22:58:48.200000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
2KING во-первых, цитирую "Вы можете кодировать на любом языке". во-вторых XOR eax, 3 выполняется за один такт, а SUB imm, reg не существует в принципе!!! так что придется делать MOV ecx, 3; SUB ecx, eax; причем между первой и второй инструкциями будет дополнительный цикл ожидания (RTFM) и все вместе займет на вскидку циклов 6-8!!! а в третьих I=3-I подразумевает во-вторых :Р… так что, гении (устраивает? гыгыгы :))) но реальности не меняет :))), как ни крутите, а XOR будет быстрее!!! АднАзнАчнА!!!!
Post #: 13
KING;&nbsp; e-mail: - 2007-05-08 22:58:48.216666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Ну блин, дано I, значит и надо i юзать..И ешё твой хор может и не заработать- не веришь? попробуй протестить прогу FFFFFFFFFFFFFFFFFFF раз, вводя данные с клавиатуры, в конце ждёт сюрприз=)) Бесплатная починка клавиш 1 и 2)))
Post #: 14
KING;&nbsp; e-mail: - 2007-05-08 22:58:48.216666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Ну блин, дано I, значит и надо i юзать..И ешё твой хор может и не заработать- не веришь? попробуй протестить прогу FFFFFFFFFFFFFFFFFFF раз, вводя данные с клавиатуры, в конце ждёт сюрприз=)) Бесплатная починка клавиш 1 и 2)))
Кстати- вот ешё один алгаритм
i:=i+1;
if i=3 then i:=1;
(Чушь конечно, но способ…)
Post #: 15
Любитель тайминга;&nbsp; e-mail: korotkov1@mtu-net.ru - 2007-05-08 22:58:48.233333   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
В этом списке есть только два элегантных решения - 6. и 7. Что же насчет их производительности, то №6 декодируется в 3 команды:
{mov eax, _i
mov ecx, _A[4*eax-4]
mov _i, ecx }
Т.к. все три ссылаются на память, и результат каждой зависит от предыдущей, то ее выполнение должно занять много времени; 10 млрд итераций занимают ок. 47-48 сек. (надо учесть еще лишнюю команду loop).
Способ №7 декодируется так:
{mov eax, 3
sub eax, _i
mov _i, eax}
Тоже три команды, каждая зависит от предыдущей, но только 2 из них читают память. 10 млрд итераций этого занимают ок. 33-35 сек. Разница очевидна?
Теперь насчет XOR…
I = I XOR 2 декодируется как
{mov eax, _i
xor eax, 2
mov _i, eax}
(если, конечно, не включать полную оптимизацию, тогда будет только xor _i, 2), что мало отличается от №7. 10 млрд итераций занимает, как ни ошарашивающе это звучит, ок. 66-67 сек., что переплевывает все, что уже было. Причина, видимо, в том, что битовые операции CPU выполняет гораздо медленнее, чем целочисленные. Вот так-то.
[Для тайминга использовался Pentium 4 2.4 GHz. На других процах, типа Pentium Pro/II/III или AMD K6, относительные результаты могут оказаться другими, т.к. например Athlon побитовые операции выполняет довольно быстро.]
Post #: 16
NickData;&nbsp; e-mail: --- - 2007-05-08 22:58:48.250000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Ну вы блин тут все кодеры…я лично них..я ничего не понял….
Post #: 17
Mayteks;&nbsp; e-mail: - 2007-05-08 22:58:48.263333   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Не понял, зачем такие сложности. Чем проще тем быстрее, нет?

unsigned short int I;
I==1?I=2:I=1;

или что-то типа того
Post #: 18
Keyman;&nbsp; e-mail: - 2007-05-08 22:58:48.263333   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Как знакомый с гр.Паскалем по школьной программе два года…. Выполнил задание по варианту 10..
Так что всё это полная туфта…
Post #: 19
DEiL;&nbsp; e-mail: - 2007-05-08 22:58:48.280000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
бред..
Post #: 20
Tyomich;&nbsp; e-mail: - 2007-05-08 22:58:48.280000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Сразу видно, что статья старая. Есть ещё один вариант: if i=1 then i:=i+1 else i:=i-1;
Post #: 21
willi;&nbsp; e-mail: - 2007-05-08 22:58:48.296666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Решения похожего на мое не оказалось.
Видимо я никакой программист :)
Post #: 22
Павел Блудов;&nbsp; e-mail: paul@ozero.net - 2007-05-08 22:58:48.326666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
"Заметьте, что ни одно из предыдущих решений не проверяло диапазон значений I"

И что? Этот вариант все равно ведет себя не лучше, чем все остальные. Вот если бы заменить

PUT LIST(´НЕДОПУСТИМОЕ ЗНАЧЕНИЕ I: ´,I,´ ЗАМЕНЕНО НА 1´);
I=1;

на
PUT LIST(´НЕДОПУСТИМОЕ ЗНАЧЕНИЕ I: ´,I);
ABORT();

то да, разница есть.
Павел.
Post #: 23
Все тот же: любитель тайминга;&nbsp; e-mail: korotkov1@mtu-net.ru - 2007-05-08 22:58:48.343333   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
2 Tyomich & Mayteks: и вы что, думаете, что ваши решения быстрее???? "Чем проще, тем быстрее…" Да, если на ассемблере проще, то скорее всего, и быстрее (если не использует медленных команд). Но ко всем языкам высокого уровня типа С++ ЭТО НЕ ОТНОСИТСЯ!!!
Post #: 24
Андрей Тарасевич;&nbsp; e-mail: andreytarasevich@hotmail.com - 2007-05-08 22:58:48.373333   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Решение номер 10 в общем случае никак не может считаться ни самым правильным, ни даже премлемым решением. Настолько низкоуровневый код ни в коем случае не должен выполнять таких высокоуровневых действий, как вывод каких-то диагностических сообщений. Если задача решается отдельной функцией, то максимум, что может позволить себе такая функция - это выбросить исключение или вернуть какой-то специальный код возврата.

Наиболее правильным решением без сомнения является решение номер 7 - решение "математика". Строго говоря с абстрактной точки зрения при такой реализации данная функция вообще не имеет некорректных входных данных и вводить в нее какие-то проверки - это лишь ограничивать ее универсальность. Такими проверками должен заниматься внешний код.

Стоит кстати заметить, что условие задачи никоим образом не оговаривает никаких критериев [не]корректности входных данных. Требуется просто заменить 1 на 2 и наоборот. Поэтому решение номер 7 условию задачи полностью удовлетворяет. Также как практически все остальные решения, за исключением основанного на использовании массива решения 6.
Post #: 25
1;&nbsp; e-mail: 1 - 2007-05-08 22:58:48.390000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
2 Roman:
I/2=0 (if i==int);
Post #: 26
Roman;&nbsp; e-mail: romasha@iprimus.com.au - 2007-05-08 22:58:48.390000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Pardon, pishu angliyskimi bukvami.
Kasatel´no varianta (8) libo ia ne ponial libo odno iz dvuh ;) Pri uslivii chto I=1 itog:
I = 1 - 1/2*2 +1 = 1 (gde zhe I = 2 ???)
Post #: 27
Sly;&nbsp; e-mail: - 2007-05-08 22:58:48.390000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Если следовать логике, заложенной в 10 пункте, то 11 пунктом будет наложение проверочного кода на избыточные проверки 10-го..

и дописать еще проверку бы не забыть, что если вдруг I оказалось в душе числом плавающим или не дай бог комплексным, то…..
Post #: 28
Константин;&nbsp; e-mail: thbird@newmail.ru - 2007-05-08 22:58:48.403333   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
i = i xor 3
Post #: 29
Spear;&nbsp; e-mail: Spear16@list.ru - 2007-05-08 22:58:48.420000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
пряники курче!
Post #: 30
N;&nbsp; e-mail: - 2007-05-08 22:58:48.436666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
$i = ( $i == 2 ) ? 1 : 2;
Post #: 31
Kernel;&nbsp; e-mail: Kernel@tut.by - 2007-05-08 22:58:48.436666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
i^=3;
Post #: 32
Distortion;&nbsp; e-mail: - 2007-05-08 22:58:48.436666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Кстати, сейчас ещё раз взглянул на решение номер 3 и вспомнил, как любил на уроках ИВТ писать программы на Барсике, где в простейших действиях операторов GOTO было больше, чем всего остального, и как проверяющие учителя и списывающие одноклассники смотрели на это чудо и безуспешно пытались понять, каким образом оно работает, и как оно может работать вообще. :)
Post #: 33
Distortion;&nbsp; e-mail: - 2007-05-08 22:58:48.436666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
По поводу того, что подходят все решения, кроме 6-го - неправда, решение 2 абсолютно не подходит, хоть оно и представляется на первый взгляд самым логичным. 2Tyomich - неплохое решение, но для увелечения скорости стоит воспользоваться инкрементом и декрементом - if (i=1) then {i++} else {i–}; Но что касается лично меня, то наиболее важным мне представляется утверждение, что операции присвоения - самые быстрые. Поэтому я бы предпочёл именно их в случае, когда всё равно требуется проводить проверку условия. Решение i=3-i - …до него, честно говоря, я и не додумался… Вероятно, потому, что с самого начала предполагал, что i может оказаться не единицей и не двойкой. Это решение наилучшее, если i всегда соответствует условиям, в других случаях стоит предусмотреть и другие варианты, а то получится как при попытке знакомства: "Девушка, не подскажете температуру плавки асфальта?" "85 градусов по Цельсию."
Post #: 34
Dron;&nbsp; e-mail: xa@real.хakeр.ru - 2007-05-08 22:58:48.450000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Мо жно и на элементарном Барсике:
i=1
if i=1 then t=i+1
i=t
? i
Post #: 35
zlobny_niger;&nbsp; e-mail: zlobny_niger@xakep.ru - 2007-05-08 22:58:48.450000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
большинство алгоритмов, приведенных в качестве решения, вызывают зацикливание конструкции…. или это я хреновый программер!?….
Post #: 36
FroZen;&nbsp; e-mail: - 2007-05-08 22:58:48.466666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
ДА тут можно целую демогогию развести. И вообще у каждого программера свой подход к решению программы.
В конце концов все зависит от конкретной цели. А вариант 7 идиотский.
Post #: 37
And;&nbsp; e-mail: lozovoy_dp_ua@mail.ru - 2007-05-08 22:58:48.466666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
7-й безусловно лучший.
А по-поводу 1-го хочется спросить автора:"Зачем карты передергивать?"
Post #: 38
Dron;&nbsp; e-mail: Doctor-kod@yandex.ru - 2007-05-08 22:58:48.466666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Мо жно и на элементарном Барсике:
i=1
if i=1 then t=i+1
i=t
? i
Post #: 39
IH;&nbsp; e-mail: - 2007-05-08 22:58:48.483333   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Решение 7 наиболее приближено к реальности. Почему? Да потому что вчитайтесь в условия: "I принимает значения 1 или 2.". Если вам в постановке задачи говорят диапазон значений, то проверять его КАЖДЫЙ РАЗ будет только больной. Можно гденить на входе в функцию для своего спокойствия провериться, но каждый раз такое делать - это уже патология. Бессмыленные проверки в коде не лучше пропущенных проверок. По опыту вам говорю.
Post #: 40
Страниц:  [1] 2
Все форумы >> [Обсуждение статей] >> Какой ты программист?







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.