Perché sto ricevendo l'avvertimento "argomentazione mancante" sul mio solutore di boggle?
Domanda
Alcuni anni fa qui qualcuno aveva pubblicato un codice PHP su un risolutore di boggle che hanno realizzato con PHP.
Come trovare un elenco di possibili parole da una matrice di lettera [Solver Boggle
Ho cercato di farlo funzionare, ma ricevo un errore di "Avviso: Manca Argomento 7 per find_words ()" che già conosco perché sembrava dimenticare di passare una variabile nella funzione. Ho cercato di farlo funzionare ma non riesco a capirlo, qualcun altro può farlo? C'è qualche possibilità che qualcuno abbia qualcosa di un po 'più elegante? Forse qualcosa che può tracciare il percorso delle parole? Comunque se qualcuno potesse avere qualche input che sarebbe fantastico.
$boggle = "fxie
amlo
ewbx
astu";
$alphabet = str_split(str_replace(array("\n", " ", "\r"), "", strtolower($boggle)));
$rows = array_map('trim', explode("\n", $boggle));
$dictionary = file("C:/dict.txt");
$prefixes = array(''=>'');
$words = array();
$regex = '/[' . implode('', $alphabet) . ']{3,}$/S';
foreach($dictionary as $k=>$value) {
$value = trim(strtolower($value));
$length = strlen($value);
if(preg_match($regex, $value)) {
for($x = 0; $x < $length; $x++) {
$letter = substr($value, 0, $x+1);
if($letter == $value) {
$words[$value] = 1;
} else {
$prefixes[$letter] = 1;
}
}
}
}
$graph = array();
$chardict = array();
$positions = array();
$c = count($rows);
for($i = 0; $i < $c; $i++) {
$l = strlen($rows[$i]);
for($j = 0; $j < $l; $j++) {
$chardict[$i.','.$j] = $rows[$i][$j];
$children = array();
$pos = array(-1,0,1);
foreach($pos as $z) {
$xCoord = $z + $i;
if($xCoord < 0 || $xCoord >= count($rows)) {
continue;
}
$len = strlen($rows[0]);
foreach($pos as $w) {
$yCoord = $j + $w;
if(($yCoord < 0 || $yCoord >= $len) || ($z == 0 && $w == 0)) {
continue;
}
$children[] = array($xCoord, $yCoord);
}
}
$graph['None'][] = array($i, $j);
$graph[$i.','.$j] = $children;
}
}
function to_word($chardict, $prefix) {
$word = array();
foreach($prefix as $v) {
$word[] = $chardict[$v[0].','.$v[1]];
}
return implode("", $word);
}
function find_words($graph, $chardict, $position, $prefix, $prefixes, &$results, $words) {
$word = to_word($chardict, $prefix);
if(!isset($prefixes[$word])) return false;
if(isset($words[$word])) {
$results[] = $word;
}
foreach($graph[$position] as $child) {
if(!in_array($child, $prefix)) {
$newprefix = $prefix;
$newprefix[] = $child;
find_words($graph, $chardict, $child[0].','.$child[1], $newprefix, $prefixes, $results, $words);
}
}
}
$solution = array();
find_words($graph, $chardict, 'None', array(), $prefixes, $solution);
print_r($solution);
Soluzione
Prova a sostituire il find_words
Chiama in fondo con:
find_words($graph, $chardict, 'None', array(), $prefixes, $solution, $words);
Ha appena dimenticato di trasmettere un argomento, il codice sembra ... accettabile.