$v){ $currentletter = $v; fseek($handle,$letterstartindex[$currentletter]); while (($buffer = fgets($handle, 4096)) !== false && $currentletter === $buffer[0]) { if(strlen($buffer) <= 4) continue; // 2 letter words are in the dictionary file but not in scramble $word = substr($buffer,0,-1); if(wordsearch($word,$k,$usedletterindex)){ echo $word."\n"; } } } fclose($handle); } function wordsearch($word,$matrixStartIndex,$usedletterindex){ global $matrix; $found = 1; if($word[0] === $matrix[$matrixStartIndex]){ $usedletterindex[$matrixStartIndex] = 1; // mark off first letter $found = crawlsearch($word,1,$matrixStartIndex,$usedletterindex); } else{ $found = 0; } return $found; } function crawlsearch($word,$wordindex,$matrixstartindex,$usedletterindex){ global $matrix,$columns,$lettercount; $usedletterindex[$matrixstartindex] = 1; if(strlen($word)==$wordindex+1){ // word has been found return 1; } $n = $s = $e = $w = 0; if($matrixstartindex >= $columns){ // check north $n = 1; $target = $matrixstartindex - $columns; if(!$usedletterindex[$target] && ($matrix[$target] === $word[$wordindex])){ // found $status = crawlsearch($word,$wordindex+1,$target,$usedletterindex); if($status == 1) return $status; } } if($matrixstartindex % $columns){ // check west $w = 1; $target = $matrixstartindex - 1; if(!$usedletterindex[$target] && ($matrix[$target] === $word[$wordindex])){ // found $status = crawlsearch($word,$wordindex+1,$target,$usedletterindex); if($status == 1) return $status; } } if(($matrixstartindex % $columns) != $columns-1){ // check east $e = 1; $target = $matrixstartindex + 1; if(!$usedletterindex[$target] && ($matrix[$target] === $word[$wordindex])){ // found $status = crawlsearch($word,$wordindex+1,$target,$usedletterindex); if($status == 1) return $status; } } if($matrixstartindex < ($lettercount-$columns)){ // check south $s = 1; $target = $matrixstartindex + $columns; if(!$usedletterindex[$target] && ($matrix[$target] === $word[$wordindex])){ // found $status = crawlsearch($word,$wordindex+1,$target,$usedletterindex); if($status == 1) return $status; } } if($n && $e){ // check northeast $target = ($matrixstartindex-$columns)+1; if(!$usedletterindex[$target] && ($matrix[$target] === $word[$wordindex])){ // found $status = crawlsearch($word,$wordindex+1,$target,$usedletterindex); if($status == 1) return $status; } } if($n && $w){ // check northwest $target = ($matrixstartindex-$columns)-1; if(!$usedletterindex[$target] && ($matrix[$target] === $word[$wordindex])){ // found $status = crawlsearch($word,$wordindex+1,$target,$usedletterindex); if($status == 1) return $status; } } if($s && $e){ // check southeast $target = ($matrixstartindex+$columns)+1; if(!$usedletterindex[$target] && ($matrix[$target] === $word[$wordindex])){ // found $status = crawlsearch($word,$wordindex+1,$target,$usedletterindex); if($status == 1) return $status; } } if($s && $w){ // check southwest $target = ($matrixstartindex+$columns)-1; if(!$usedletterindex[$target] && ($matrix[$target] === $word[$wordindex])){ // found $status = crawlsearch($word,$wordindex+1,$target,$usedletterindex); if($status == 1) return $status; } } } ?>