Statistics

Problem Statement for "StepperMotor"

Problem Statement

A stepper motor consists of a metal rotor surrounded by several identical electromagnets. When a pulse of current is sent through the appropriate electromagnet, the rotor rotates by a fixed angular increment known as one "step". A simple computer known as the motion controller regulates the electromagnets and keeps track of the current position of the rotor as an integer. A clockwise step adds 1 and a counterclockwise step subtracts 1 from this position, which is relative to an arbitrary zero point and can be negative. Since stepper motors provide precise control over the motion of the rotor, they have applications ranging from floppy drives to medical imaging devices to industrial fabrication machinery.

You are writing software that communicates with the motion controller for a stepper motor with n steps in one complete revolution. The apparatus driven by your motor is purely rotational, so rotor position p is identical to position p+i*n, where i is any integer. You have the rotor's current position and a list of target positions, and you wish to move the rotor to the nearest position that is identical to one of the target positions. Write a class StepperMotor with a method rotateToNearest that takes an int n, an int current, and a int[] target, and returns an int that is the minimum number of steps (signed positive for clockwise or negative for counterclockwise) necessary to reach one of the targets from position current. If there is a tie between a positive number and negative number for the smallest value, return the positive number.

Definition

Class:
StepperMotor
Method:
rotateToNearest
Parameters:
int, int, int[]
Returns:
int
Method signature:
int rotateToNearest(int n, int current, int[] target)
(be sure your method is public)

Notes

  • The answer will always be between -floor((n-1)/2) and floor(n/2), inclusive.
  • Beware of overflow.

Constraints

  • n will be between 1 and 2147483647, inclusive.
  • current will be between -2147483648 and 2147483647, inclusive.
  • target will contain between 1 and 50 elements, inclusive.
  • Each element of target will be between -2147483648 and 2147483647, inclusive.

