2017-01-10 23 views
0

だから、基本的に。私がしようとしているのは、スクランブルされた単語を入れてそれを解読する単語解読不能語を作成することです。それはうまく動作しますが、私は個々の文字を個別にチェックしますが、何らかの理由で余分な文字がスリップします。余分な文字...?

"olehl (hello)"と入力すると、"dhole, haole, helio, hello, helos, helot, holed, holes, holey, hosel, hotel, hovel, hoyle, mohel, sheol, thole, whole"が返されます。私は"mohel""dhole"のようなものがどのようにそこに入ったのか分かりません。

マイコード:

function unscramble(word) { 
    var words = require("an-array-of-english-words"); 

    var matched = []; 

    words.forEach((x) => { 
     if(word.length != x.length) { 

     } else { 
      if(matched.length == 42) return; 

      var newword = word.split(''); 

      var added = 0; 

      var i = 0; 

      for(i = 0; i <= newword.length-1; i++) { 
       if(x.indexOf(newword[i]) >= 0) added++; 

       if(i == word.length-1 && added == word.length && added == x.length) matched.push(x); 
      } 

     } 
    }); 

    return matched; 
} 
+0

あなたはそれをデバッグする必要があります。デバッガまたはprintステートメントを使用してコードを1行ずつ実行し、余分な文字がどこに挿入されているかを調べます。 – Carcigenicate

+0

私は、 "newword"文字列は決して変更しています。 – Anthemius

+0

さて、彼らはどこかに入ってきています。もう一度やり直す必要があります。 'matched.push'で行を見て、悪い文字の単語が追加されるまで待ってから、その単語の出所を見つけ出してください。 – Carcigenicate

答えて

1

x.indexOf(newword[i])はまだxがnewwordないという文字が含まれている場合にも当てはまりすることができます。したがって、同じ長さでlが2回一致するため、hellodholeと一致することがあります。 heloo(別の金額で同じ文字)のようなものではなく、helloと一致させたい場合は、どの文字が消費されたかを把握する必要もあります。

これを行う方法はたくさんありますが、実際には見つかった文字を削除するのはxです。

const idx = x.indexOf(newword[i]); 
if (-1 !== idx) { 
    added++; 
    // remove this character 
    // You will have to keep track of the original length of `x` as well 
    x = x.substring(0, idx) + x.substring(idx + 1, x.length); 
} 

はまた、ソートxnewwordと結果の文字列/配列を比較することができます。

0

私は爆発薬に同意します。次のようなものはどうですか(jsではなく、概要のみ)。

function unscramble(word) 
    var dictionary = some_array_of_words 
    var matches = [] 
    var sortedWord = word.split('').sort().join('') // sort the word 

    dictionary.forEach(dictionaryWord) { 
    if (sortedWord.length == dictionaryWord.length) { 
     sortedDictionaryWord = dictionaryWord.split('').sort().join('') 
     if sortedWord == sortedDictionaryWord { 
     matches.push (dictionaryWord) 
     } 
    } 
    } 
    return matches 
} 
関連する問題