diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2023-01-02 19:24:28 +0200 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2023-01-03 13:31:08 +0200 |
commit | b883d90c632d7c6fb585ee23327705e308d65594 (patch) | |
tree | d558de92f2d5a68b1005e92f62c502fb05b23784 /mendeleev.py | |
parent | 9cd4f96eb320b59313fc7f83db56d63aa9b82891 (diff) | |
download | mendeleev-b883d90c632d7c6fb585ee23327705e308d65594.tar.gz |
Diffstat (limited to 'mendeleev.py')
-rw-r--r-- | mendeleev.py | 36 |
1 files changed, 15 insertions, 21 deletions
diff --git a/mendeleev.py b/mendeleev.py index f5ab020..6c01e0d 100644 --- a/mendeleev.py +++ b/mendeleev.py @@ -19,9 +19,9 @@ ELEMENTS = [ elements = [el.lower().encode() for el in ELEMENTS] -def search(start, length, shift, char): - upper = start + length - lower = start +def search(rng, shift, char): + upper = rng[1] + lower = rng[0] while lower < upper: mid = int((lower + upper) / 2) if elements[mid][shift] < char: @@ -29,14 +29,12 @@ def search(start, length, shift, char): else: upper = mid - if lower == start + length: - return (0, 0) + if lower == rng[1] or elements[lower][shift] != char: + rng[1] = 0 + return - if elements[lower][shift] != char: - return (0, 0) - - upper = start + length - start = lower + upper = rng[1] + rng[0] = lower while lower < upper: mid = int((lower + upper) / 2) if char < elements[mid][shift]: @@ -44,28 +42,24 @@ def search(start, length, shift, char): else: lower = mid + 1 - length = upper - start - - return (start, length) + rng[1] = upper def split(tail): result = [] - start = 0 - length = len(ELEMENTS) + rng = [0, len(ELEMENTS)] shift = 0 while shift < len(tail): - start, length = search(start, length, shift, tail[shift]) - if length == 0: + search(rng, shift, tail[shift]) + if rng[0] >= rng[1]: break shift += 1 - if len(elements[start]) == shift: - result.append((ELEMENTS[start], tail[shift:])) - start += 1 - length -= 1 + if len(elements[rng[0]]) == shift: + result.append((ELEMENTS[rng[0]], tail[shift:])) + rng[0] += 1 return result or [("?", tail[1:])] |