Алгоритм на JavaScript @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 13 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
hippy Муж.
постоянный участник
88
Сообщения: 2982
Зарегистрирован: 28.10.02
Откуда: Москва
Заголовок сообщения: Алгоритм на JavaScript
Сообщение Добавлено: 29 Ноябрь 2004, 17:32:29 
Господа, программист я всё-таки реально хреновый если сам не могу такую элементарную штуку сделать :cry:

Речь идёт о внутренней ротации нескольких баннеров. Вот допустим есть N баннеров и N1 рекламных места под них на странице. Надо случайным обазом вывести N1 баннера, но так, чтобы они не повторялись.

Т.е. надо проверять какие баннеры уже выводились на данной странице а какие ещё нет. Вот тут я и упёрся рогом :lamer:

Никак не найду нормального красивого решения :frown:
Помогиииите, плиз :gent: ламеру :lamer:
Akela
Констататор
12
Сообщения: 3239
Зарегистрирован: 03.05.02
Откуда: Европа
Сообщение Добавлено: 29 Ноябрь 2004, 18:17:35 
hippy, поясни плз, не вывводились в течении чего? Они выводятся каждый раз другой при каждой загрузке страницы? Или как? В течении какого времени и/или условия должен выводиться весь массив?
hippy Муж.
постоянный участник
88
Сообщения: 2982
Зарегистрирован: 28.10.02
Откуда: Москва
Сообщение Добавлено: 29 Ноябрь 2004, 21:39:03 
Akela, всё проще, есть страница, на ней должны показаться 3, например, случайных баннера из 10. Сложность только одна: они должны быть разными, т.е. надо исключить случай когда будут показаны 2 или 3 копии одного и того же баннера. Между переходами/обновлениями страниц ничего учитывать не надо, только на загрузке одной страницы.
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Сообщение Добавлено: 29 Ноябрь 2004, 22:12:17 
hippy, банера распределять ты хочешь на клиенте?
массив[10] (картинка, ссылка, текст) случайным образом выбираешь индекс.

_________________
Мудрость не всегда приходит с возрастом. Бывает, что возраст приходит один.
hippy Муж.
постоянный участник
88
Сообщения: 2982
Зарегистрирован: 28.10.02
Откуда: Москва
Сообщение Добавлено: 29 Ноябрь 2004, 22:18:44 
Long, ага, только вот что дальше? Один баннер выбран, надо выбрать следующий так, чтобы индекс не совпал ни с одним из выбранных ранее... у меня было одно решение с удалением из массива элементов по мере их выбора, но как это сделать средствами Java Script я не нашёл.
А!!! вот решение:
массив[10] (картинка, ссылка, текст, ФЛАГ); ФЛАГ по умолчанию = 0.
Когда элемент показан - флаг = 1
При выборе последующих в цикле просто проверка на значение флага!
Мать... элементарно... или может ещё какое решение придумаем? :genius:
Akela
Констататор
12
Сообщения: 3239
Зарегистрирован: 03.05.02
Откуда: Европа
Сообщение Добавлено: 29 Ноябрь 2004, 23:28:49 
hippy, гы! Ну. если Вы, батенька, извращенец, то делите массив на три случайным образом, показываете в три места (понятно, что если один окажется длиннее, то остальные циклятся ещё на раз, потом меняются местами! А? Кама-сутра отдыхает. :)

На самом деле, зачем так париться? Почему не выбирать сразу три несовпадающих элемента массива? :)
hippy Муж.
постоянный участник
88
Сообщения: 2982
Зарегистрирован: 28.10.02
Откуда: Москва
Сообщение Добавлено: 30 Ноябрь 2004, 00:07:05 

Цитата:
Почему не выбирать сразу три несовпадающих элемента массива?


Как? :glasses: Я действительно не знаю. Можешь код написать?
Akela
Констататор
12
Сообщения: 3239
Зарегистрирован: 03.05.02
Откуда: Европа
Сообщение Добавлено: 30 Ноябрь 2004, 01:17:52 
hippy, имхо в цикле. Нет? :) Массив А, выбрать из массива случайно, занести в массив В, если такого там нет. И так до тех пор, пока в массиве В не окажется трёх баннеров. После чего при следующей загрузке страницы история повторяется с изначальным массивом. Например. Хотя мона скорее всего иначе, просто голова щас дурная к ночи. :(
hippy Муж.
постоянный участник
88
Сообщения: 2982
Зарегистрирован: 28.10.02
Откуда: Москва
Сообщение Добавлено: 30 Ноябрь 2004, 10:47:53 
Вот, родил :genius:
Код:
<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
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Сообщение Добавлено: 30 Ноябрь 2004, 10:51:00 
вы оба прикалываетесь, да?
hippy, какая ращзница между флагом и новым массивом, который предлагает Akela? да никакой ;) это вспомогательные элементы. а цикл что в одном случае, что в другом.

_________________
Мудрость не всегда приходит с возрастом. Бывает, что возраст приходит один.
hippy Муж.
постоянный участник
88
Сообщения: 2982
Зарегистрирован: 28.10.02
Откуда: Москва
Сообщение Добавлено: 30 Ноябрь 2004, 10:55:02 

Цитата:
вы оба прикалываетесь, да?


Akela может и прикалывается, а я просто туплю по страшному уже 2 недели с этой новой работой :insane:
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 30 Ноябрь 2004, 12:46:38 
Приведенный алгоритм с массивом флагов есть пример классического неправильного решения этой задачи. Неправильность в том, что завершение алгоритма не гарантируется.

Правильный ответ:

Код:
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.
hippy Муж.
постоянный участник
88
Сообщения: 2982
Зарегистрирован: 28.10.02
Откуда: Москва
Сообщение Добавлено: 30 Ноябрь 2004, 12:55:29 
Crazy, во! Вот чего-то такого мне и хотелось, спасибо :beer:
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 13 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100