Examples

  1. 10

    0

    {-2, -3, 4, 5, 6, 9999999}

    Returns: -1

    From position 0, rotating one step counterclockwise puts the rotor in position -1, which is equivalent to 9999999.

  2. 2

    314159

    {10, 8, 6, 4, 2}

    Returns: 1

    With only two different positions, one step either clockwise or counterclockwise will move the rotor from an odd position to an even position. The tiebreaker favors +1 over -1.

  3. 1

    -2147483648

    {-2147483648, -2147483648, 2147483647, 2147483647}

    Returns: 0

    A step here just causes the rotor to spin in a full circle, so all positions are identical.

  4. 23

    10

    {64077, -567273, 105845, -279980, 35557, -286190, -652879, -431665, -634870, -454044}

    Returns: -11

  5. 1000000000

    1403466951

    {1233321992, 11423750, 1356595134, 1130863021, 1183514764, 1943494859, 1714480374, 1529875954, 1738756510, 1190153525}

    Returns: -46871817

  6. 2

    999999999

    {-10,-8,-6,-4,-2,0,2,4,6,8,10}

    Returns: 1

  7. 1234606884

    -1269631868

    {63898276, -1478856578, -1781791632, -1587308300, -1217280692}

    Returns: 52351176

  8. 324112531

    -1005686761

    {1837061486}

    Returns: -74264532

  9. 1309873021

    -1189918674

    {1359647161, 2027815943, -1762293394, 820352209, -88785247, -1200699068, -1136408750, 1545780181, -30494064, -1332285260, 1946724780, 914720102, 1942179809, 1132098562, 2134480634, 814791424, -384293268, -1282313338, -1653590810, 779910114, -265436391, -1903853184, -1885115958, -1524975801, 1285976867, -612284614, -613181181, -1862554745}

    Returns: -10780394

  10. 1934820548

    -605865686

    {415501376, -1701013064, -1905491487, -378543610, 142898498, 697590879, 533252332, 1389016634, -578962518, -138524734, 1624971525, -1549923231, 967056534, 1423628648, 1019529178, -952357432, -1730424236, 1801059004, -2037611635, -624999386, -847907760, -1095399441, -1140475224, 1331837183, 590988606, -1090935755, -1679002785, -803625706}

    Returns: 2882321

  11. 1311370311

    1262873336

    {-433651567, -597407311, 106725470, 937188748, 1600501195, 365605064, 838099973, -1558039025, -793406560, -1381997842, -1419122157, 863057886, -1012535025, 1267381340, -823815270, 2072772566}

    Returns: 4508004

  12. 96990042

    1143957701

    {-1958563732, 1048967690, -1628981179, -131451257, -1864581415, 2142493772, -1405515047, 1451265788, 37209319, 940980913, 1495517033, -142685813, 927897518, -297250619, 1077280562, -1647309043, -763035103, -1929410877, -1167432977, 1426624541, -1111927733, 169580984, 170416961, -1836332636, -132169352, -364183515, 1675415717, 568696673, 1497579854}

    Returns: 1159911

  13. 1086781749

    -1491126637

    {-122790625, 1617889415, -1341411906, -1197790095, 372522899, -211061941, 709591014}

    Returns: 27154153

  14. 1631696329

    1856122239

    {508898489, -636733422, -1253821802, -632504575, -1356742156, 355529149, 2027016196, -188341327, 606082068, -1915500800, 1845811281, 415956185, 1987489374, -1939391419, 1317682200, 587110328, -941622233, 425465376, -158152490, -858158142, -1127538876, -128873016, 1297842643, -560012285, 678998222, -1008433492, -1800894448, -801609162, 808473800, 1655878120, -2106512406, -1590247101, -1135899100, -1263496039, -645664320, -375660173}

    Returns: -10310958

  15. 1988365113

    496313541

    {-477951433, -1514829366, 1379761995, -1597449138}

    Returns: -22777794

  16. 443413992

    -332339155

    {-438216833, -849741615, -32951219, 545319145, -393464738, -1852767207, 1271489581, 1797191598, -2135492007, 1825217903, -1213060974, -1363644923, 521754198, 1882854501, -734539320, -1566417111}

    Returns: -1876304

  17. 1285491931

    -311643833

    {-2079782327, 817817397, 445810906}

    Returns: -156030701

  18. 1245703705

    -1146310400

    {943267478, -791030826, 1347521089, 307036888, 437911212, -267509736, -1626544924, -1567425135, 93124841, 1875999040, -1211322067, -726678339, -797966826, 1952275462, -2103362578, 997413544, 745493277, -1552378478, -2116258164, -292844976, -337731819, 443413446, 1029026105, 1746945450, -909900276, -1214840100, -2141298822, -711564312, -393920417, 518134338, 1681591982, 99090561, 551072331, 1244287381, -1732779257, -127212515, -1125178143, -1168999721, 1030834864, 2018909730, -1653220355, -366733487, 889872173, 41065868}

    Returns: -302744

  19. 77522399

    1640933224

    {-537141489, 7933473, -182596770, -836381185, 648138545, -1444787380, -501527731, -1613643964, -1606544479, -2098694751, -1686944961, -971682757, 189129672, 422179706, 735698338}

    Returns: 1363570

  20. 332437278

    -2078081305

    {1000033143, 1173430178, 13665640, 2016818839, 1817234272, 1013863978}

    Returns: -72861297

  21. 1493341144

    425349443

    {1715559205, -682116304, -884337959, -790956693, 1160358791, 2132804493, 2096514027, -1709705357, 855697858, -782793075, 540698023, -1544508989, -1178361866, 2136189342, 2054146761, -1892664208, 1233419886, 49173701, 1971918831, -862141950, -1763519291, 510224882, 1545887831}

    Returns: 53228244

  22. 2071319703

    170951153

    {-477123266, 1840496224, -1326371213}

    Returns: -401774632

  23. 2110534659

    -137255652

    {-766687848, -1346780578, 174672679, 1238322585, 698890968, 223208085, 460466181, -1781121380, 552933345, 1080461362, 844805602, -1869730788, -1970867844, 52122747, 808737003, -1864211361, -1538944332, 1272926586, -522610508, -1468244656}

    Returns: 189378399

  24. 231446783

    208699839

    {1455487182, -1197581358, -27846002, 1265985636, 914914999}

    Returns: -5099058

  25. 1373650207

    -1422050426

    {-1321271462, -1883394078, -868773755, 1764027592, -949749319, -1395708467, 1419859409, 1777166755, 1237747051, -1707357882, -1368051418, -70415450, 685335918, -1135516970, -1613189211, 1253198443, -360099475, 910493811, 860850142, 1467051079, -2117015490, 62981778, 406167512, 373458151, 711901091, 1397221526, -2062209559, -1837570124, 305050470, 1069932124, -2103234750, -1791538794, -856165988, -1346703384, 247564226, 900565016, 1830245105, 1584202532, 654511346, -1744206883, -1175648890, 829435151, -502905093}

    Returns: -22015231

  26. 876371784

    -129800009

    {-1684294877, 577660437, -298323600, 1356533997, 1065293310, 1396567254, 345903503, 1408803196, 1594401857, 1691612257, 143767931, -970006990, -1114222645, 740227390, -1688382962, 589876499, -2094035063, 1864370194}

    Returns: -6344385

  27. 2073623506

    1995141706

    {195478956, -284793955, -1965859132, -419273404, -1081494701, 1751066518, 1281802038, -1663556741, 1619017080, 277460370, 1894841365, -1831923262, -1008161774, 1755289713, -1567768951, 1895174347, 805907279, 563914634, -2073590926, -1190754654, -2085116171, 1768725797, 457501567, 1861170651, 605473548, 584469643, 981024042, -1237762574, 544172723, -1623837030, 1490858508, -247139665, -1333105787, 1280483396}

    Returns: 66989135

  28. 1770393013

    -458428426

    {1766134470, 1862641955, -1390207453, -1318635397, 644469788, -713856367, 1218163265, -1104203885, -1498498428, -298126497, -1069605532, 744686623, 1982428220, -389879773, 986810535, 625373131, 1026451505, -1314101148, -365448170}

    Returns: 68548653

  29. 200716390

    804554339

    {1494752339, 554628014, -1607307783, 790646893, 879006024, 2133939938, -1841821746, -237581376, -1441527224, -1712753086, -207412416, -806125902, -2143751561, -156586701, -556265667, -1765061546, 1662495688, 548264075, -1158923630, -1367352123, 318193325, 1752687344, 94413724, 344886147, 1851010111, -1406602798, 2107114376, -9850176, 293606704, -1997629186, 1379942471, 1999656054, -1622390741, 1254938844, 991840654, -2056992971, -1532600700, -1775002599}

    Returns: -3265442

  30. 1190931003

    -1195594129

    {-1244892749, 470053993, 1286280801, -2001748914, -1696819760, 556214842, 1570362178, 1869362283, 930820422, 144464397, -1974178725, -1253956233, 1723987290, -1298895497, 2090630683, -1599773077, -1967344477, 1220207765, 1938728444, 54439954, 1908500847, 340927001, 1130450247, -1547874576, 302104855, -1826316992, -385973514}

    Returns: 33939888

  31. 1316189613

    -1630352634

    {925219773, -1805985613, 481294542, 915197610, -1164163158, 1081972749, 212495868, 1526031366, 277373890, 1358121762, -1580842522, 1077807063, 1405322094, 2057268862, -1216198599, -851126349, 1122869457, -690931514, -588760206, 738874121, 1152473526, 973969833, 472285650, -1708922403, 964173405, 1397520255, -1815934177, 1092138828, -1716975382, 759291036, -82987713, 50776776, 968425032, 591001176, -1926979610, 1211790756}

    Returns: -28056759

  32. 68569360

    -582059828

    {-1280625957, 1297637112, 470243454, -2086928839, 199388415, -1816825837, -877484597, 1965146273, -953219244, -1889509167, 981470626, -700450299, -1065266233, -706687862, -1887273907, -76344934, -3304802, 1919851926, -1044768949, 1750009041, 911304048, 534645786, 682377216, -1386760811, -1035180982, 1461579626, 1435357513, 152796898, 349801415, -1348947292, -2399424, 2011948018, 2025500496, 25311728, -669745604, -1318419296, 574122313, 1831300063, -1019855894}

    Returns: -517529

  33. 1704816054

    1211063670

    {419592819, -1401097360, 993072251, -1203220607, -1164240874, -1384941570, 1856816860, -1443596633, 326436767, 385484239, -847691119, -997442804, -1662621472, -874194, 2039368049}

    Returns: -217991419

  34. 843930618

    -670662123

    {1015024174, -1969218793, -259057028, 192814104, -1720990209, -552852917, 1203782259, -664712497, 1780055682, -461622735, 1335608349, 1436993256, 2475039, 177616122, 1691142948, 1239956937, -1959036831, 1649873349, 169150386, 21525213, 1741001163, 1240552644, -1812497334, -511847626, 42799746, 2006604618, -613353270, -845622012, 163698609, 1617822185, -1777848393, -793182642, 715873838, -1459078704, -884421020, -2130464055, 966652932, 1177847719, 735371801, -1709313340, 1992861702, 749068039, -865533717, 739395111, 1258883442, -1529838386, 2033408214, 1843887162, 1963562366}

    Returns: -2174939

  35. 1878057736

    -675171841

    {-1749960017, -869271836, -645008102, 699841767, 1537869672, -584839737, -421352200, -97739642, -1703352199}

    Returns: 30163739

  36. 230126552

    -810319434

    {1515545520, 79014573, 1350221078, 967269421, -1549036423, 944320605, 439330020, -1541081333, -86229001, -476563510, -1601697769, 429232918, -980739346, -372218857, -1049846855, 1281574157, 1217036580, -369003865, -1788993294, 968136787, -28059251, 2105360021, -471470153, 866106771, -1383599808, 1728311800, -180450259, -1611694092, -2074283456}

    Returns: 7239162

  37. 1364717164

    123541976

    {-684916511, 838822800, -1563171997, 360506265, -1049256851, 567454859, 87184809, 1881970894, 613673625, -839876974, 1116592899, 1381900301, 1712227419, -769709358, -192784687, 685062727, 1245611753, 1228592101, 1913855467, -1732852770, 1113780195, 433453686, 1515368938, 78660410, -815642894}

    Returns: 27109798

  38. 1298650083

    -442328038

    {-52964110, -1341811103, 417732147, 944569902, 114804172, 2074159475, 1009579233, 1164744823, 2122578789, -1299687478, -1258281349, -2069020515, -649079667, -1801635973, -957454156, 628955266, 2049378597, 724254194, -1101519865, 1784141510, -2111646806, -492975125, -1541765807, -1879034646, 951151800, -1990684311, 958778974, 2049654262, -577836784, -1800581802, -510875058}

    Returns: -32393339

  39. 1417289523

    -1113451299

    {-1206052919, 1560339906, -186229923, 752121628, 697830066, -971862312, 1590614757, 1997029023, 646889840, 1779070350, -758581739, -2017851559, -1913902885, -1640444709, -797765505, -1350118808, -2068630257, -282952791, -1401002529, 368125070, -787711352}

    Returns: 57942603

  40. 1115097892

    -1000929758

    {-1993804319, 1444989347, -1010357195, 2114474007, -459149038, 795989486, -1333611407, -779655320, -1579697066, 1217407876, -1754320404, -145109204, -213488360, 728648624, 1917312826, -598568646, -968376977, -844169486, 2134721498, 134688810, 2115665959, -1505480319, -1391119082, 191792611, 859978514, 2016552814, -1890526092, -601085236, 1796856868, 1112432769, -1017048050, 1317598782, -1772943076, 1973966479, 1164207552, 348512323, 1836504259, -780476325, 1455735421, -543298391, -2010876334, 1817675555, 1934878461, -807505193, -876285331, 1942783981, -1201518709}

    Returns: -9427437

  41. 2062790576

    1159823765

    {-876342651, 361805867, -1372193326, 1060126024, 1332277262, -1597024014, 826386970, -1971914690, 301488877, 1941509187, -1561077124, -1103038114, -1934090326, -444438127, 1232966138, -595932842, 1373155850, -555440451, -563930579, -1927928014, -733605938, -1497471470, -329564923, -546325756, -1036852769, -320734536, -1279625661, -617475441}

    Returns: 26624160

  42. 10

    9

    {4}

    Returns: 5

  43. 10

    100

    {395}

    Returns: 5

  44. 3

    -2000000000

    {2000000000 }

    Returns: 1

  45. 10000

    2147483647

    {-2147483647 }

    Returns: 2706

  46. 1000000000

    1403466951

    {1233321992, 11423750, 1356595134, 1130863021, 1183514764, 1943494859, 1714480374, 1529875954, 1738756510, 1190153525 }

    Returns: -46871817

  47. 2100000000

    2000000000

    {-1000000000 }

    Returns: -900000000

  48. 10

    4

    {2, -99995 }

    Returns: 1

  49. 2

    314159

    {10, 8, 6, 4, 2 }

    Returns: 1

  50. 10

    5

    {4, 6 }

    Returns: 1

  51. 10

    9

    {7, 1 }

    Returns: 2

  52. 1000

    10

    {8, 12 }

    Returns: 2

  53. 2147483647

    2

    {3 }

    Returns: 1

  54. 2147483640

    0

    {2147483637 }

    Returns: -3

  55. 2000000001

    -2000000000

    {2000000000 }

    Returns: -2

  56. 2

    5000000

    {5 }

    Returns: 1

  57. 100

    2147483647

    {-2147483648 }

    Returns: 5

  58. 2

    2147000000

    {1 }

    Returns: 1

  59. 3

    1

    {0, 2 }

    Returns: 1

  60. 2000000

    1000000

    {2 }

    Returns: -999998

  61. 5

    1

    {-1 }

    Returns: -2

  62. 2000000000

    -2147483648

    {2147483647 }

    Returns: 294967295

  63. 1000000000

    2147483647

    {-2147483648 }

    Returns: -294967295

  64. 10

    0

    {-2, -3, 4, 5, 6, 9999999 }

    Returns: -1

  65. 2147483647

    -2147483647

    {2147483647 }

    Returns: 0

  66. 9

    0

    {0 }

    Returns: 0

  67. 5

    3

    {4 }

    Returns: 1

  68. 5

    2

    {3, 1 }

    Returns: 1

  69. 2000000000

    -2003466951

    {1233321992, 11423750, 1356595134, 1130863021, 1183514764, 1943494859, 1714480374, 1529875954, 1738756510, 1190153525 }

    Returns: 14890701

  70. 2147483647

    0

    {-2147483648, -2147483648, 2147483647, 2147483647 }

    Returns: 0

  71. 3

    0

    {2, 1 }

    Returns: 1

  72. 10

    2147483647

    {-2147483648 }

    Returns: 5

  73. 5

    0

    {0, 1 }

    Returns: 0

  74. 2

    314159

    {10, 8, 6, 4, 2, 1 }

    Returns: 0

  75. 2

    -2147483648

    {-2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648, -2147483648 }

    Returns: 0

  76. 3

    -2147483648

    {0 }

    Returns: -1

  77. 5

    2

    {-2 }

    Returns: 1

  78. 100

    2

    {6, 0, 3 }

    Returns: 1

  79. 1000000000

    1403466951

    {476575848, 236473284, 443856834, 854676746, 234678234, 783465744, 746574447, 398758745 }

    Returns: -4708206

  80. 5

    0

    {3 }

    Returns: -2

  81. 2147483647

    10

    {64077, -567273, 105845, -279980, 35557, -286190, -652879, -431665, -634870, -454044 }

    Returns: 35547

  82. 2

    -2147483648

    {-2147483648, -2147483648, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647, 1000000000, 1000000000, 1000000000, 1000000000, 1000000000, 1000000000, -1000000000, -1000000000, -1000000000 }

    Returns: 0

  83. 2147483647

    -1324123

    {-2147483648 }

    Returns: 1324122

  84. 2147483647

    -2147483648

    {1073741823 }

    Returns: -1073741823

  85. 1000001

    2147483646

    {-2147483647 }

    Returns: 37002

  86. 10

    0

    {-1, 1, -1, -1 }

    Returns: 1

  87. 10

    5

    {6, 4 }

    Returns: 1

  88. 5

    2

    {1, 3 }

    Returns: 1

  89. 100

    2

    {0, 4 }

    Returns: 2

  90. 10

    0

    {-6, -6 }

    Returns: 4

  91. 100

    -99

    {99 }

    Returns: -2

  92. 2000000000

    1999999999

    {-1999999999 }

    Returns: 2

  93. 5

    0

    {-1, 1 }

    Returns: 1

  94. 10

    23

    {-2, -3, 4, 5, 6, 9999999 }

    Returns: 1

  95. 10

    5

    {3, 7 }

    Returns: 2

  96. 3

    9999997

    {-999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999, -999999999 }

    Returns: -1

  97. 500000

    2147483637

    {-2147483617, -444444 }

    Returns: 32746


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: