-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathObjectFall.java
216 lines (195 loc) · 5.29 KB
/
ObjectFall.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
import java.util.ArrayList;
import java.util.Collections;
// Paste me into the FileEdit configuration dialog
// $METADATA$
public class ObjectFall {
private class Obj implements Comparable<Obj> {
int y;
int x1;
int x2;
/*
* (非 Javadoc)
*
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
public int compareTo(Obj o) {
return y < o.y ? 1 : -1;
}
/* (非 Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Obj [y=" + this.y + ", x1=" + this.x1 + ", x2=" + this.x2 + "]";
}
}
public int howLong(int x, int y, String[] obstacles) {
ArrayList<Obj> list = new ArrayList<Obj>();
for (String tmp : obstacles) {
String[] split = tmp.split(" ");
Obj e = new Obj();
list.add(e);
e.y = Integer.valueOf(split[0]);
e.x1 = Integer.valueOf(split[1]);
e.x2 = Integer.valueOf(split[2]);
}
Collections.sort(list);
int time = 0;
for (Obj obj : list) {
if (obj.y <= y && obj.x1 <= x && x <= obj.x2) {
x = obj.x2;
time += 5 + (y - obj.y);
y= obj.y;
}
}
time += y;
return time;
}
// BEGIN CUT HERE
public static void main(String[] args) {
if (args.length == 0) {
ObjectFallHarness.run_test(-1);
} else {
for (int i = 0; i < args.length; ++i)
ObjectFallHarness.run_test(Integer.valueOf(args[i]));
}
}
// END CUT HERE
}
// BEGIN CUT HERE
class ObjectFallHarness {
public static void run_test(int casenum) {
if (casenum != -1) {
if (runTestCase(casenum) == -1)
System.err.println("Illegal input! Test case " + casenum + " does not exist.");
return;
}
int correct = 0, total = 0;
for (int i = 0;; ++i) {
int x = runTestCase(i);
if (x == -1) {
if (i >= 100)
break;
continue;
}
correct += x;
++total;
}
if (total == 0) {
System.err.println("No test cases run.");
} else if (correct < total) {
System.err.println("Some cases FAILED (passed " + correct + " of " + total + ").");
} else {
System.err.println("All " + total + " tests passed!");
}
}
static boolean compareOutput(int expected, int result) {
return expected == result;
}
static String formatResult(int res) {
return String.format("%d", res);
}
static int verifyCase(int casenum, int expected, int received) {
System.err.print("Example " + casenum + "... ");
if (compareOutput(expected, received)) {
System.err.println("PASSED");
return 1;
} else {
System.err.println("FAILED");
System.err.println(" Expected: " + formatResult(expected));
System.err.println(" Received: " + formatResult(received));
return 0;
}
}
static int runTestCase(int casenum__) {
switch (casenum__) {
case 0: {
int x = 15;
int y = 10;
String[] obstacles = { "005 010 020" };
int expected__ = 15;
return verifyCase(casenum__, expected__, new ObjectFall().howLong(x, y, obstacles));
}
case 1: {
int x = 15;
int y = 12;
String[] obstacles = { "010 010 020", "015 010 020", "005 020 050" };
int expected__ = 22;
return verifyCase(casenum__, expected__, new ObjectFall().howLong(x, y, obstacles));
}
case 2: {
int x = 50;
int y = 85;
String[] obstacles = { "020 001 100", "010 100 100", "005 100 200" };
int expected__ = 100;
return verifyCase(casenum__, expected__, new ObjectFall().howLong(x, y, obstacles));
}
case 3: {
int x = 10;
int y = 1000;
String[] obstacles = {};
int expected__ = 1000;
return verifyCase(casenum__, expected__, new ObjectFall().howLong(x, y, obstacles));
}
case 4: {
int x = 500;
int y = 800;
String[] obstacles = { "800 001 500", "400 001 499", "401 501 999" };
int expected__ = 805;
return verifyCase(casenum__, expected__, new ObjectFall().howLong(x, y, obstacles));
}
case 5: {
int x = 645;
int y = 802;
String[] obstacles = { "739 038 799", "916 169 791", "822 372 911", "162 125 992", "261 307 545",
"510 031 765", "592 723 742", "477 315 676", "566 143 617", "337 114 664",
"986 648 883", "116 230 680", "254 746 943", "742 948 988", "060 117 401",
"634 035 433", "288 741 864", "819 626 730", "906 071 222", "554 100 121",
"573 051 551", "949 528 915", "562 151 223", "857 135 243", "621 115 474",
"588 405 615", "895 812 919", "052 378 836", "858 116 505", "285 428 469",
"792 244 250", "109 265 637", "714 804 885", "625 150 410", "518 593 921",
"282 235 339", "081 212 659", "663 047 982", "556 194 345", "798 150 938",
"391 026 813", "886 348 796", "975 007 743", "053 854 895", "243 561 875" };
int expected__ = 817;
return verifyCase(casenum__, expected__, new ObjectFall().howLong(x, y, obstacles));
}
// custom cases
/*
* case 6: {
* int x = ;
* int y = ;
* String[] obstacles = ;
* int expected__ = ;
*
* return verifyCase(casenum__, expected__, new ObjectFall().howLong(x,
* y, obstacles));
* }
*/
/*
* case 7: {
* int x = ;
* int y = ;
* String[] obstacles = ;
* int expected__ = ;
*
* return verifyCase(casenum__, expected__, new ObjectFall().howLong(x,
* y, obstacles));
* }
*/
/*
* case 8: {
* int x = ;
* int y = ;
* String[] obstacles = ;
* int expected__ = ;
*
* return verifyCase(casenum__, expected__, new ObjectFall().howLong(x,
* y, obstacles));
* }
*/
default:
return -1;
}
}
}
// END CUT HERE