@VisibleForTesting
List<GenericPair<List<IShip>, List<IShip>>> calculatePairing(List<IShip> attackingShips, List<IShip> defendingShips){
List<GenericPair<List<IShip>, List<IShip>>> pairings = new ArrayList<>();
if (attackingShips.size() == defendingShips.size()){
for (int i = 0; i < attackingShips.size(); i++) {
addPairing(attackingShips, defendingShips, pairings, i);
}
return pairings;
}
int minSize = Math.min(attackingShips.size(), defendingShips.size());
for (int i = 0; i < minSize; i++) {
addPairing(attackingShips, defendingShips, pairings, i);
}
if (attackingShips.size() < defendingShips.size()) {
for (int i = minSize; i < defendingShips.size(); i++) {
GenericPair<List<IShip>, List<IShip>> weakestDefendingPair = findWeakest(pairings, false);
weakestDefendingPair.getSecond().add(defendingShips.get(i));
}
} else {
for (int i = minSize; i < attackingShips.size(); i++) {
GenericPair<List<IShip>, List<IShip>> weakestDefendingPair = findWeakest(pairings, true);
weakestDefendingPair.getFirst().add(attackingShips.get(i));
}
}
return pairings;
}
@VisibleForTesting