これは Python です。Javaに翻訳できるように、これがどのように機能するかを正確に理解しようとしています。
numInversions = sum(
state.index(START[j]) > state.index(START[i])
for i in range(16) for j in range(i) # each pair (i,j)
)
このような:
numInversions = 0
for i in range(16):
for j in range(i):
if state.index(START[j]) > state.index(START[i]):
numInversions += 1
はまたはと同等の a を返し>
ます。bool
0
1
コードは詳細形式に似ています
numInversions = =
for i in range(16):
for j in range(i):
if state.index(START[j]) > state.index(START[i]):
numInversions += 1
ただし、式全体がジェネレーター式としてラップされ、組み込みの sum に渡されます。
ネストされたループ構造は左から右に読み取られるため、次のように展開されます。
for i in range(16):
for j in range(i):
ブール値の True または False に評価される条件が合計されます。したがって、条件がTrueと評価されるすべてのインスタンスをカウントすることになります
内側のループは、2 つのネストされたループに基づいてブール値 (True
および) を生成します。False
Python では、ブール値は のサブクラスでint
あり、合計すると、それぞれ1
および0
として機能します。True
False
したがって、これを次のように書き換えることができます。
numInversions = 0
for i in range(16):
for j in range(i):
if state.index(START[j]) > state.index(START[i]):
numInversions += 1
(疑似)Java:
int numInversions = 0;
for (int i = 0; i < 16; ++i) {
for (int j = 0; j < i; ++j) {
if (state.index(START[j]) > state.index(START[i])) {
++numInversions;
}
}
}