php - 向字谜求解器添加通配符

Posted

技术标签:

【中文标题】php - 向字谜求解器添加通配符【英文标题】:php - adding wildcards to anagram solver 【发布时间】:2013-05-28 15:02:16 【问题描述】:

如果我什至无法提供我尝试过的东西,我很抱歉,因为我什至不知道从哪里开始。

我有一个很好用的字谜求解器,问题是我希望能够添加允许用户包含 ?作为字段中的通配符。

例如,假设用户输入他们的字母 fjsiem?。显然 ?指任何字母。因此,结果将显示与字段中的字母匹配的单词以及包含任何其他字母的任何其他单词。

我也希望能够指出每个包含通配符的单词中的通配符(字母),以便我可以更改其颜色,以便用户知道哪些单词具有通配符。

有没有人可以看看我的代码并帮助我?

被调用的单词文件是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; ";
                
            
            ?>

【问题讨论】:

【参考方案1】:

如果你想变得非常懒惰,你总是可以解决 fjsiem 吗?通过 fjsiemz 在 fjsiema 上运行您的工作代码。

如果我没看错你的代码,你会找到单词列表,而且只有那些里面有 f,然后是 aj,然后是 s,然后是 i,然后是 ae 的单词,然后是一个 m。因此,剩下的所有 7 个字母长的单词 .7 必须符合您的条件。

【讨论】:

以上是关于php - 向字谜求解器添加通配符的主要内容,如果未能解决你的问题,请参考以下文章

您将如何处理 PHP + MySQL 字谜求解器? [关闭]

Mysql对字谜求解器的多个查询

PHP 字谜解谜器

Ruby 字谜求解器 [关闭]

对字谜求解器实施空白平铺搜索的最佳实践

反转字谜求解器以首先显示最长的单词