Какой ты программист?
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Какой ты программист? - 2007-05-08 22:58:48
|
|
|
ArtAdmin
Сообщений: 11556
Оценки: 14
Присоединился: 2007-01-17 16:55:01.430000
|
Обсуждение статьи "Какой ты программист?"
|
|
|
Gurgraz; 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
|
|
|
Darksite; e-mail: darksite@xakep.ru - 2007-05-08 22:58:48.106666
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Я сделал бы комбинацию 7-го и 10-го.
|
|
|
Anton Wolf; e-mail: anton_wolf@pisem.net - 2007-05-08 22:58:48.123333
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
А я бы на асме делал после проверки сдвиг вправо\влево… типа экономия ресурсов :) А вообще, прикольно!
|
|
|
Narod; e-mail: - 2007-05-08 22:58:48.123333
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Туфта… Сказано же: "I принимает значения 1 или 2." Если каждый кубик будет проверять правильность входных данных, то можно забыть о производительности и компактности. Если сказано, что "I принимает значения 1 или 2", то это значит, что выполнение этого условия должен обеспечить кубик более высокого уровня.
|
|
|
GanDJuStas; e-mail: - 2007-05-08 22:58:48.140000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
В условии сказано что I ЦЕЛОЕ ЧИСЛО, принимающее значение 1 или 2, т.е. первый вариант абсурден(к стати второй вариант вообще не правильный). Я бы выбрал вариант 7 т.к. сам математик
|
|
|
KING; 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)))
|
|
|
>/<eHbKa; e-mail: - 2007-05-08 22:58:48.153333
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
King, так зачем же ты копровал 7 ещё раз? хотел показать что ты его не понял? так все могут написать: a=((3-a)^n)^(1/n) Но всё это только если ты хочешь убить эффективность программы….
|
|
|
BlackGhost; 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; А примеры все какие-то стремные. :о)
|
|
|
Pastushok; e-mail: prince_nik@mail.ru - 2007-05-08 22:58:48.170000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
вариант 4 рядом с ассемблером не стоял,думаю с т.зрения скорости и краткости кода так:нециклический сдвиг вправо,jnz метка,I=2,метка, хотя вар7 рулит:)
|
|
|
KING; e-mail: - 2007-05-08 22:58:48.186666
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
2 Женька Я думаю мы все знаем алгебру за 8 класс, просто 8й пример неверный, но как идею(запутанности) я и использовал в комбинации с 7). Мне кажеться автор под 8й и имел в виду что-то похожее на мою мутотень.. Насчёт быстродействия- вариант 7 В ЛЮБОМ СЛУЧАЕ самый быстрый, быстрее невозможно придумать..
|
|
|
KING; e-mail: - 2007-05-08 22:58:48.186666
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
c001 }{aЦkeЯ, ну ты блин прям оправдываешь мои надежды! А вот условия - читай- Дано I! И писать надо на PL/1(хотя это фиг знает что, паскаль первый????) ТАк вот- кто же тебе этот i в еах засунет? пока засунуть будешь просить проц уже время потратит, так что 7 рулит=))) Тем более в слове 31337 Первая с конца 7ка!
|
|
|
c001 }{aЦkeЯ; 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 будет быстрее!!! АднАзнАчнА!!!!
|
|
|
KING; e-mail: - 2007-05-08 22:58:48.216666
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Ну блин, дано I, значит и надо i юзать..И ешё твой хор может и не заработать- не веришь? попробуй протестить прогу FFFFFFFFFFFFFFFFFFF раз, вводя данные с клавиатуры, в конце ждёт сюрприз=)) Бесплатная починка клавиш 1 и 2)))
|
|
|
KING; 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; (Чушь конечно, но способ…)
|
|
|
Любитель тайминга; 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 побитовые операции выполняет довольно быстро.]
|
|
|
NickData; e-mail: --- - 2007-05-08 22:58:48.250000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Ну вы блин тут все кодеры…я лично них..я ничего не понял….
|
|
|
Mayteks; e-mail: - 2007-05-08 22:58:48.263333
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Не понял, зачем такие сложности. Чем проще тем быстрее, нет?
unsigned short int I; I==1?I=2:I=1;
или что-то типа того
|
|
|
Keyman; e-mail: - 2007-05-08 22:58:48.263333
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Как знакомый с гр.Паскалем по школьной программе два года…. Выполнил задание по варианту 10.. Так что всё это полная туфта…
|
|
|
DEiL; e-mail: - 2007-05-08 22:58:48.280000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
бред..
|
|
|
Tyomich; e-mail: - 2007-05-08 22:58:48.280000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Сразу видно, что статья старая. Есть ещё один вариант: if i=1 then i:=i+1 else i:=i-1;
|
|
|
willi; e-mail: - 2007-05-08 22:58:48.296666
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Решения похожего на мое не оказалось. Видимо я никакой программист :)
|
|
|
Павел Блудов; 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();
то да, разница есть. Павел.
|
|
|
Все тот же: любитель тайминга; e-mail: korotkov1@mtu-net.ru - 2007-05-08 22:58:48.343333
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
2 Tyomich & Mayteks: и вы что, думаете, что ваши решения быстрее???? "Чем проще, тем быстрее…" Да, если на ассемблере проще, то скорее всего, и быстрее (если не использует медленных команд). Но ко всем языкам высокого уровня типа С++ ЭТО НЕ ОТНОСИТСЯ!!!
|
|
|
Андрей Тарасевич; e-mail: andreytarasevich@hotmail.com - 2007-05-08 22:58:48.373333
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Решение номер 10 в общем случае никак не может считаться ни самым правильным, ни даже премлемым решением. Настолько низкоуровневый код ни в коем случае не должен выполнять таких высокоуровневых действий, как вывод каких-то диагностических сообщений. Если задача решается отдельной функцией, то максимум, что может позволить себе такая функция - это выбросить исключение или вернуть какой-то специальный код возврата.
Наиболее правильным решением без сомнения является решение номер 7 - решение "математика". Строго говоря с абстрактной точки зрения при такой реализации данная функция вообще не имеет некорректных входных данных и вводить в нее какие-то проверки - это лишь ограничивать ее универсальность. Такими проверками должен заниматься внешний код.
Стоит кстати заметить, что условие задачи никоим образом не оговаривает никаких критериев [не]корректности входных данных. Требуется просто заменить 1 на 2 и наоборот. Поэтому решение номер 7 условию задачи полностью удовлетворяет. Также как практически все остальные решения, за исключением основанного на использовании массива решения 6.
|
|
|
1; e-mail: 1 - 2007-05-08 22:58:48.390000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
2 Roman: I/2=0 (if i==int);
|
|
|
Roman; 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 ???)
|
|
|
Sly; e-mail: - 2007-05-08 22:58:48.390000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Если следовать логике, заложенной в 10 пункте, то 11 пунктом будет наложение проверочного кода на избыточные проверки 10-го..
и дописать еще проверку бы не забыть, что если вдруг I оказалось в душе числом плавающим или не дай бог комплексным, то…..
|
|
|
Константин; e-mail: thbird@newmail.ru - 2007-05-08 22:58:48.403333
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
i = i xor 3
|
|
|
Spear; e-mail: Spear16@list.ru - 2007-05-08 22:58:48.420000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
пряники курче!
|
|
|
N; e-mail: - 2007-05-08 22:58:48.436666
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
$i = ( $i == 2 ) ? 1 : 2;
|
|
|
Kernel; e-mail: Kernel@tut.by - 2007-05-08 22:58:48.436666
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
i^=3;
|
|
|
Distortion; e-mail: - 2007-05-08 22:58:48.436666
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Кстати, сейчас ещё раз взглянул на решение номер 3 и вспомнил, как любил на уроках ИВТ писать программы на Барсике, где в простейших действиях операторов GOTO было больше, чем всего остального, и как проверяющие учителя и списывающие одноклассники смотрели на это чудо и безуспешно пытались понять, каким образом оно работает, и как оно может работать вообще. :)
|
|
|
Distortion; 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 градусов по Цельсию."
|
|
|
Dron; 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
|
|
|
zlobny_niger; e-mail: zlobny_niger@xakep.ru - 2007-05-08 22:58:48.450000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
большинство алгоритмов, приведенных в качестве решения, вызывают зацикливание конструкции…. или это я хреновый программер!?….
|
|
|
FroZen; e-mail: - 2007-05-08 22:58:48.466666
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
ДА тут можно целую демогогию развести. И вообще у каждого программера свой подход к решению программы. В конце концов все зависит от конкретной цели. А вариант 7 идиотский.
|
|
|
And; e-mail: lozovoy_dp_ua@mail.ru - 2007-05-08 22:58:48.466666
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
7-й безусловно лучший. А по-поводу 1-го хочется спросить автора:"Зачем карты передергивать?"
|
|
|
Dron; 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
|
|
|
IH; e-mail: - 2007-05-08 22:58:48.483333
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Решение 7 наиболее приближено к реальности. Почему? Да потому что вчитайтесь в условия: "I принимает значения 1 или 2.". Если вам в постановке задачи говорят диапазон значений, то проверять его КАЖДЫЙ РАЗ будет только больной. Можно гденить на входе в функцию для своего спокойствия провериться, но каждый раз такое делать - это уже патология. Бессмыленные проверки в коде не лучше пропущенных проверок. По опыту вам говорю.
|
|
|
|
|