48 lines
1,000 B
Python
48 lines
1,000 B
Python
|
from math import floor
|
||
|
|
||
|
def find_rotation(xs):
|
||
|
if xs[0] < xs[-1]:
|
||
|
return xs[0]
|
||
|
beg, end = 0, len(xs) - 1
|
||
|
found = False
|
||
|
count = 10
|
||
|
while not found and count >= 0:
|
||
|
i = beg + floor((end - beg) / 2)
|
||
|
if xs[beg] < xs[i]:
|
||
|
beg = i
|
||
|
i = beg + floor((end - beg) / 2)
|
||
|
elif xs[beg] > xs[i]:
|
||
|
end = i
|
||
|
found = xs[i - 1] > xs[i]
|
||
|
count -= 1
|
||
|
return xs[i]
|
||
|
|
||
|
|
||
|
xs = [(['ptolemaic',
|
||
|
'retrograde',
|
||
|
'supplant',
|
||
|
'undulate',
|
||
|
'xenoepist',
|
||
|
'zebra',
|
||
|
'asymptote',
|
||
|
'babka',
|
||
|
'banoffee',
|
||
|
'engender',
|
||
|
'karpatka',
|
||
|
'othellolagkage',
|
||
|
], "asymptote"),
|
||
|
(['asymptote',
|
||
|
'babka',
|
||
|
'banoffee',
|
||
|
'engender',
|
||
|
'karpatka',
|
||
|
'othellolagkage',
|
||
|
], "asymptote"),
|
||
|
]
|
||
|
|
||
|
for x, expected in xs:
|
||
|
result = find_rotation(x)
|
||
|
print(x, result)
|
||
|
assert result == expected
|
||
|
print("Success!")
|