0

私は、完了しようとしている小さな個人的なプロジェクトを持っています。文字列を取得し、その文字列のバリエーションから単語を「作成」する必要があります。既知の単語のリストを含むテキスト ファイルと照合します (単語は改行で区切られています)。

要約すれば:

  • ユーザーは文字列 $chars_provided を提供します (つまり、"jdlwhfushfmgh")、
  • $chars_provided が展開されます
  • 爆発した $chars_provided は、上記の文字列から単語を作成するためにランダムに配置されます
  • 単語が存在することを確認するために、辞書テキスト ファイルに対してチェック/検証された単語を作成しました
  • 結果は、作成した単語の文字数で表示されます。上限は 100 単語です。

頭の中に概念があり、それをどのように行うべきかわかりません。プロセスを説明できる人を探しているだけです。

<?php

// list of words, one per line
$dictionary = file_get_contents('dictionary.txt');

// provided characters, in the end by user
$chars_provided = "a,t,w,q,u,i,f,d,s,b,v,x,o";

// count the total # of characters
$chars_count = strlen($chars_provided);

// display given information so far
echo "The letters '$chars_provided' were entered, totaling $chars_count letters.";

// explode the characters by using the comma designator
$break_chars = explode(",", $chars_provided);

foreach ($break_chars as $letter) {
    echo "$letter[0]";
}
4

2 に答える 2

2

これは、辞書内の各単語の文字数を取得し、それを保持してから、ユーザー入力の文字数と照合すると簡単です。

たとえば、'aaab' の場合、'a' が 3 個未満 (または等しい)、'b' が 1 個未満 (または等しい) で、他の文字がない単語は一致します。

//// 1. Grab letter counts for your user input.

$user_input_chars = 'abcdefg'; // for example
$user_in_letter_counts = get_letter_counts($user_input_chars);

// $letters[$char][$num] will contain all words that have exactly $num number of $char characters
$letters = array('a' => array(), 'b' => array(), /* ...,*/ 'z' => array());

//// 2. Generate list of words with at least $number_of quantity of $letter characters
//     (only have to be done once for any amount of user input if you keep this in memory)
foreach ($words as $word){
    // get letter counts for each type of character for this word
    $letter_counts = get_letter_counts($word);
    // store in array of letters and count
    foreach($letter_counts as $letter => $number_of){
        // we already have a word that had $number_of $letter characters; add word to existing array
        if (isset($letters[$letter][$number_of])){
            $letters[$letter][$number_of][] = $word;
        } // make array to record that this word has $number_of $letter characters
        else {
            $letters[$letter][$number_of] = array($word);
        }
        $number_of--;
    }
}

//// 3. Find matching words.
$potential_words = array();
foreach ($letters as $letter => $arr){
    foreach($arr as $num => $words){
        // if this array has less than or equal to the number of $letter characters that the user input has,
        // add the words to the potential match list for that character
        if ($num <= $arr[$user_in_letter_counts[$letter]]){
            $potential_words[$letter] = array_merge($potential_words[$letter], $words);
        }
    }
}

// the words must have met the requirement for each character, so only grab words that satisfy all conditions
$all_matching_words = array_intersect($potential_words['a'], $potential_words['b'], /* ..., */ $potential_words['z']);

// (It should be trivial to just grab 100 of these.)

function get_letter_counts($word){
    $result = array();
    $result['a'] = substr_count($my_word, 'a');
    $result['b'] = substr_count($my_word, 'b');
    // ...
    $result['z'] = substr_count($my_word, 'z');
    return $result;
}
于 2012-11-02T23:27:14.267 に答える
0

これを使用できることを願っています。

$file = file_get_contents("dictionary.txt");
    $SearchString = "jdlwhfushfmgh/maybeasencondword";
    $breakstrings = explode('/',$SearchString);

    foreach ($breakstrings as $values)
    {
        if(!strpos($file, $values))
        {
            echo $values." string not found!\n";
        }
        else
        {
            echo $values." string Found!\n";
        }
于 2012-11-02T20:42:33.180 に答える