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
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
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
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.
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.
23
10
{64077, -567273, 105845, -279980, 35557, -286190, -652879, -431665, -634870, -454044}
Returns: -11
1000000000
1403466951
{1233321992, 11423750, 1356595134, 1130863021, 1183514764, 1943494859, 1714480374, 1529875954, 1738756510, 1190153525}
Returns: -46871817
2
999999999
{-10,-8,-6,-4,-2,0,2,4,6,8,10}
Returns: 1
1234606884
-1269631868
{63898276, -1478856578, -1781791632, -1587308300, -1217280692}
Returns: 52351176
324112531
-1005686761
{1837061486}
Returns: -74264532
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
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
1311370311
1262873336
{-433651567, -597407311, 106725470, 937188748, 1600501195, 365605064, 838099973, -1558039025, -793406560, -1381997842, -1419122157, 863057886, -1012535025, 1267381340, -823815270, 2072772566}
Returns: 4508004
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
1086781749
-1491126637
{-122790625, 1617889415, -1341411906, -1197790095, 372522899, -211061941, 709591014}
Returns: 27154153
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
1988365113
496313541
{-477951433, -1514829366, 1379761995, -1597449138}
Returns: -22777794
443413992
-332339155
{-438216833, -849741615, -32951219, 545319145, -393464738, -1852767207, 1271489581, 1797191598, -2135492007, 1825217903, -1213060974, -1363644923, 521754198, 1882854501, -734539320, -1566417111}
Returns: -1876304
1285491931
-311643833
{-2079782327, 817817397, 445810906}
Returns: -156030701
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
77522399
1640933224
{-537141489, 7933473, -182596770, -836381185, 648138545, -1444787380, -501527731, -1613643964, -1606544479, -2098694751, -1686944961, -971682757, 189129672, 422179706, 735698338}
Returns: 1363570
332437278
-2078081305
{1000033143, 1173430178, 13665640, 2016818839, 1817234272, 1013863978}
Returns: -72861297
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
2071319703
170951153
{-477123266, 1840496224, -1326371213}
Returns: -401774632
2110534659
-137255652
{-766687848, -1346780578, 174672679, 1238322585, 698890968, 223208085, 460466181, -1781121380, 552933345, 1080461362, 844805602, -1869730788, -1970867844, 52122747, 808737003, -1864211361, -1538944332, 1272926586, -522610508, -1468244656}
Returns: 189378399
231446783
208699839
{1455487182, -1197581358, -27846002, 1265985636, 914914999}
Returns: -5099058
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
876371784
-129800009
{-1684294877, 577660437, -298323600, 1356533997, 1065293310, 1396567254, 345903503, 1408803196, 1594401857, 1691612257, 143767931, -970006990, -1114222645, 740227390, -1688382962, 589876499, -2094035063, 1864370194}
Returns: -6344385
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
1770393013
-458428426
{1766134470, 1862641955, -1390207453, -1318635397, 644469788, -713856367, 1218163265, -1104203885, -1498498428, -298126497, -1069605532, 744686623, 1982428220, -389879773, 986810535, 625373131, 1026451505, -1314101148, -365448170}
Returns: 68548653
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
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
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
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
1704816054
1211063670
{419592819, -1401097360, 993072251, -1203220607, -1164240874, -1384941570, 1856816860, -1443596633, 326436767, 385484239, -847691119, -997442804, -1662621472, -874194, 2039368049}
Returns: -217991419
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
1878057736
-675171841
{-1749960017, -869271836, -645008102, 699841767, 1537869672, -584839737, -421352200, -97739642, -1703352199}
Returns: 30163739
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
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
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
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
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
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
10
9
{4}
Returns: 5
10
100
{395}
Returns: 5
3
-2000000000
{2000000000 }
Returns: 1
10000
2147483647
{-2147483647 }
Returns: 2706
1000000000
1403466951
{1233321992, 11423750, 1356595134, 1130863021, 1183514764, 1943494859, 1714480374, 1529875954, 1738756510, 1190153525 }
Returns: -46871817
2100000000
2000000000
{-1000000000 }
Returns: -900000000
10
4
{2, -99995 }
Returns: 1
2
314159
{10, 8, 6, 4, 2 }
Returns: 1
10
5
{4, 6 }
Returns: 1
10
9
{7, 1 }
Returns: 2
1000
10
{8, 12 }
Returns: 2
2147483647
2
{3 }
Returns: 1
2147483640
0
{2147483637 }
Returns: -3
2000000001
-2000000000
{2000000000 }
Returns: -2
2
5000000
{5 }
Returns: 1
100
2147483647
{-2147483648 }
Returns: 5
2
2147000000
{1 }
Returns: 1
3
1
{0, 2 }
Returns: 1
2000000
1000000
{2 }
Returns: -999998
5
1
{-1 }
Returns: -2
2000000000
-2147483648
{2147483647 }
Returns: 294967295
1000000000
2147483647
{-2147483648 }
Returns: -294967295
10
0
{-2, -3, 4, 5, 6, 9999999 }
Returns: -1
2147483647
-2147483647
{2147483647 }
Returns: 0
9
0
{0 }
Returns: 0
5
3
{4 }
Returns: 1
5
2
{3, 1 }
Returns: 1
2000000000
-2003466951
{1233321992, 11423750, 1356595134, 1130863021, 1183514764, 1943494859, 1714480374, 1529875954, 1738756510, 1190153525 }
Returns: 14890701
2147483647
0
{-2147483648, -2147483648, 2147483647, 2147483647 }
Returns: 0
3
0
{2, 1 }
Returns: 1
10
2147483647
{-2147483648 }
Returns: 5
5
0
{0, 1 }
Returns: 0
2
314159
{10, 8, 6, 4, 2, 1 }
Returns: 0
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
3
-2147483648
{0 }
Returns: -1
5
2
{-2 }
Returns: 1
100
2
{6, 0, 3 }
Returns: 1
1000000000
1403466951
{476575848, 236473284, 443856834, 854676746, 234678234, 783465744, 746574447, 398758745 }
Returns: -4708206
5
0
{3 }
Returns: -2
2147483647
10
{64077, -567273, 105845, -279980, 35557, -286190, -652879, -431665, -634870, -454044 }
Returns: 35547
2
-2147483648
{-2147483648, -2147483648, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647, 1000000000, 1000000000, 1000000000, 1000000000, 1000000000, 1000000000, -1000000000, -1000000000, -1000000000 }
Returns: 0
2147483647
-1324123
{-2147483648 }
Returns: 1324122
2147483647
-2147483648
{1073741823 }
Returns: -1073741823
1000001
2147483646
{-2147483647 }
Returns: 37002
10
0
{-1, 1, -1, -1 }
Returns: 1
10
5
{6, 4 }
Returns: 1
5
2
{1, 3 }
Returns: 1
100
2
{0, 4 }
Returns: 2
10
0
{-6, -6 }
Returns: 4
100
-99
{99 }
Returns: -2
2000000000
1999999999
{-1999999999 }
Returns: 2
5
0
{-1, 1 }
Returns: 1
10
23
{-2, -3, 4, 5, 6, 9999999 }
Returns: 1
10
5
{3, 7 }
Returns: 2
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
500000
2147483637
{-2147483617, -444444 }
Returns: 32746