Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.44 KB | None | 0 0
  1. <?php
  2.  
  3.     $length = $_GET['length'];
  4.     $proto = $_GET['proto'];
  5.     $dead = $_GET['dead'];
  6.     $live = str_replace("*", "", $proto);
  7.  
  8.     // загрузить соответствующий словарь в $dict
  9.     $dict = file("wordlist/" . $length . "_letters.txt", FILE_IGNORE_NEW_LINES);
  10.     $words = array();
  11.  
  12.     // цикл по каждому слову в словаре
  13.     foreach($dict as $word){
  14.         $flag = true;
  15.         // проверка, что слово соответствует маске
  16.         for($i=0; $i<mb_strlen($proto); $i++){
  17.             if($proto[$i] == "*"){          // подстановка
  18.                 for($j=0; $j<mb_strlen($live); $j++){
  19.                     if($word[$i] == $live[$j]){     // disallow a*** matching abba
  20.                         $flag = false;
  21.                         continue 3;
  22.                     }
  23.                 }
  24.                 continue;
  25.             }
  26.             if($proto[$i] == $word[$i]){    // correct, go to next letter
  27.                 continue;
  28.             } else{                         // incorrect
  29.                 $flag = false;
  30.                 continue 2;
  31.             }
  32.         }
  33.        
  34.         if($flag){
  35.             array_push($words, $word);
  36.         }
  37.  
  38.     }// конец цикла foreach
  39.     unset($word);
  40.  
  41.     $deadWords = array();
  42.  
  43.     //удаляем слова с исключёнными буквами
  44.     foreach ($words as $word){
  45.         for ($i=0; $i < mb_strlen($dead); $i++) {
  46.             if(strpos($word, $dead[$i]) !== false){
  47.                 error_log("adding " . $word . " to deadWords");
  48.                 array_push($deadWords, $word);
  49.                 continue 2;
  50.             }
  51.         }
  52.        
  53.     }
  54.     unset($word);
  55.  
  56.     $words = array_values(array_diff($words, $deadWords));
  57.  
  58.     $alphabet = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
  59.     $letters = array_fill_keys(str_split($alphabet), 0);
  60.  
  61.     // проверка каждой букве на наличие в слове
  62.     foreach($words as $word){
  63.         // проверить каждую букву в каждом слове
  64.         for($i=0; $i<26; $i++){
  65.             if(strpos($word,$alphabet[$i]) !== false){
  66.                 $letters[ $alphabet[$i] ]++;
  67.             }
  68.         }
  69.     }// конец цикла foreach
  70.     unset($word);
  71.  
  72.     arsort($letters, SORT_NUMERIC);
  73.  
  74.     // нормализуйте числа к размеру слов
  75.     $num_words = count($words);
  76.     foreach($letters as $l => $v){
  77.         $letters[$l] = $letters[$l] / $num_words;
  78.     }
  79.  
  80.  
  81.     //удалить буквы с нулевой вероятностю
  82.     foreach($letters as $l=>$v){
  83.         if($v == 0 || $v == 1){
  84.             $letters = array_diff($letters, array($l=>$v));
  85.         }
  86.     }
  87.     unset($l);
  88.  
  89.     $ret = array("words"=>$words, "letters"=>$letters);
  90.     var_dump($ret);
  91.     //echo json_encode($ret);
  92. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement