prog
offline
Опыт:
32,865Активность: |
ScorpioT1000, речь о ХЕШТАБЛИЦАХ, ключи в которых могут принимать любое значение из диапазона integer. Для использования с хештаблицами и была написана функция StringHash. Естественно что ей плевать на ограничения массивов.
Да, отрицательные значения StringHash в свое время здорово попортили мне нервы пока я разобрался в чем дело.
Теперь об этой системе. В массив пишутся и достаются значения по индексу, который возвращает S2Ix. Поскольку работа идет с массивом, то возвращаемые значения обязаны попадать в диапазон от 0 до 8191. StringHash возвращает значения на всем диапазоне целых чисел и в чистом виде не может быть использована.
Теперь о способах решения проблемы. StringHash работает всегда одинаково (по крайней мере под одной операционной системой), это общее требование к хеш-функциям и близы его, слава богу, выполнили. Таким образом достаточно разработать алгоритм упаковки значений хешей односимвольных строк в диапазон допустимых индексов массива.
Ну а предлагаю я автору задуматься над тем, нужно ли ему это лишнее действие со строками, если лоадкод гораздо лучше делается без этого, на основе численного айдишника предмета, а не равкода. |
03.04.2012, 17:52 | #41
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ELITE
АДмин
offline
Опыт:
4,078Активность: |
prog, ты видимо не внимательный очень, и вероятно не знаешь (или не хочешь) решения моей задачи
как выше было сказано, я картостроением занимаюсь 3 недели (как и жассом) хотя опыт программирования и знания есть (паскаль, с++, с#) делаю глобальный и популярный проект (точнее переделываю по нормальному) ну это не имеет значения да и получить, как я писали уже, число из РАВ кода можно банально I2S(I000) - это работает НО как передать вместо I000 переменную - и работать перестает я пробовал разные варианты - но результат одинаковый - не берет он из переменной данные \\\ поэтому надо другое, более сложное, но действующее решение тк для сейв системы я не встречал подходящих систем, которые могут уместить все нужные мне данные менее чем в 20 символов а использование чистого ID - длина кода будет большой, и кодирование более ёмким |
03.04.2012, 17:58 | #42
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
prog, ты кому это рассказываешь? мы обсуждаем сейчас реализацию хештейбла внутри вара.
Хештейбл имеет ограниченный размер, так же как и массив и он гораздо меньше 2^32, другое дело, либо он побитово делит инт, либо... побитово делит этот инт)
ScorpioT1000 добавил: ELITE, я же уже кидал статью xgm.ru/p/wc3/about_int инт представляется в виде 4-аски в компиляторе и редакторе, на самом деле это такое же число, и в игре есть только int, там вообще нету аски, при загрузке игры все 'A000' превращаются в числа, кстати, cjass делает это уже при компиляции карты |
03.04.2012, 18:07 | #43
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
prog
offline
Опыт:
32,865Активность: |
ELITE, извини за ругательства, но ты совсем идиот или притворяешься? почему ты зацикливаешься на работе со строковым равкодом, если равкод это ЧИСЛО! использование строкового равкода имеет смысл только если тебе надо вводить ПОЛНЫЙ равкод с клавиатуры. Во всех других случаях гораздо эффективнее работать с числом.
еще не дошло? набросать тебе карту-пример?
prog добавил: ScorpioT1000, не знаю сохранилась ли в сети статья об устройстве варовских хештаблиц, но там несколько более сложная система, которая изначально использовалась, кстати, для реализации MPQ, а потом уже ее дали на растерзание мапмейкерам, практически без изменений.
|
03.04.2012, 18:28 | #44
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
это и есть самая простая система называется "инт хеш + массив + лист", я про неё вверху и говорил, но стринг хеш возвращает большое число, никаких записей не может быть 2^31 чисто изза того, что тогда адресация даже была 2^32, а это и значит, что либо половина битов идет на место в этом "массиве", а половина идет на место в "листе", либо стринг хеш нам дан в "чистом виде", а вычисление положения в массиве идет уже дальше, доступ к чему нам не дали (или дали в варовских hashtable? я в них не копался). Во втором случае мы ничего не сможем сделать, если только реализовывать собственный хештейбл в варе. |
03.04.2012, 18:51 | #45
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ELITE
АДмин
offline
Опыт:
4,078Активность: |
prog, да, я не понимаю! какая разница если я беру переменную числовую
или беру S2I(строкавая переменная) и почему если "I000" то работает, а если переменная - то не запускается ------- да я просил пример, как заставить из строковой ПЕРЕМЕННОЙ, возращающей I000 сделать число! |
03.04.2012, 18:59 | #46
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
16GB
GhostOne User
offline
Опыт:
60,317Активность: |
ну вот вводим в чат строку I000, преобразуем и создаём по этому равкоду итем так надо? |
03.04.2012, 19:16 | #47
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
ELITE, для этого какраз та система выше, которая не работает. А он предлагает изменить логику и исключить возможность хранения этих представлений в строках. |
03.04.2012, 19:17 | #48
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
prog
offline
Опыт:
32,865Активность: |
ELITE, да чтоб у тебя глаза из жопы повылазили! и пусть мне за это влепят варн.
забудь о строковых переменных!
Вот тебе пример того, как можно сократить id предмета до порядкового номера. И затем по этому порядковому номеру получить предмет. Уж сохранить короткий порядковый номер ты, надеюсь, сможешь без нашей помощи - как-то же ты опыт и золото сохраняешь. [+] 3 пункта от ScorpioT1000: 2.1 (оскорбление) грубо, хоть и верно
|
03.04.2012, 19:38 | #49
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ELITE
АДмин
offline
Опыт:
4,078Активность: |
16GB, спасибо, то что надо
работает ИДЕАЛЬНО ScorpioT1000, бери его код для раскодирования, всё пашет отлично |
03.04.2012, 19:56 | #50
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
|
03.04.2012, 20:13 | #51
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
prog
offline
Опыт:
32,865Активность: |
ScorpioT1000, ты хоть видел что он там выложил?) на наработку это не тянет и, если не ошибаюсь, есть в библиотеке функций.
и все. |
03.04.2012, 20:16 | #52
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
Норм, объединить с обратной системой хельфима)
Надо чтобы это всё не завалялось в развалинах форума. |
03.04.2012, 21:03 | #53
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hellfim
Новичок
offline
Опыт:
79,700Активность: |
*да у меня и прямая своя есть =)
Ща я тогда запилю и выложу. Сообщение не удалять, так надо. Отредактировано Hellfim, 05.04.2012 в 00:19. |
04.04.2012, 01:10 | #54
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
Гдеж ты шлялся всё это время? |
04.04.2012, 02:43 | #55
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hellfim
Новичок
offline
Опыт:
79,700Активность: |
Я что-то долго пытался придумать классный пример, но ничего из того, что бы выглядело круто кроме GetObjectName и работало полностью правильно мне в голову не пришло -.- Запилил в пост выше.
Hellfim добавил:
Ну и код для самых ленивых
» code
Отредактировано Hellfim, 05.04.2012 в 00:19. |
04.04.2012, 03:21 | #56
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ELITE
АДмин
offline
Опыт:
4,078Активность: |
set dividend/=256
что это за равенство со слешем? ELITE добавил: Hellfim, сталкнулся с такой проблеммой после пересохранения карты, даже без изменений - она перестает работать что я делаю не так?? редактор jassnewgenpack5d настроен согласно инструкции на ХГМ Отредактировано ELITE, 04.04.2012 в 09:39. |
04.04.2012, 09:29 | #57
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
set dividend = dividend / 256
что у вас за проблемы =\ значит не так сконфигурен жнгп |
04.04.2012, 11:56 | #58
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Diazzz
Допустимый статус
offline
Опыт:
13,797Активность: |
ScorpioT1000, нет, каждую вторую с нестандартными системами. Но я уже разобрался. Элиту рассказал. Проблема была в том, что карта сохранялась на рабочий стол. Видимо на рабочий стол не сохраняет, т.к. в пути русские буквы есть, или что-то с эитим связанное. Карта пересохранилась свободно, парвда со 2го раза |
04.04.2012, 12:51 | #59
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
Шапку не читаете xgm.ru/forum/showthread.php?t=13118 |
04.04.2012, 12:53 | #60
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|