PDA

Просмотр полной версии : алгоритм random - как сделать аналог randomа без random?


uchenik12345
13.12.2010, 18:08
есть баннеры, в них всякие мигалки и прочая случайная фигня.
оказывается код где встречается random автоматически банится без разборов на стороне адвертизера.
Баннеров фигова гора и переделывать нет смысла, надо заменить random(n) на самописную функцию, например _root.rrr(n).
(исходить от date.milliseconds не годится, порой надо в один момент десяток разных значений).
Кто нибудь знает как написать простенький рандом?

drnet_ua
13.12.2010, 18:27
да их полно

разберитесь как они работают и проблем никаких

шаманте с date.milliseconds и последним сгенерированным числом например

в блог мне глянте как вариант

Psycho Tiger
13.12.2010, 18:37
оказывается код где встречается random автоматически банится без разборов на стороне адвертизера.
А как?

terbooter
13.12.2010, 19:39
Сгенерите длинную рандомную строчку и захардкодте ее во флешку.
Далее вычитывайте попорядку и покругу.

dark256
13.12.2010, 19:48
"код где встречается random автоматически банится без разборов на стороне адвертизера."

Это как? Баннер декомпилится и проверяется чтоли?

uchenik12345
13.12.2010, 20:25
Это как? Баннер декомпилится и проверяется чтоли?
Думаю скорее всего да. Мож выборочно или зависит от чего, но уже бывали претензии по их requirements. Как и этот долбанный код с ClickTag. Один адвертизер хочет один код, другой другой, если их обьеденить if-ами все, конец света и бан. Вот и переделывай тысячи баннеров...

Про date.milliseconds я уже говорил. Если мне надо раскидать звездное небо в одном цикле, я не вижу помощи в миллисекундах. Для варианта 1 рандома да, а когда их в одном кадре 10? Представьте что есть 80-100 баннеров, 35 размеров каждый, на 10 языках каждый. В одном 5 всяких радномов, в другом 10 и в одном кадре. В одном звездочки по кругу разного размера летают, в другом надо при открытии случайный город из списка в 10 штук показать... Я не хочу разбираться зачем они все, я хочу сделать replace all "random(" "_root.rrr(" и чтоб работало на все варианты.
Генерить строку можно, но это топорный подход. В одном случае надо random(10), в другом random(1000).

terbooter
13.12.2010, 20:32
Топорно немного =), но лучше чем слушать микрофон уж точно.

Psycho Tiger
13.12.2010, 20:34
Что за бред. "Нельзя генерировать небо программно с использованием Math.random. Но если Вам очень хочется создать звёздное небо со случайными звёздами Вам придётся реализовать свой аналог Math.random..."

uchenik12345
13.12.2010, 20:46
Бред, но вы не представляете как строго проверяются баннеры. Если попадается слово random в коде, дальше банится сразу вся пачка без разборов зачем оно там. Попалось и точка. Адверизеры никогда ни в чем не разбираются, типа это твои проблемы и нарушения.
Я например не удивлюсь за бан если код на кнопку в одну строку напишешь.

terbooter
13.12.2010, 20:47
Прочитал внимательнее почему не годится date.milliseconds.
Я бы на вашем месте использовал именно его.
А затем прогонял чере пару функци, а третья функция выдавала старт и стоп индекс результата первой

Psycho Tiger
13.12.2010, 20:48
Адвизерам придется ещё найти этот Math.random. Если банер обфусцировать - эту строчку никто и не найдёт.
Например Math["rand"+"om"](). а "random" криптуйте, например, добавлением числа 2 к каждой букве. А потом собирайте методами String.

terbooter
13.12.2010, 20:50
Ну вот и самое правильное решение =)

