2013-06-02 36 views
0

如果我甚至不能提供我曾嘗試過的東西,我很抱歉,因爲我甚至無法確定從哪裏開始。php - 爲字謎求解器添加通配符

我有這個anagram求解器,它工作的很好,問題是我希望能夠添加允許用戶包含的能力?作爲進入該領域的通配符。

例如讓我們說用戶把他們的字母fjsiem?顯然,意味着任何信件。因此,結果將顯示與字段中的字母相匹配的單詞以及包含任何其他字母的任何其他單詞。

我也希望能夠在每個包含通配符的單詞中指出通配符(字母),以便我可以更改其顏色,以便用戶知道哪些單詞具有通配符。

有沒有人可以看看我的代碼並幫助我?

被調用的word文件是combined.txt,它在每一個新行中都包含單詞。

  <? 
      if(!empty($_POST['l'])) { 
       $time_start = microtime(true); 
       $l = $_POST['l']; 
       $l = strtolower($l); 
       $len = strlen($l); 

       $a = array('a' => 1, 'b' => 1, 'c' => 1, 'd' => 1, 'e' => 1, 'f' => 1, 'g' => 1, 'h' => 1, 'i' => 1, 'j' => 1, 'k' => 1, 'l' => 1, 'm' => 1, 'n' => 1, 'o' => 1, 'p' => 1, 'q' => 1, 'r' => 1, 's' => 1, 't' => 1, 'u' => 1, 'v' => 1, 'w' => 1, 'x' => 1, 'y' => 1, 'z' => 1); 

       function contains($word) { 
        $wlen = strlen($word); 
        if($wlen < 2 || $wlen > 10) return FALSE; 

        for($i = 0; $i < $wlen; $i++) { 
         $w[$i] = $word[$i]; 
        } 

        $b = $GLOBALS['b'];  
        foreach($b as $n => $c) { 
         foreach($w as $k => $v) { 
          if($v == $c) { 
           unset($w[$k]); 
           unset($b[$n]); 
           break; 
          } 
         } 
        } 
        if(count($w) > 0) return FALSE; 
        return TRUE; 
       } 


       for($i = 0; $i < $len; $i++) { 
        $b[$i] = $l[$i]; 
        unset($a[$l[$i]]); 
       } 

       $e = 'cat combined.txt'; 
       while(list($k) = each($a)) { 
        if(!$e) { 
         $e = "grep -v $k combined.txt"; 
        } else { 
         $e .= ' | grep -v '. $k; 
        } 
       } 

       exec($e, $o); 

       settype($w, 'array'); 
       foreach($o as $v) { 
        if(contains($v)) { 
         $w[] = $v; 
        } 
       } 

       function mycmp($a, $b) { 
        $ca = strlen($a); 
        $cb = strlen($b); 
        if($ca == $cb) return 0; 
        if($ca > $cb) return 1; 
        return -1; 
       } 
       usort($w, 'mycmp'); 

       $wc = 0; 
       foreach($w as $v) { 
        $c = strlen($v); 
        if($wc != $c) { 
         echo "<p>\n"; 
         echo "<b>$c letter words</b><br>"; 
        } 
        $wc = $c; 
        echo "$v &nbsp; "; 
       } 
      } 
      ?> 

回答

0

如果你想成爲非常懶惰,你總是可以解決fjsiem?通過fjsiemz在fjsiema上運行你的工作代碼。

如果我正在閱讀你的代碼,你會發現單詞列表,只有那些在他們中有一個f,然後在他們中,然後是一個在他們中,然後是我在他們中,然後在他們中,然後是他們中的一個。因此,所有剩下7個字母的單詞,{7}必須符合您的標準。