逆に戻ってリストの反対側に到達できると仮定すると、リスト内の文字間の最短経路をどのように見つけますか, パックマンスタイル
letters = ['a', 'd', 'e', 'l', 's']
letters.loopDistance('a', 's')
1 を返します
letters.loopDistance('a', 'l')
返品 2
逆に戻ってリストの反対側に到達できると仮定すると、リスト内の文字間の最短経路をどのように見つけますか, パックマンスタイル
letters = ['a', 'd', 'e', 'l', 's']
letters.loopDistance('a', 's')
1 を返します
letters.loopDistance('a', 'l')
返品 2
前方距離を見つけます (必要に応じてラップアラウンドします)。それがリストの長さの半分を超える場合、反対方向に進むと距離が短くなり、リストの長さから差し引くことですぐに計算できます。
文字が複数回出現する場合、主に答えとして何を求めているかがあいまいになるため、状況は少し複雑になります。
def distance(l, first, second):
ifirst = l.index(first)
isecond = l.index(second)
return min((ifirst - isecond) % len(l), (isecond - ifirst) % len(l))
基本的に、両方向の距離を測定し、最小のものを選択します。