![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Если ячеек немного (в пределах разрядности) то быстрее всего использовать двоичные флаги.
Имеем: //константы, есть степени двойки cell1 = 1; cell2 = 2; cell3 = 4; cell4 = 8; cell5 = 16; //строго говоря, max(cell)*2 - 1; chksum = 1+2+4+8+16; //начальное состояние рюкзака: items = 0; //Проверка наличия свободной (хотя бы одной) ячейки : if (chksum ^ items != 0) {trace('есть места');} //добавление вещи, чуть сложнее... items += Math.pow(2, Math.floor(Math.log(chksum ^ mas) / Math.LN2)); //тут Math.pow(2, Math.floor(Math.log(chksum ^ mas) / Math.LN2)) - это "вес" итема, а Math.floor(Math.log(chksum ^ mas) / Math.LN2) - номер ячейки, в которую его поместили. Величина chksum^mas = 0 при полном рюкзаке, поэтому теоретически логарифм должен дать ошибку, но выдает он минус бесконечность во флэше, поэтому pow(2, логарифм) выдает 0 при полностью заполненном рюкзаке.
__________________
Тут вы найдете ответы на почти все вопросы: А можно ли сделать так ? - Можно. Почему не работает ? - Неправильно сделано. Где ошибка ? - В ДНК. Последний раз редактировалось Skubent; 09.11.2005 в 16:14. |
|
|||||
|
Регистрация: Jul 2005
Сообщений: 283
|
Блин, спасибочки.
![]() Но я в программировании не такой уж сильный... Поясни, плиз, зачем константы в степени двойки задавать? |
|
|||||
|
Регистрация: Jul 2005
Сообщений: 283
|
Видно Skubent, вне поля обозрения
, может кто-нибудь, знает для чего степени двойки задавать? |
|
|||||
|
В чём проблема?
for (var j = 1; j<MaxSlot; ++j) { _root["statysSlot"+j] = 0; for (n=1; n<6; n++) { if (_root["itemSlot"+j].hitTest(_root["obj"+n])) { _root["statysSlot"+j] = 1; } } } Maxslot - кол-во слотов.
__________________
(А) |
|
|||||
|
Регистрация: Jul 2005
Сообщений: 283
|
Цитата:
![]() |
|
|||||
|
Задавать степень двойки... Рассказываю по слогам.
1. Состояний ячейки у тебя сколько ? Ровно два - пустая и полная. Сколько Единиц информации нужно, чтобы описать объект с двумя состояниями ? Ровно 1 бит. 2. Битовые поля во флэше есть ? Только неявно выраженно, через bitwise операторы. 3. Смотрим внимательно на двоичное представление степеней двойки: 1 = 0001 2 = 0010 4 = 0100 8 = 1000 Итого, каждой ячейке соответствует одна единичка на строго определенном месте. 4. Ну а дальше чистая математика.
__________________
Тут вы найдете ответы на почти все вопросы: А можно ли сделать так ? - Можно. Почему не работает ? - Неправильно сделано. Где ошибка ? - В ДНК. |
|
|||||
|
Регистрация: Jul 2005
Сообщений: 283
|
Цитата:
![]() |
|
|||||
|
ну способы можно сказать равноценные только у Skubent на 8 ячеек тратиться 1 байт а у Антона - 8
|
|
|||||
|
8 байтов... пойду повешусь...
__________________
(А) |
|
|||||
|
Регистрация: Jul 2005
Сообщений: 283
|
Цитата:
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:11. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|