Просто теоретический вопрос по Джассу
|
|
FatalBlade | Дата: Четверг, 15 Сентября 2011, 20:38:45 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Равкоды юнитов/предметов/абилок... Почему они являются Integer? Ведь равкод, например 'H002', это строка, а не число. Да и кроме того целочисленным чисел всего 32768 положительных и 32769 отрицательных, это не так уж много. Если равкоды это целочисленные значения, то создавая много своих абилок/предметов/юнитов в РО может привести к тому что эти равкоды будут пересекаться?
|
|
|
|
Ty3uK | Дата: Четверг, 15 Сентября 2011, 22:15:57 | Сообщение # 2 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Нет, не будут. Сочетание 3 цифр и всего англ алфавита дают тебе практически бесконечное множество рав-кодов (я утрирую, но вариаций оооочень много ). Так что вероятность совпадения "крайне мала"
|
|
|
|
Faion | Дата: Четверг, 15 Сентября 2011, 22:19:15 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
| Quote (Ty3uK) Сочетание 3 цифр и всего англ алфавита дают тебе практически бесконечное множество рав-кодов (я утрирую, но вариаций оооочень много ). Так что вероятность совпадения "крайне мала" Да вы сударь упороты ._.
Курите.
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
|
|
|
|
FatalBlade | Дата: Четверг, 15 Сентября 2011, 22:32:34 | Сообщение # 4 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (Ty3uK) Нет, не будут. Сочетание 3 цифр и всего англ алфавита дают тебе практически бесконечное множество рав-кодов (я утрирую, но вариаций оооочень много ). Так что вероятность совпадения "крайне мала" Да но в результате это ведь в Джассе считается целочисленным значением, которых от -32769 до 32768. И это ещё при том что есть другие переменные Integer, которые имеют такие же значения. 'H002' - может быть равно например числу 100, я правильно понял? И если я записываю что то в хэш под номером 'H002', то биш 100, и потом например запишу что то другое под самим номером 100. То есть я записываю обе вещи под одним и тем же номером.
call SaveInteger(udg_Abilities, 'H002', 0, 'A0KW') call SaveInteger(udg_Abilities, 100, 0, 'A0KZ')
Вроде под разными значеиями, но они равны, если 'H002' = 100. Теоретически, это ведь может произойти?
|
|
|
|
lawson | Дата: Четверг, 15 Сентября 2011, 23:03:20 | Сообщение # 5 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (FatalBlade) 'H002' Quote (FatalBlade) что эти равкоды будут пересекаться? А теперь вычти шанс для совпадения при 9999 где любое число еще можно умножить на 26 букв алфавита. хм скорей у тебя варик свариться. К тому же строка это тоже целоисчислительная только в другой системе отсчета.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Четверг, 15 Сентября 2011, 23:06:06 |
|
|
|
Ajaccio | Дата: Пятница, 16 Сентября 2011, 00:12:27 | Сообщение # 6 |
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
| Для рав-кодов используется 256-ая система счисления (ASCII), то есть согласно этой таблице. Например, 'A' = 65, '#' = 35 и так далее -> запись в ячейку 100 и в ячейку 'd' есть суть одно и тоже. Боятся перезаписи не стоит, ибо в игре приняты рав-коды из 4 символов, а это очень большие числа. Вы же не используете ячейки №1 000 000 и больше? БТВ, тип integer в JASS производный от DWORD, занимает 4 байта и может принимать значения от -2 147 483 648 до 2 147 483 647.
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
|
|
|
|
FatalBlade | Дата: Пятница, 16 Сентября 2011, 00:38:10 | Сообщение # 7 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (Ajaccio) Боятся перезаписи не стоит, ибо в игре приняты рав-коды из 4 символов, а это очень большие числа. Вы же не используете ячейки №1 000 000 и больше? Значит равкод это умножение всех чисел стоящих за буквами? То есть если 'd' это 100, то например 'dddd' это 100*100*100*100?
Quote (Ajaccio) БТВ, тип integer в JASS производный от DWORD, занимает 4 байта и может принимать значения от -2 147 483 648 до 2 147 483 647. То есть в джассе это longint?
|
|
|
|
Extremator | Дата: Пятница, 16 Сентября 2011, 00:51:28 | Сообщение # 8 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| мне казалось так итого по 10 вариаций для каждой ячейки... всего их 4 ... 10*10*10*10 = 10000 вариаций если присутствуют ещё и буквы... то... примерно так... ...букв всего 26... а значит вариаций на одну ячейку должно быть 26 + 10 (36) ... а всего вариций будет 36*36*36*36 = 1679616 шт.
но... фигирируют так же и маленькие буквы оО тогда ещё +26 ... (26*2)+10 = 52 + 10 = 62 62*62*62*62 = 14776336 вариаций... ололо xD
|
|
|
|
FatalBlade | Дата: Пятница, 16 Сентября 2011, 01:01:31 | Сообщение # 9 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Короче пересечений быть практически не может. Это радует. Спс всем.
|
|
|
|
Ajaccio | Дата: Пятница, 16 Сентября 2011, 01:13:39 | Сообщение # 10 |
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
| Под конец:
Quote (FatalBlade) Значит равкод это умножение всех чисел стоящих за буквами? То есть если 'd' это 100, то например 'dddd' это 100*100*100*100? Формула сложнее, но можно стать хитрым и просто заменить каждый символ на его HEX представление, а потом (калькулятором?) перевести в десятичную. Таким образом 'dddd' == 0x64646464 (так как 64 - код символа d в 16-ой системе счисления из таблицы) == 1 684 300 900 в десятичной.
Quote (FatalBlade) То есть в джассе это longint? Ага, long signed int.
Extremator, еще никто не запрещает использовать !"№;%:?*() и другие знаки, тысячи их.
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
|
|
|
|