Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- if ( !function_exists('mb_str_split') )
- {
- function mb_str_split($string, $split_length = 1)
- {
- mb_internal_encoding('UTF-8');
- mb_regex_encoding('UTF-8');
- $split_length = ($split_length <= 0) ? 1 : $split_length;
- $mb_strlen = mb_strlen($string, 'utf-8');
- $array = array();
- for($i = 0; $i < $mb_strlen; $i += $split_length)
- {
- $array[] = mb_substr($string, $i, $split_length);
- }
- return $array;
- }
- }
- $length = $_GET['length'];
- $proto = $_GET['proto'];
- $dead = $_GET['dead'];
- $live = str_replace("*", "", $proto);
- // загрузить соответствующий словарь в $dict
- $dict = file("wordlist/" . $length . "_letters.txt", FILE_IGNORE_NEW_LINES);
- $words = array();
- // цикл по каждому слову в словаре
- foreach($dict as $word){
- $flag = true;
- // проверка, что слово соответствует маске
- for($i=0; $i<mb_strlen($proto); $i++){
- if($proto[$i] == "*"){ // подстановка
- for($j=0; $j<mb_strlen($live); $j++){
- if($word[$i] == $live[$j]){ // disallow a*** matching abba
- $flag = false;
- continue 3;
- }
- }
- continue;
- }
- if($proto[$i] == $word[$i]){ // correct, go to next letter
- continue;
- } else{ // incorrect
- $flag = false;
- continue 2;
- }
- }
- if($flag){
- array_push($words, $word);
- }
- }// конец цикла foreach
- unset($word);
- $deadWords = array();
- //удаляем слова с исключёнными буквами
- foreach ($words as $word){
- for ($i=0; $i < mb_strlen($dead); $i++) {
- if(mb_strpos($word, $dead[$i]) !== false){
- error_log("adding " . $word . " to deadWords");
- array_push($deadWords, $word);
- continue 2;
- }
- }
- }
- unset($word);
- $words = array_values(array_diff($words, $deadWords));
- $alphabet = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
- $letters = array_fill_keys(mb_str_split($alphabet), 0);
- // проверка каждой букве на наличие в слове
- foreach($words as $word){
- // проверить каждую букву в каждом слове
- for($i=0; $i<26; $i++){
- if(mb_strpos($word,$alphabet[$i]) !== false){
- $letters[ $alphabet[$i] ]++;
- }
- }
- }// конец цикла foreach
- unset($word);
- arsort($letters, SORT_NUMERIC);
- // нормализуйте числа к размеру слов
- $num_words = count($words);
- foreach($letters as $l => $v){
- $letters[$l] = $letters[$l] / $num_words;
- }
- //удалить буквы с нулевой вероятностю
- foreach($letters as $l=>$v){
- if($v == 0 || $v == 1){
- $letters = array_diff($letters, array($l=>$v));
- }
- }
- unset($l);
- $ret = array("words"=>$words, "letters"=>$letters);
- var_dump($ret);
- //echo json_encode($ret);
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement