Problem Statement
Return the distance between the given points.
Definition
- Class:
- DistanceOnCube
- Method:
- calculate
- Parameters:
- int, int, int, int, int, int, int
- Returns:
- int
- Method signature:
- int calculate(int S, int x1, int y1, int z1, int x2, int y2, int z2)
- (be sure your method is public)
Notes
- A polygonal curve is a connected sequence of line segments. It contains a sequence of vertices A1, ..., An, where each pair of consecutive vertices is connected by a line segment.
Constraints
- S will be between 1 and 100, inclusive.
- x1, y1, z1, x2, y2, z2 will all be between 0 and S, inclusive.
- Points (x1,y1,z1) and (x2,y2,z2) will belong to the faces of the cube.
Examples
4
2
2
0
3
3
0
Returns: 2
The points are placed on the same face of the cube, so the shortest polygonal curve that connects them consists of two segments, for example, (2,2,0) - (2,3,0) - (3,3,0) (the red curve on the image).
4
3
2
0
4
3
2
Returns: 4
The points are placed on adjacent faces of the cube (the blue curve on the image).
4
1
1
0
1
1
4
Returns: 6
The points are placed on opposite faces of the cube.
4
2
3
0
2
3
0
Returns: 0
The points coincide.
100
0
0
0
100
100
100
Returns: 300
#4-5 are max test (opposite vertices)
100
100
0
0
0
100
100
Returns: 300
10
0
4
9
0
4
9
Returns: 0
#6-8 are coinciding points
56
56
34
21
56
34
21
Returns: 0
14
12
0
3
12
0
3
Returns: 0
1
0
0
1
1
0
0
Returns: 2
#9-10 is S=1
1
0
0
0
0
0
1
Returns: 1
45
11
45
35
0
23
27
Returns: 41
#11-40 are random
33
33
22
12
28
33
0
Returns: 28
11
7
11
0
11
6
11
Returns: 20
46
16
0
5
35
0
26
Returns: 40
87
87
10
3
44
11
0
Returns: 47
20
1
0
6
0
15
14
Returns: 24
43
18
34
0
20
28
0
Returns: 8
42
25
42
39
13
5
42
Returns: 52
42
20
42
37
1
42
6
Returns: 50
60
26
60
42
59
46
60
Returns: 65
99
99
5
95
99
60
73
Returns: 77
13
11
11
0
8
3
13
Returns: 28
52
34
0
40
32
23
0
Returns: 65
43
14
36
43
18
43
30
Returns: 24
86
76
86
1
56
68
0
Returns: 39
46
0
36
43
26
5
46
Returns: 60
33
22
23
33
1
0
11
Returns: 66
60
55
0
40
3
60
1
Returns: 153
64
0
56
1
64
2
48
Returns: 167
27
0
11
13
11
11
27
Returns: 25
41
41
12
32
0
36
20
Returns: 87
84
36
84
71
84
51
4
Returns: 148
42
12
4
0
24
42
13
Returns: 63
84
76
42
0
0
12
2
Returns: 108
82
64
0
9
64
0
13
Returns: 4
61
61
16
40
60
13
0
Returns: 44
47
12
0
10
43
39
0
Returns: 80
30
30
26
13
23
30
22
Returns: 20
29
29
13
10
6
16
29
Returns: 45
44
14
0
35
22
0
23
Returns: 20
66
66
7
5
0
0
61
Returns: 129
#41-65 are random with one point on the edge/vertice
23
5
0
6
0
23
23
Returns: 45
70
70
10
27
70
66
70
Returns: 99
74
0
2
53
0
4
0
Returns: 55
1
0
1
1
0
1
1
Returns: 0
79
40
29
79
79
0
0
Returns: 147
3
0
0
1
0
3
3
Returns: 5
28
5
28
28
5
0
16
Returns: 40
36
1
22
0
36
0
0
Returns: 57
76
0
25
51
76
0
0
Returns: 152
1
0
1
1
1
1
0
Returns: 2
79
54
70
0
0
64
79
Returns: 139
73
57
0
0
73
55
35
Returns: 106
34
15
34
17
0
0
0
Returns: 66
76
76
0
13
14
0
73
Returns: 122
20
16
12
20
20
0
20
Returns: 16
56
33
56
21
0
56
8
Returns: 46
71
71
0
17
49
71
68
Returns: 144
72
72
0
18
0
3
43
Returns: 100
41
19
39
0
0
41
41
Returns: 62
43
16
43
11
0
20
43
Returns: 71
24
4
0
24
20
3
0
Returns: 43
8
2
0
4
8
0
0
Returns: 10
28
20
0
0
28
0
28
Returns: 36
9
7
0
1
0
0
0
Returns: 8
20
0
1
2
20
2
3
Returns: 24
#66-89 are breaking branches of case-checking solution. if (x1 == 0 x2 == S) ret = Math.min(ret,S + y1 + y2 + Math.abs(z2-z1));
30
30
1
2
0
3
4
Returns: 36
if (x1 == S x2 == 0) ret = Math.min(ret,S + y1 + y2 + Math.abs(z2-z1));
25
0
4
2
25
6
1
Returns: 30
if (x1 == 0 x2 == S) ret = Math.min(ret,S + z1 + z2 + Math.abs(y2-y1));
62
62
10
8
0
6
3
Returns: 77
if (x1 == S x2 == 0) ret = Math.min(ret,S + z1 + z2 + Math.abs(y2-y1));
89
0
83
13
89
75
10
Returns: 112
if (x1 == 0 x2 == S) ret = Math.min(ret,3*S - y1 - y2 + Math.abs(z2-z1));
34
34
29
4
0
33
6
Returns: 42
if (x1 == S x2 == 0) ret = Math.min(ret,3*S - y1 - y2 + Math.abs(z2-z1));
49
0
13
43
49
10
45
Returns: 62
67
67
3
66
0
10
56
Returns: 86
if (x1 == S x2 == 0) ret = Math.min(ret,3*S - z1 - z2 + Math.abs(y2-y1));
10
1
0
2
3
10
4
Returns: 16
if (y1 == 0 y2 == S) ret = Math.min(ret,S + x1 + x2 + Math.abs(z2-z1));
94
3
94
9
8
0
14
Returns: 110
if (y1 == S y2 == 0) ret = Math.min(ret,S + x1 + x2 + Math.abs(z2-z1));
48
13
0
5
8
48
1
Returns: 59
32
15
32
3
10
0
1
Returns: 41
if (y1 == S y2 == 0) ret = Math.min(ret,S + z1 + z2 + Math.abs(x2-x1));
41
40
0
5
37
41
8
Returns: 49
if (y1 == 0 y2 == S) ret = Math.min(ret,3*S - x1 - x2 + Math.abs(z2-z1));
70
36
70
10
65
0
14
Returns: 113
if (y1 == S y2 == 0) ret = Math.min(ret,3*S - x1 - x2 + Math.abs(z2-z1));
18
3
0
15
2
18
17
Returns: 23
if (y1 == 0 y2 == S) ret = Math.min(ret,3*S - z1 - z2 + Math.abs(x2-x1));
52
8
52
39
13
0
46
Returns: 76
if (y1 == S y2 == 0) ret = Math.min(ret,3*S - z1 - z2 + Math.abs(x2-x1));
55
1
5
0
7
9
55
Returns: 67
if (z1 == 0 && z2 == S) ret = Math.min(ret,S + x1 + x2 + Math.abs(y2-y1));
77
17
20
77
2
35
0
Returns: 111
39
3
15
39
9
19
0
Returns: 55
if (z1 == 0 && z2 == S) ret = Math.min(ret,S + y1 + y2 + Math.abs(x2-x1));
100
19
34
100
41
28
0
Returns: 166
if (z1 == S && z2 == 0) ret = Math.min(ret,S + y1 + y2 + Math.abs(x2-x1));
27
25
5
0
19
3
27
Returns: 39
if (z1 == 0 && z2 == S) ret = Math.min(ret,3*S - x1 - x2 + Math.abs(y2-y1));
71
70
17
71
65
24
0
Returns: 85
if (z1 == S && z2 == 0) ret = Math.min(ret,3*S - x1 - x2 + Math.abs(y2-y1));
44
7
40
0
15
35
44
Returns: 65
if (z1 == 0 && z2 == S) ret = Math.min(ret,3*S - y1 - y2 + Math.abs(x2-x1));
63
22
60
63
13
41
0
Returns: 97
if (z1 == S && z2 == 0) ret = Math.min(ret,3*S - y1 - y2 + Math.abs(x2-x1));
1
1
1
1
0
0
0
Returns: 3
100
27
37
100
55
66
0
Returns: 211
5
0
3
0
5
4
2
Returns: 8
1
0
0
0
1
1
1
Returns: 3
10
0
0
1
0
0
2
Returns: 1
5
0
3
3
5
2
2
Returns: 11
49
0
13
43
49
49
45
Returns: 87
7
7
7
7
7
7
7
Returns: 0
10
0
0
4
10
1
6
Returns: 13
100
100
100
1
100
1
100
Returns: 198
100
0
1
50
100
99
50
Returns: 200
100
0
99
50
100
99
50
Returns: 102
7
1
0
3
1
7
3
Returns: 9
100
100
13
74
0
45
78
Returns: 162
28
0
17
16
28
28
21
Returns: 44
4
4
4
4
0
0
0
Returns: 12
3
1
0
2
1
3
2
Returns: 5
65
0
5
4
56
65
21
Returns: 133
5
0
0
1
5
3
4
Returns: 11
42
0
38
31
42
2
27
Returns: 86