- 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;
какой-то кустарный хэш.
не пойму чем пахнет.
Я бы написал i >= 0, так спокойнее. А то мало ли через -1 перепрыгнет и забесконечнится.
Паскалевский фор намного лучше, потому что охраняет от такой херни.
А адский фор вообще жжот: for i in Stroka'Range loop
И переменную i не надо объявлять ваще.
какая ща итерация?
первая ли?
или последняя?
в таких случаях приходится или использовать стандартный фор, или вводить искусственные счетчики\флаги
Да ладно... foreach(int i in Range(5,15)). Вот и форыч со счётчиком)).
А вообще троллю. Я Вас понял.
Поэтому он может ответить на твои вопросы.
Какая итерация - i
Первая ли - i = Stroka'First
Последняя ли - i = Stroka'Last
при нормальном форе не надо говнокодить что-то типа
| 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) ....
намного лучше.
Берите больше. Паскаль - гад.
TarasB, я уже становлюсь похожим на Вас? Начинаю толстеть?
щас напрягает тока корявый фор.
ну и конечно же отсутствие i ++, ++ i
даже переменные-в-начале не очень-то напрягают - нефиг писать божественные функции.
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
};
уже не так абстрактен, посколько имеет лишнюю сущность - операторы неравенства и инкремента.
B := b;
for (i = a; i <= B; i++) {
c
};
Ты используешь результат переменной после цикла? Хаха, ты быдлокодер!
Приведите пример линейного поиска в массиве с получением индекса искомого элемента без оформления его в отдельную функцию.
N := -1;
for i := 0 to Length(a) - 1 do if a[i] = Key then begin
N := i;
Break;
end;
И сразу ясно, что -1 - это элемент не найден. А Length(a) для ненайденного - это как-то не очевидно.
Кстати, массивы не предназначены для поиска.
Ещё как предназначены, если там пару элементов.
лолшто???
Это в паскале. Для - Length(a) для не найденного элемента столь же очевидно, как и -1.
Для
> for(int i=0;i<Length(a);++i)
- Length(a) для не найденного элемента столь же очевидно, как и -1.
Не очевидно. Надо цикл в голове прокрутить, чтобы понять, почему так.
Тренируйте мозг, что-бы в этом не было необходимости. С такими темпами разжижения мозга Вам скоро придется чип с интерпретатором вживлять, если захотите оставаться программистом.
Мой код более очевиден.
Вообще то бывают сортированные массивы и даже массивы с расположением элементов дерево. Там и много элементов можно найти достаточно быстро.
for(N = Length(a) - 1; N >= 0; N --) if (a[N] == Key) break;
ну-ну!
Вот и хорошо
> ни бряк не сделать
ЛОЛШТО?
Поставь же что-то новее шестого Турбо Паскаля!
for i := 0 to n - 1 do begin
if ... then break;
end;
if (i < n) .... // тут уже косяк
т.е. любой поиск в цикле превращается в невесть-что - или лишние переменные объявлять или еще что-ньть в этом роде. да! ОЧЕНЬ удобно! :((
Нет.
Меня подобное тоже всегда почему-то настораживало
его похмельем\недосыпом
про**анными дедлайнами ))))
А варианты строк из двух символов соответствующих конкретному хешу вычисляются ну просто элементарно.
Ну и т.д. Подобрать строку подходящую под хеш можно даже, если изначальная строка была в 10000 символов без каких-либо проблем в считанные миллисекунды.
MD5 - это алгоритм хеширования.
Если вы хотели сказать, что цель этого алгоритм создавать не безопасный хеш, а ровно-распределённый, то это у автора опять не получилось. Вероятность коллизии между двумя строками из двух символов значительно выше, чем 1/65535
1.) Равно-распределённый, для создания ассоциативных алгоритмов и контрольных сумм;
2.) Криптографический.
Если вы скажете хороший пример, где может потребоваться какой-то другой тип хеш-функции, то я не удивлюсь, что этот код не подходит и под него ;)
Идеальная лично для меня хеш-функция обладает простыми свойствами:
1.) Скорость выполнения (от брутфорса можно защититься длинной ключа);
2.) Ровное распределение на выводе;
3.) Криптостойкость.
Хочу попробывать воспользоваться столь слабой защитой, если появится возможность)
И если оно используется в таких целях (что является одним из основных мест применения хеш-функций), то было бы интересно воспользоваться такой возможностью.
Просто если задуматься, то данная хеш-функция не имеет отношения ко всем мне известным способам применения хеш-алгоритмов. ;)
сдается мне, что у изобретателя здесь тоже на 1 меньше, чем надо бы...
Однако я согласен, что это скорее всего описка, а не задуманка
1*(2**32) % 65535 == 1 со всеми вытекающими...