uchenik12345
13.12.2010, 21:11
на скорую руку накидал нечто такое топорное:
tipasluch = [75,66,42,23,26,43,58,55,33,27,14,23,51,36,52,63,52,5,66,83,73,71,51,30,21,12,18,58,78,31,34,89,77,73,78,76,1,64,24,90,80,92,39,48,7,94,3,45,66,87,76,7 9,30,0,67,40,80,69,68,39,21,53,61,54,62,66,11,68,96,71,71,21,28,31,84,3,12,77,32,9,49,53,71,62,1,47,46,47,84,9,26,98,34,7,90,9,26,97,2,76,99,0,26,37,3 3,66,7,82,90,46,2,82,26,41,84,79,8,60,79,16,11,62,46,52,4,14,36,92,40,33,82,51,11,40,0,50,27,51,23,46,83,88,69,89,96,56,71,18,19,12];
sluchddd = new Date();
nomersluch = int(sluchddd.getMilliseconds()/6.66); // 1000/tipasluch.length
function rrr(arg) {
nomersluch++;
if (nomersluch>tipasluch.length) nomersluch=0;
return int(tipasluch[nomersluch]*arg/100);
}
только не парьте всякими public, обьявлениями rrr(arg:int):int или подобным, в данном случае не интересует.

Добавлено через 6 минут
гы, можно, но стремно :)
фиг знает как они там смотрят. Мож вообще дизассемблер какой пишет что в мувике задействован рандом.
Поновой переделывать 5000 баннеров нехоцца.

dark256
14.12.2010, 01:45
Просто интересно уже, а чем эти Азверяйзеры мотивируют неиспользование рандома???
Может они под этим соусом ждут, чтобы юзера им сгенерили новый код рандомайзера?
Типа такое легкое академическое исследование закамуфлированное слегка под тех.требования...
Первый раз такой бред слышу.......
Сгенерите текстовый фалй на пару мегабайт рандомно, в баннер его потом грузите с сайта, а произвольная точка входа - по таймеру :)))))))))))

uchenik12345
14.12.2010, 03:16
кому интересно, помимо части первой их requirements.
Нарушение приводит к бану без обьяснения причин:

2. Animation
2.1 Max duration 15 s then static (max 3 loops x 5 s/loop)
2.2 15-20 fps frame rate
(по моему тоже бред)

2.3 Strobing & Flashing. Don't use strobe animation. Strobing, flashing backgrounds, or otherwise distracting ads are not allowed.
2.4 Keep animation smooth and fluid, using slow motion and gentle fades. Fast and abrupt motion is highly irritating.

3. Flash
3.1 All Flash ads must be published for Flash Player version 4-8.
3.2 Actionscript version 1 - 2 is acceptable.
(Баннеры на AS3, хотя АS3 это совсем не для баннеров, гигантам адвертизенга типа гугля и подобных не нужны)
3.3 Ad code cannot make external server calls for additional Javascript or other functionality. All functionality must be localized to the code itself.
3.4 Forbidden to change the behavior of ad to avoid or eliminate the redirect URL.
3.5 The ad should direct users to a web page with the appropriate destination URL. It should not open the destination URL within the ad IFrame itself.
3.6 Audio not allowed (YouTube).
3.7 Do not include code that generates or uses random numbers.
Почему незнаю, но факт, отправили всю кучу назад.

Добавлено через 4 минуты
баннер макс. 30кб, (21 век на дворе, а тут 500х500 в 30кб...) так что никаких подгружаемых мегабайт :)

drnet_ua
14.12.2010, 13:14
в таком случае масив подлиннее и перебирать с милисекондами - нихрена не случайно, но подходит :)

с другой стороны это то-же вариации на тему "code that generates or uses random numbers", заругают

а так как они требуют исключительно 4-8, АС1-2 то код будет как на ладони.

обфукатором обработаете - заподозрят не ладное.

кругом враги

dark256
14.12.2010, 19:12
да уж.... это что-то с чем-то просто таки.... Сочуствую, что такие "смежники" :(

Alex_YAROST_22
22.06.2011, 18:27
Сори что апаю но может кому-нить да пригодится.

Нужен так называемый линейно-конгруэнтный метод получения псевдослучайного числа.

Вот линк http://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%BD%D0%B3%D1%80%D1%83%D1%8D%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0% B4

Формула очень проста в реализации.