- 1
- 2
- 3
- 4
- 5
- 6
- 7
DWORD H = 0;int i = 0;int S = 1;
for (i = lstrlen(Stroka)-1; i!= -1; i--)
{
H = (H+Stroka[i]*S) % 65535;
S*=4;
}
return H == 0? 65535: H;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+140
DWORD H = 0;int i = 0;int S = 1;
for (i = lstrlen(Stroka)-1; i!= -1; i--)
{
H = (H+Stroka[i]*S) % 65535;
S*=4;
}
return H == 0? 65535: H;
какой-то кустарный хэш.
не пойму чем пахнет.
absolut 02.02.2011 17:07 # +4
TarasB 02.02.2011 17:26 # +6
Я бы написал i >= 0, так спокойнее. А то мало ли через -1 перепрыгнет и забесконечнится.
absolut 02.02.2011 17:29 # +4
gegMOPO4 02.02.2011 17:53 # +3
Lure Of Chaos 02.02.2011 17:54 # 0
rat4 02.02.2011 18:04 # +3
Lure Of Chaos 02.02.2011 18:07 # −1
rat4 02.02.2011 20:43 # +3
TarasB 02.02.2011 20:59 # +3
TarasB 02.02.2011 19:06 # −3
Паскалевский фор намного лучше, потому что охраняет от такой херни.
А адский фор вообще жжот: for i in Stroka'Range loop
И переменную i не надо объявлять ваще.
Lure Of Chaos 02.02.2011 19:10 # 0
какая ща итерация?
первая ли?
или последняя?
в таких случаях приходится или использовать стандартный фор, или вводить искусственные счетчики\флаги
guest 02.02.2011 19:15 # 0
Да ладно... foreach(int i in Range(5,15)). Вот и форыч со счётчиком)).
А вообще троллю. Я Вас понял.
Lure Of Chaos 02.02.2011 19:17 # 0
TarasB 02.02.2011 19:30 # 0
Поэтому он может ответить на твои вопросы.
Какая итерация - i
Первая ли - i = Stroka'First
Последняя ли - i = Stroka'Last
Lure Of Chaos 02.02.2011 19:44 # −1
ctm 04.02.2011 22:06 # −3
при нормальном форе не надо говнокодить что-то типа
| i := 0; while(i < n)do begin
| if ... then break;
| inc(i);
| end;
| if (i < n) ....
или что-то вроде того.
| for(i=0; i < n; i ++)
| if (...) break;
| if (i < n) ....
намного лучше.
ctm 04.02.2011 22:07 # 0
guest 04.02.2011 22:35 # 0
Берите больше. Паскаль - гад.
TarasB, я уже становлюсь похожим на Вас? Начинаю толстеть?
ctm 14.02.2011 09:55 # −2
щас напрягает тока корявый фор.
ну и конечно же отсутствие i ++, ++ i
даже переменные-в-начале не очень-то напрягают - нефиг писать божественные функции.
TarasB 14.02.2011 15:13 # 0
d;
}
эквивалентно
a;
while b do begin
d;
c;
end;
А вот
for i := a to b do begin
c
end;
не имеет такого наглядного аналога в С++
for (i=a;i<=b;i++){
c
};
уже не так абстрактен, посколько имеет лишнюю сущность - операторы неравенства и инкремента.
StriderMan 14.02.2011 15:43 # 0
TarasB 14.02.2011 16:15 # 0
B := b;
for (i = a; i <= B; i++) {
c
};
guest 14.02.2011 16:51 # −1
TarasB 14.02.2011 17:03 # +1
Ты используешь результат переменной после цикла? Хаха, ты быдлокодер!
guest 14.02.2011 17:11 # 0
Приведите пример линейного поиска в массиве с получением индекса искомого элемента без оформления его в отдельную функцию.
TarasB 14.02.2011 17:19 # 0
N := -1;
for i := 0 to Length(a) - 1 do if a[i] = Key then begin
N := i;
Break;
end;
И сразу ясно, что -1 - это элемент не найден. А Length(a) для ненайденного - это как-то не очевидно.
Кстати, массивы не предназначены для поиска.
guest 14.02.2011 17:22 # 0
Ещё как предназначены, если там пару элементов.
StriderMan 14.02.2011 17:23 # +3
лолшто???
guest 14.02.2011 17:26 # 0
Это в паскале. Для - Length(a) для не найденного элемента столь же очевидно, как и -1.
TarasB 14.02.2011 17:28 # 0
Для
> for(int i=0;i<Length(a);++i)
- Length(a) для не найденного элемента столь же очевидно, как и -1.
Не очевидно. Надо цикл в голове прокрутить, чтобы понять, почему так.
guest 14.02.2011 17:32 # 0
Тренируйте мозг, что-бы в этом не было необходимости. С такими темпами разжижения мозга Вам скоро придется чип с интерпретатором вживлять, если захотите оставаться программистом.
TarasB 14.02.2011 18:01 # 0
Мой код более очевиден.
ctm 15.02.2011 08:53 # +1
guest 14.02.2011 17:29 # 0
Вообще то бывают сортированные массивы и даже массивы с расположением элементов дерево. Там и много элементов можно найти достаточно быстро.
StriderMan 14.02.2011 17:32 # +3
guest 14.02.2011 17:33 # 0
ctm 15.02.2011 08:51 # +1
for(N = Length(a) - 1; N >= 0; N --) if (a[N] == Key) break;
ну-ну!
guest 15.02.2011 11:10 # +1
TarasB 05.02.2011 12:04 # 0
Вот и хорошо
> ни бряк не сделать
ЛОЛШТО?
Поставь же что-то новее шестого Турбо Паскаля!
guest 05.02.2011 13:20 # +2
TarasB 06.02.2011 13:03 # 0
ctm 14.02.2011 09:52 # 0
for i := 0 to n - 1 do begin
if ... then break;
end;
if (i < n) .... // тут уже косяк
т.е. любой поиск в цикле превращается в невесть-что - или лишние переменные объявлять или еще что-ньть в этом роде. да! ОЧЕНЬ удобно! :((
Altravert 07.02.2011 07:54 # 0
Altravert 07.02.2011 07:57 # 0
guest 07.02.2011 13:43 # 0
Нет.
3.14159265 02.02.2011 18:19 # 0
Меня подобное тоже всегда почему-то настораживало
bugmenot 02.02.2011 19:57 # +7
RaZeR 02.02.2011 20:32 # +4
StriderMan 14.02.2011 17:24 # 0
RaZeR 02.02.2011 18:40 # 0
Lure Of Chaos 02.02.2011 18:59 # 0
RaZeR 02.02.2011 19:09 # 0
Lure Of Chaos 02.02.2011 19:12 # 0
его похмельем\недосыпом
про**анными дедлайнами ))))
xaionaro 02.02.2011 21:56 # +1
А варианты строк из двух символов соответствующих конкретному хешу вычисляются ну просто элементарно.
Ну и т.д. Подобрать строку подходящую под хеш можно даже, если изначальная строка была в 10000 символов без каких-либо проблем в считанные миллисекунды.
xaionaro 02.02.2011 22:03 # 0
bugmenot 02.02.2011 22:05 # 0
xaionaro 02.02.2011 22:14 # 0
MD5 - это алгоритм хеширования.
Если вы хотели сказать, что цель этого алгоритм создавать не безопасный хеш, а ровно-распределённый, то это у автора опять не получилось. Вероятность коллизии между двумя строками из двух символов значительно выше, чем 1/65535
xaionaro 02.02.2011 22:21 # +1
1.) Равно-распределённый, для создания ассоциативных алгоритмов и контрольных сумм;
2.) Криптографический.
Если вы скажете хороший пример, где может потребоваться какой-то другой тип хеш-функции, то я не удивлюсь, что этот код не подходит и под него ;)
xaionaro 02.02.2011 22:30 # +1
Идеальная лично для меня хеш-функция обладает простыми свойствами:
1.) Скорость выполнения (от брутфорса можно защититься длинной ключа);
2.) Ровное распределение на выводе;
3.) Криптостойкость.
bugmenot 02.02.2011 22:45 # +4
xaionaro 02.02.2011 22:10 # 0
xaionaro 02.02.2011 22:05 # −1
Хочу попробывать воспользоваться столь слабой защитой, если появится возможность)
gegMOPO4 02.02.2011 22:38 # 0
xaionaro 02.02.2011 22:48 # 0
gegMOPO4 02.02.2011 23:12 # 0
xaionaro 02.02.2011 23:51 # 0
gegMOPO4 03.02.2011 00:11 # +2
xaionaro 03.02.2011 00:27 # −1
И если оно используется в таких целях (что является одним из основных мест применения хеш-функций), то было бы интересно воспользоваться такой возможностью.
Просто если задуматься, то данная хеш-функция не имеет отношения ко всем мне известным способам применения хеш-алгоритмов. ;)
gegMOPO4 03.02.2011 09:40 # +2
xaionaro 03.02.2011 19:58 # 0
Lure Of Chaos 03.02.2011 23:19 # 0
bugmenot 02.02.2011 22:08 # 0
сдается мне, что у изобретателя здесь тоже на 1 меньше, чем надо бы...
xaionaro 02.02.2011 22:11 # +1
Однако я согласен, что это скорее всего описка, а не задуманка
gegMOPO4 02.02.2011 22:35 # +1
gegMOPO4 02.02.2011 22:34 # 0
xaionaro 02.02.2011 22:54 # 0
1*(2**32) % 65535 == 1 со всеми вытекающими...
gegMOPO4 02.02.2011 23:14 # +1
xaionaro 02.02.2011 23:47 # 0