1

Boggleソルバーを組み立てているときに、誰かが私に説明してくれることを期待していた奇妙な動作に遭遇しました。可能な単語のセットを返す関数を取得しましたが、同じ正方形を2回訪問して作成された単語がソルバーに含まれないようにする方法が欠けているように見えました。seen以前に探索したパスをメモするために使用されるグローバル変数(これは正しくないことを知っています)を反復処理することにより、現在のプレイ内ですでに訪問した正方形のリスト(ボードを表す文字列内のインデックス番号のリスト)を作成しようとしました。ただし、以下を使用してこれらの値で変数を初期化するだけです。

previous_ind = [j for (pre, j) in seen]

再帰関数内でfind_bwords、何らかの形でインデックス変数に影響を与えi、find_bwordsの最後の行に由来するIndexErrorsを引き起こします。

seen = set() #(prefix, index) pairs

def boggle_words(board, minlength=3):
    "Find all the words on this Boggle board; return as a set of words."
    results = set()
    for i, sq in enumerate(board):
        if is_letter(sq):
            find_bwords(board, sq, i, results, minlength)
    return results

def find_bwords(board, pre, start, results, minlength): #adds to seen and results
    global seen
    #prev_ind = [j for (pre, j) in seen]  <---mystery culprit
    if (pre, start) not in seen:
        seen.add((pre, start))
        if len(pre) >= minlength and pre in WORDS:
            results.add(pre)
        if pre in PREFIXES:
            for i in neighbors(start, int(sqrt(len(board)))):
                #print 'index: ', i
                find_bwords(board, pre+board[i], i, results, minlength)

紹介する前のインデックスのプリントアウトの一部を次に示しますprev_ind

index:  0
index:  1
index:  2
index:  6
index:  8
index:  12
index:  13
index:  14
index:  1
index:  2

そしてここに後の部分があります:

index:  0
index:  -7
index:  -14
index:  -21
index:  -28
index:  -35
index:  -42

なぜこうなった?

明確にするために、私はこの割り当ての解決策を探していません。別の方法で解決しました。この場合に何が起こっているのかを理解したいだけです。

4

1 に答える 1

4

問題は、割り当てているこの行にありpre、以前の値を上書きします。

prev_ind = [j for (pre, j) in seen]  # <---mystery culprit

これに変更してみてください。期待どおりに機能するはずです。

prev_ind = [j for (pre2, j) in seen] 
于 2012-07-17T21:45:08.440 に答える