【Kotlin】総当りのロジック - AccelerometerPlay

意外と自分で考えても埒が明かないので調べてみたので。


val countries = listOf("brazil", "italy", "england", "spain", "japan")

val games = mutableListOf<String>()


val indices = countries.indices
indices.forEach { left ->
  indices.forEach { right ->
    if (left < right) {
      games.add("${countries[left]}\tvs\t${countries[right]}")
    }
  }
}

// val rights = countries.toMutableList()
// countries.forEach { left ->
//   rights.removeFirst()
//   rights.forEach { right ->
//     games.add("$left\tvs\t$right")
//   }
// }


games.forEachIndexed() { index, game ->
  println("${index + 1}. $game")
}
println("All ${games.size} games")

assertTrue(
  countries.size * (countries.size - 1) / 2 == games.size
)


1. brazil	vs	italy
2. brazil	vs	england
3. brazil	vs	spain
4. brazil	vs	japan
5. italy	vs	england
6. italy	vs	spain
7. italy	vs	japan
8. england	vs	spain
9. england	vs	japan
10. spain	vs	japan
All 10 games

総当りの表を脳内でイメージできないと、このロジックは書けないと想う。

総当り

図表をまずは描いてみること大事。

以下、移植時、ボール同士の衝突判定時に使いました。



👉 Android AccelerometerPlay Sample - Google Archive hatena-bookmark

👉 【当たり判定】円と円の当たり hatena-bookmark


関連ワード:  androidAndroidStudiokotlin初心者開発