package regexgolf2.model;
import com.google.java.contract.Requires;
public class ScoreCalculator
{
private final SolvableChallenge _challenge;
private int _score;
@Requires("challenge != null")
public ScoreCalculator(SolvableChallenge challenge)
{
_challenge = challenge;
recalculate();
_challenge.addObjectChangedListener(e -> recalculate());
}
private void recalculate()
{
_score = calculateScore();
}
private int calculateScore()
{
double solutionLength = _challenge.getSolution().getSolution().length();
double amountRequirements = _challenge.getAmountRequirements();
double amtSolvedReq = _challenge.getAmountCompliedRequirements();
double unsolvedFactor = (1 / (1 + Math.pow((amountRequirements - amtSolvedReq), 2)));
if (solutionLength == 0)
return 0;
int score = (int) ((1d / solutionLength) * amtSolvedReq * amountRequirements * 100 * unsolvedFactor);
return score;
}
public int getScore()
{
return _score;
}
}