За последние 24 часа нас посетили 17928 программистов и 1613 роботов. Сейчас ищут 1444 программиста ...

генератор псевдослучайных чисел

Тема в разделе "Решения, алгоритмы", создана пользователем GudGuy, 20 дек 2008.

  1. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    вот, понадобилось тут. выставляю на строгий суд. ну и вообще может понадобиться кому(вообще тут могут быть глюки конструкторе и в предпоследнем методе, т.к. я их не тестил, пока)
    PHP:
    1. <?php
    2. Class   Pseudorandom{
    3.     private $array_divisor=array();
    4.     private $key;
    5.     private $id=array();
    6.     private $array_free=array();
    7.     private $array_required=array();
    8.     private $count_free;
    9.     private $count_required;
    10.     private $count_all;
    11.     private $date;
    12.     private $page;
    13.     private $array_free_id=array();
    14.     private $array_required_id=array();
    15.     private $array_answer=array();
    16.     private $sql;
    17.     private $truy;
    18.     function __construct($table, $flag, $date, $page, $how_many){
    19.         $this->sql=NEW Sql();
    20.         $this->date=$date;
    21.         $this->page=$page;
    22.         $result=$this->sql->Execute("SELECT * FROM ".$table);
    23.         WHILE ($row=mysql_fetch_array($result, MYSQL_ASSOC)){
    24.             IF($how_many=='all')$row[$flag]=1;
    25.             IF ($row[$flag]==0 OR $row[$flag]==''){
    26.                 $this->array_free_id[]=$row['id'];
    27.                 $this->array_free[]=$row; //массив из которого надо выбирать
    28.             }
    29.             ELSE {
    30.                 $this->array_required_id[]=$row['id'];
    31.                 $this->array_required[]=$row; //массив обязательный к отображению
    32.             }
    33.         }
    34.         IF($how_many!='all'){
    35.             $this->count_free=count($this->array_free);
    36.             $this->count_required=count($this->array_required);
    37.             $this->count_all=$this->count_required+$this->count_free;
    38.             $P=3746592653589;//просто строка=))
    39.             FOR ($i=0; $i<$how_many; $i++){
    40.                 $this->array_divisor[$i]=substr($P, $i, 1); //массив для деления
    41.             }
    42.             $this->dateAndPage();
    43.             $this->genId($how_many);
    44.             echo mysql_error();
    45.         }
    46.     }
    47.  
    48.     function dateAndPage(){
    49.         $this->date=explode(".", $this->date);
    50.         $this->page=substr($this->page,0, -4);
    51.         $d_page=strlen($this->page);
    52.         $d_page=$d_page-1;
    53.         FOR($i=0; $i<=$d_page;$i++){
    54.             $ord_page[$i]=ord(substr($this->page, $i, 1));
    55.         }
    56.         $res=array_merge_recursive($this->date, $ord_page); //формируем ключ
    57.         $this->key=implode("",$res);
    58.  
    59.     }
    60.  
    61.     function genId($how_many){
    62.         $width=strlen($this->count_all);
    63.         FOR ($i=0; $i<$how_many; $i++){
    64.             //echo '<br>';
    65.             $this->truy=1;
    66.             $use_key=$this->key/$this->array_divisor[$i]/10000;
    67.             $this->genAndTest($use_key, $width);
    68.         }
    69.  
    70.     }
    71.  
    72.     function genAndTest($use_key, $width){
    73.         $truy_id=substr($use_key, 5, $width);
    74.         WHILE ($this->count_all<$truy_id){
    75.             $truy_id=$truy_id-$this->count_all+1;
    76.         }
    77.         //echo '|'.$truy_id.'|';
    78.         IF (in_array($truy_id, $this->array_free_id) AND !in_array($truy_id, $this->id)){
    79.             IF(substr($truy_id,0,1)==0 AND strlen($truy_id)!==1)$truy_id=substr($truy_id,1,1);//прада только до тех пор, пока работаем не более чем с двух значными айди
    80.             $this->id[]=$truy_id;
    81.         }
    82.         ELSE {
    83.             $this->truy=$this->truy+1;
    84.             $use_key=sqrt($use_key);
    85.             IF ($this->truy<1000){
    86.                 $use_key=$use_key*$this->truy*4*100;
    87.                 $this->genAndTest($use_key, $width);
    88.             }
    89.         }
    90.     }
    91.  
    92.     function formAnswer($how_many){
    93.         $this->array_answer=$this->array_required;
    94.         FOR ($i=0; $i<=$this->count_free; $i++){
    95.             IF(in_array($this->array_free[$i]['id'], $this->id)) $this->array_answer[]=$this->array_free[$i];
    96.         }
    97.     }
    98.  
    99.     function get($how_many){
    100.         $this->formAnswer($how_many);
    101.         return  $this->array_answer;
    102.     }
    103.  
    104. }
    105.  
    доработано и отлажено
     
  2. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    каждодневное обновление страницы. для поисковиков=)
     
  3. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    А дата не катит?
     
  4. а rand() — не катит?
     
  5. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    А можно подробнее? Что-то я не слышал ничего об. этом.. т.е. для того, чтобы лучше индексировалось необходимо как-то обновлять страницы? на что именно поисковики обращают внимание?
     
  6. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    и я не пойму че это..
     
  7. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    что это-то понятно, в принципе... Вот только куда это предполагается воткнуть?
    В хтпле который собирается скриптом? куда-нить в mime?
     
  8. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    ну, как бе это практически коммерческая тайна=)
    но ShamahN практически догадался. это генерация контента из заранее установлены вариантов. поисковики любят новизну=)
    флоппик
    нет, нельзя, так как в течении дня контент должен оставаться не изменым=)
     
  9. фигня какая-то.
     
  10. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    а пример сгенерированного контента можно?

    столько строк, по-моему можно проще гораздо
     
  11. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    флоппик
    ну, ТЗ разрабатывал не я.
    да. кстати, с rand() можно, но тогда надо обновлять раз в сутки, писать куда-то... в общем решил так сделать... да, и интересно было задачку решить=)
     
  12. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    sylex
    она выдаёт айдишник, ну плюс собирает массив из нужных данных. если приглядишься увидишь=)
    упрость наверное можно, например не превращать название страници в число, а просто делать хешь названия и даты=) если придумаешь проще, буду благодарен=))
     
  13. Это хороший пример случая, когда я говорю о создании проблемы только ради ее решения.
     
  14. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    флоппик
    возможно, но учиться как-то надо? а если писать только однотипные скриптики, не чему не научишься...
     
  15. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    GudGuy
    Молодец, постарался. Для учебы пиши полезные скрипты (например, оригинальную реализацию учета новых тем на форуме)))
     
  16. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Открывающий PHP тег включает подсветку синтаксиса, ага.
     
  17. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    [vs]
    Спасибо=)) но, мне за это ещё и денег платят;)
    Psih
    да, спасибо, что поправил=) чего-то я лоханулся=)