1

私はこれを解決しようとしています: CodeEval

この問題では、XY 座標で考えられる点の候補のリストを調べる必要があります。次に、それらが要件を満たしている場合は、それらを「確認済み」リストに追加し、周囲のポイントを「tosearch」リストに追加します。ただし、これは私が期待する動作とはまったく異なります。

コード例:

Starting point
tosearch=[[0,0]] 

for point in tosearch:

    if conditions filled:
        confirmed.append(point)
        #Basically Im trying to add (x,y-1) etc. to the tosearct list
        tosearch.append([point[0],point[1]-1])  #1 
        tosearch.append([point[0]+1,point[1]])  #2
        tosearch.append([point[0]-1,point[1]-1])#3
        tosearch.append([point[0],point[1]+1])  #4
        tosearch.remove(point)
else:
     tosearch.remove(point)

これにより、追加の半分が常に無視されるようです。したがって、この場合、#1 と #3 は無視されます。1&2 だけを残すと、2 だけが実行されます。理解できません...

たぶん問題は他の場所にあるので、ここにコード全体があります: Pastebin

4

2 に答える 2

5

コレクションを繰り返し処理しながら、コレクションを変更しています。
2つのオプション:

  1. リストをコピーし、コピーを繰り返し、元のリストを変更します。
  2. どのような変更を加える必要があるかを追跡し、反復後にすべてを変更します。
于 2012-07-16T18:53:26.180 に答える
0

問題はtosearch、反復するループの本体を変更していることtosearchです。は変化しているためtosearch、確実に反復することはできません。

おそらく、反復する必要はまったくありません。whileループを使用するだけです:

searched = set() # if you need to keep track of searched items
tosearch = [(0,0)] #use tuples so you can put them in a set
confirmed = []

while tosearch:
    point = tosearch.pop()
    searched.add(point) # if you need to keep track
    if CONDITIONS_MET:
        confirmed.append(point)
        # tosearch.append() ....
于 2012-07-16T19:04:32.243 に答える