import static java.lang.Integer.parseInt;
/**
* Coding Dojo Session
* Write a program to score a game of Ten-Pin Bowling.
* http://cyber-dojo.org/setup/show/
* Date: 15/07/2015
**/
public class Bowling {
private static final int MAX_SCORE = 10;
private static final String STRIKE = "X";
private static final String SPARE = "/";
public static int play(String gameFrame) {
int score = 0;
String[] splitGameFrame = gameFrame.replace("-", "0").split("\\|");
for (int i = 0; i < splitGameFrame.length; i++) {
final String frame = splitGameFrame[i];
if (i < splitGameFrame.length - 1) {
final String nextFrame = splitGameFrame[i + 1];
score += computeFrameScore(frame, nextFrame);
} else {
score += computeFrameScore(frame, "--");
}
}
return score;
}
private static int computeFrameScore(String frame, String nextFrame) {
if (frameCharAt(frame, 0).equals(STRIKE)) {
return MAX_SCORE + frameScore(nextFrame);
} else if (frameCharAt(frame, 1).equals(SPARE)) {
return MAX_SCORE + ballScore(nextFrame, 0);
}
return frameScore(frame);
}
private static int frameScore(String frame) {
return ballScore(frame, 0) + ballScore(frame, 1);
}
private static int ballScore(String frame, int position) {
final String ballScoreStr = frameCharAt(frame, position);
if(ballScoreStr.equals(SPARE))return MAX_SCORE-ballScore(frame,0);
return parseInt(ballScoreStr);
}
private static String frameCharAt(String Frame, int position) {
return Frame.substring(position, position + 1);
}
}