/
Dart.java
102 lines (90 loc) · 2.82 KB
/
Dart.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package level01;
public class Dart {
private String dartResult;
private int[] scores;
private int scoreIndex;
public Dart() {
scores = new int[3];
scoreIndex = 0;
}
public int solution(String dartResult) {
this.dartResult = dartResult;
while (scoreIndex != 3)
calculateScore();
return sum();
}
public void calculateScore() {
setScore();
setBonus();
if (isOptionValid())
setOption();
scoreIndex++;
}
public void setScore() {
try {
scores[scoreIndex] = Integer.parseInt(dartResult.substring(0, 2));
dartResult = dartResult.substring(2);
} catch (NumberFormatException e) {
scores[scoreIndex] = Integer.parseInt(dartResult.substring(0, 1));
dartResult = dartResult.substring(1);
}
}
public void setBonus() {
char bonus = dartResult.charAt(0);
if (bonus == 'D')
scores[scoreIndex] = (int) Math.pow(scores[scoreIndex], 2);
else if (bonus == 'T')
scores[scoreIndex] = (int) Math.pow(scores[scoreIndex], 3);
dartResult = dartResult.substring(1);
}
public boolean isOptionValid() {
if (dartResult.isEmpty())
return false;
char option = dartResult.charAt(0);
return option == '*' || option == '#';
}
public void setOption() {
char option = dartResult.charAt(0);
if (option == '*') {
scores[scoreIndex] *= 2;
if (scoreIndex != 0)
scores[scoreIndex - 1] *= 2;
} else
scores[scoreIndex] = -scores[scoreIndex];
dartResult = dartResult.substring(1);
}
public int sum() {
int sum = 0;
for (int score : scores)
sum += score;
return sum;
}
public void reset() {
scores = new int[3];
scoreIndex = 0;
}
public static void main(String[] args) {
String dartResult = "1S2D*3T";
String dartResult2 = "1D2S#10S";
String dartResult3 = "1D2S0T";
String dartResult4 = "1S*2T*3S";
String dartResult5 = "1D#2S*3S";
String dartResult6 = "1T2D3D#";
String dartResult7 = "1D2S3T*";
Dart dart = new Dart();
System.out.println(dart.solution(dartResult));
dart.reset();
System.out.println(dart.solution(dartResult2));
dart.reset();
System.out.println(dart.solution(dartResult3));
dart.reset();
System.out.println(dart.solution(dartResult4));
dart.reset();
System.out.println(dart.solution(dartResult5));
dart.reset();
System.out.println(dart.solution(dartResult6));
dart.reset();
System.out.println(dart.solution(dartResult7));
dart.reset();
}
}