Statistics

Problem Statement for "DistanceOnCube"

Problem Statement

You are given a cube with side length S and vertices at (0,0,0), (0,0,S), (0,S,0), (S,0,0), (S,S,0), (S,0,S), (0,S,S) and (S,S,S). You are also given two points (x1,y1,z1) and (x2,y2,z2) on the faces of the cube. The distance between the points on the cube is defined as the minimal length of a polygonal curve which connects the two points. Each segment of that polygonal curve must be on a face of the cube, parallel to one of the cube's edges. The following image shows two pairs of points, connected with the shortest polygonal curves.

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

  1. 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).

  2. 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).

  3. 4

    1

    1

    0

    1

    1

    4

    Returns: 6

    The points are placed on opposite faces of the cube.

  4. 4

    2

    3

    0

    2

    3

    0

    Returns: 0

    The points coincide.

  5. 100

    0

    0

    0

    100

    100

    100

    Returns: 300

    #4-5 are max test (opposite vertices)

  6. 100

    100

    0

    0

    0

    100

    100

    Returns: 300

  7. 10

    0

    4

    9

    0

    4

    9

    Returns: 0

    #6-8 are coinciding points

  8. 56

    56

    34

    21

    56

    34

    21

    Returns: 0

  9. 14

    12

    0

    3

    12

    0

    3

    Returns: 0

  10. 1

    0

    0

    1

    1

    0

    0

    Returns: 2

    #9-10 is S=1

  11. 1

    0

    0

    0

    0

    0

    1

    Returns: 1

  12. 45

    11

    45

    35

    0

    23

    27

    Returns: 41

    #11-40 are random

  13. 33

    33

    22

    12

    28

    33

    0

    Returns: 28

  14. 11

    7

    11

    0

    11

    6

    11

    Returns: 20

  15. 46

    16

    0

    5

    35

    0

    26

    Returns: 40

  16. 87

    87

    10

    3

    44

    11

    0

    Returns: 47

  17. 20

    1

    0

    6

    0

    15

    14

    Returns: 24

  18. 43

    18

    34

    0

    20

    28

    0

    Returns: 8

  19. 42

    25

    42

    39

    13

    5

    42

    Returns: 52

  20. 42

    20

    42

    37

    1

    42

    6

    Returns: 50

  21. 60

    26

    60

    42

    59

    46

    60

    Returns: 65

  22. 99

    99

    5

    95

    99

    60

    73

    Returns: 77

  23. 13

    11

    11

    0

    8

    3

    13

    Returns: 28

  24. 52

    34

    0

    40

    32

    23

    0

    Returns: 65

  25. 43

    14

    36

    43

    18

    43

    30

    Returns: 24

  26. 86

    76

    86

    1

    56

    68

    0

    Returns: 39

  27. 46

    0

    36

    43

    26

    5

    46

    Returns: 60

  28. 33

    22

    23

    33

    1

    0

    11

    Returns: 66

  29. 60

    55

    0

    40

    3

    60

    1

    Returns: 153

  30. 64

    0

    56

    1

    64

    2

    48

    Returns: 167

  31. 27

    0

    11

    13

    11

    11

    27

    Returns: 25

  32. 41

    41

    12

    32

    0

    36

    20

    Returns: 87

  33. 84

    36

    84

    71

    84

    51

    4

    Returns: 148

  34. 42

    12

    4

    0

    24

    42

    13

    Returns: 63

  35. 84

    76

    42

    0

    0

    12

    2

    Returns: 108

  36. 82

    64

    0

    9

    64

    0

    13

    Returns: 4

  37. 61

    61

    16

    40

    60

    13

    0

    Returns: 44

  38. 47

    12

    0

    10

    43

    39

    0

    Returns: 80

  39. 30

    30

    26

    13

    23

    30

    22

    Returns: 20

  40. 29

    29

    13

    10

    6

    16

    29

    Returns: 45

  41. 44

    14

    0

    35

    22

    0

    23

    Returns: 20

  42. 66

    66

    7

    5

    0

    0

    61

    Returns: 129

    #41-65 are random with one point on the edge/vertice

  43. 23

    5

    0

    6

    0

    23

    23

    Returns: 45

  44. 70

    70

    10

    27

    70

    66

    70

    Returns: 99

  45. 74

    0

    2

    53

    0

    4

    0

    Returns: 55

  46. 1

    0

    1

    1

    0

    1

    1

    Returns: 0

  47. 79

    40

    29

    79

    79

    0

    0

    Returns: 147

  48. 3

    0

    0

    1

    0

    3

    3

    Returns: 5

  49. 28

    5

    28

    28

    5

    0

    16

    Returns: 40

  50. 36

    1

    22

    0

    36

    0

    0

    Returns: 57

  51. 76

    0

    25

    51

    76

    0

    0

    Returns: 152

  52. 1

    0

    1

    1

    1

    1

    0

    Returns: 2

  53. 79

    54

    70

    0

    0

    64

    79

    Returns: 139

  54. 73

    57

    0

    0

    73

    55

    35

    Returns: 106

  55. 34

    15

    34

    17

    0

    0

    0

    Returns: 66

  56. 76

    76

    0

    13

    14

    0

    73

    Returns: 122

  57. 20

    16

    12

    20

    20

    0

    20

    Returns: 16

  58. 56

    33

    56

    21

    0

    56

    8

    Returns: 46

  59. 71

    71

    0

    17

    49

    71

    68

    Returns: 144

  60. 72

    72

    0

    18

    0

    3

    43

    Returns: 100

  61. 41

    19

    39

    0

    0

    41

    41

    Returns: 62

  62. 43

    16

    43

    11

    0

    20

    43

    Returns: 71

  63. 24

    4

    0

    24

    20

    3

    0

    Returns: 43

  64. 8

    2

    0

    4

    8

    0

    0

    Returns: 10

  65. 28

    20

    0

    0

    28

    0

    28

    Returns: 36

  66. 9

    7

    0

    1

    0

    0

    0

    Returns: 8

  67. 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));

  68. 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));

  69. 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));

  70. 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));

  71. 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));

  72. 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));

  73. 49

    0

    13

    43

    49

    10

    45

    Returns: 62

  74. 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));

  75. 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));

  76. 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));

  77. 48

    13

    0

    5

    8

    48

    1

    Returns: 59

  78. 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));

  79. 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));

  80. 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));

  81. 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));

  82. 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));

  83. 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));

  84. 77

    17

    20

    77

    2

    35

    0

    Returns: 111

  85. 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));

  86. 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));

  87. 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));

  88. 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));

  89. 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));

  90. 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));

  91. 1

    1

    1

    1

    0

    0

    0

    Returns: 3

  92. 100

    27

    37

    100

    55

    66

    0

    Returns: 211

  93. 5

    0

    3

    0

    5

    4

    2

    Returns: 8

  94. 1

    0

    0

    0

    1

    1

    1

    Returns: 3

  95. 10

    0

    0

    1

    0

    0

    2

    Returns: 1

  96. 5

    0

    3

    3

    5

    2

    2

    Returns: 11

  97. 49

    0

    13

    43

    49

    49

    45

    Returns: 87

  98. 7

    7

    7

    7

    7

    7

    7

    Returns: 0

  99. 10

    0

    0

    4

    10

    1

    6

    Returns: 13

  100. 100

    100

    100

    1

    100

    1

    100

    Returns: 198

  101. 100

    0

    1

    50

    100

    99

    50

    Returns: 200

  102. 100

    0

    99

    50

    100

    99

    50

    Returns: 102

  103. 7

    1

    0

    3

    1

    7

    3

    Returns: 9

  104. 100

    100

    13

    74

    0

    45

    78

    Returns: 162

  105. 28

    0

    17

    16

    28

    28

    21

    Returns: 44

  106. 4

    4

    4

    4

    0

    0

    0

    Returns: 12

  107. 3

    1

    0

    2

    1

    3

    2

    Returns: 5

  108. 65

    0

    5

    4

    56

    65

    21

    Returns: 133

  109. 5

    0

    0

    1

    5

    3

    4

    Returns: 11

  110. 42

    0

    38

    31

    42

    2

    27

    Returns: 86


This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2024, TopCoder, Inc. All rights reserved.
This problem was used for: