Perché sto ricevendo l'avvertimento "argomentazione mancante" sul mio solutore di boggle?

StackOverflow https://stackoverflow.com/questions/8983455

  •  13-11-2019
  •  | 
  •  

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);
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top