|
Страница 1 из 1 [ Сообщений: 13 ] |
Автор |
Сообщение |
hippy
 постоянный участник
|
|
Господа, программист я всё-таки реально хреновый если сам не могу такую элементарную штуку сделать
Речь идёт о внутренней ротации нескольких баннеров. Вот допустим есть N баннеров и N1 рекламных места под них на странице. Надо случайным обазом вывести N1 баннера, но так, чтобы они не повторялись.
Т.е. надо проверять какие баннеры уже выводились на данной странице а какие ещё нет. Вот тут я и упёрся рогом
Никак не найду нормального красивого решения
Помогиииите, плиз  ламеру 
|
|
 |
|
 |
Akela
Констататор
|
|
hippy, поясни плз, не вывводились в течении чего? Они выводятся каждый раз другой при каждой загрузке страницы? Или как? В течении какого времени и/или условия должен выводиться весь массив?
|
|
 |
|
 |
hippy
 постоянный участник
|
|
Akela, всё проще, есть страница, на ней должны показаться 3, например, случайных баннера из 10. Сложность только одна: они должны быть разными, т.е. надо исключить случай когда будут показаны 2 или 3 копии одного и того же баннера. Между переходами/обновлениями страниц ничего учитывать не надо, только на загрузке одной страницы.
|
|
 |
|
 |
Long
SubAdmin Теоретик
|
|
hippy, банера распределять ты хочешь на клиенте?
массив[10] (картинка, ссылка, текст) случайным образом выбираешь индекс.
_________________ Мудрость не всегда приходит с возрастом. Бывает, что возраст приходит один.
|
|
 |
|
 |
hippy
 постоянный участник
|
|
Long, ага, только вот что дальше? Один баннер выбран, надо выбрать следующий так, чтобы индекс не совпал ни с одним из выбранных ранее... у меня было одно решение с удалением из массива элементов по мере их выбора, но как это сделать средствами Java Script я не нашёл.
А!!! вот решение:
массив[10] (картинка, ссылка, текст, ФЛАГ); ФЛАГ по умолчанию = 0.
Когда элемент показан - флаг = 1
При выборе последующих в цикле просто проверка на значение флага!
Мать... элементарно... или может ещё какое решение придумаем? 
|
|
 |
|
 |
Akela
Констататор
|
|
hippy, гы! Ну. если Вы, батенька, извращенец, то делите массив на три случайным образом, показываете в три места (понятно, что если один окажется длиннее, то остальные циклятся ещё на раз, потом меняются местами! А? Кама-сутра отдыхает.
На самом деле, зачем так париться? Почему не выбирать сразу три несовпадающих элемента массива? 
|
|
 |
|
 |
hippy
 постоянный участник
|
|
Цитата: | Почему не выбирать сразу три несовпадающих элемента массива? |
Как?  Я действительно не знаю. Можешь код написать?
|
|
 |
|
 |
Akela
Констататор
|
|
hippy, имхо в цикле. Нет?  Массив А, выбрать из массива случайно, занести в массив В, если такого там нет. И так до тех пор, пока в массиве В не окажется трёх баннеров. После чего при следующей загрузке страницы история повторяется с изначальным массивом. Например. Хотя мона скорее всего иначе, просто голова щас дурная к ночи. 
|
|
 |
|
 |
hippy
 постоянный участник
|
|
Вот, родил
Код: <script language="javascript">
count = 3; // скока вешать грамов
BanFile = new Array(); Ban_URL = new Array(); Ban_FLA = new Array(); Ban_TXT = new Array(); items = 0;
BanFile[0] = "file0.gif"; Ban_URL[0] = "page0.htm"; Ban_TXT[0] = "текст0";
BanFile[1] = "file1.gif"; Ban_URL[1] = "page1.htm"; Ban_TXT[1] = "текст1";
BanFile[2] = "file2.gif"; Ban_URL[2] = "page2.htm"; Ban_TXT[2] = "текст2";
BanFile[3] = "file3.gif"; Ban_URL[3] = "page3.htm"; Ban_TXT[3] = "текст3";
BanFile[4] = "file4.gif"; Ban_URL[4] = "page4.htm"; Ban_TXT[4] = "текст4";
BanFile[5] = "file5.gif"; Ban_URL[5] = "page5.htm"; Ban_TXT[5] = "текст5";
do { ItemNum = Math.round((Math.random() * (Ban_URL.length-1))); if (Ban_FLA[ItemNum] != 1){ document.write(Ban_URL[ItemNum],"-",BanFile[ItemNum],"-",Ban_TXT[ItemNum],"<br>"); Ban_FLA[ItemNum] = 1; items++; } } while ((Ban_FLA[ItemNum] = 1) & (items < count));
</script>
Может и не самое красивое решение, но работает...
|
|
 |
|
 |
Long
SubAdmin Теоретик
|
|
вы оба прикалываетесь, да?
hippy, какая ращзница между флагом и новым массивом, который предлагает Akela? да никакой  это вспомогательные элементы. а цикл что в одном случае, что в другом.
_________________ Мудрость не всегда приходит с возрастом. Бывает, что возраст приходит один.
|
|
 |
|
 |
hippy
 постоянный участник
|
|
Цитата: | вы оба прикалываетесь, да? |
Akela может и прикалывается, а я просто туплю по страшному уже 2 недели с этой новой работой 
|
|
 |
|
 |
Crazy
Модератор
|
|
Приведенный алгоритм с массивом флагов есть пример классического неправильного решения этой задачи. Неправильность в том, что завершение алгоритма не гарантируется.
Правильный ответ:
Код: LastIndex = Ban_URL.length-1; for (var i = 1; i <= count; i++) { ItemNum = Math.round((Math.random() * (LastIndex))); document.write(Ban_URL[ItemNum],"-",BanFile[ItemNum],"-",Ban_TXT[ItemNum],"<br>"); Ban_URL[ItemNum] = Ban_URL[LastIndex]; BanFile[ItemNum] = BanFile[LastIndex]; Ban_TXT[ItemNum] = Ban_TXT[LastIndex]; LastIndex--; }
_________________ We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
|
|
 |
|
 |
|
Страница 1 из 1 [ Сообщений: 13 ] |
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
|
|