aboutsummaryrefslogtreecommitdiff
path: root/mendeleev.py
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2023-01-02 19:24:28 +0200
committerIgor Pashev <pashev.igor@gmail.com>2023-01-03 13:31:08 +0200
commitb883d90c632d7c6fb585ee23327705e308d65594 (patch)
treed558de92f2d5a68b1005e92f62c502fb05b23784 /mendeleev.py
parent9cd4f96eb320b59313fc7f83db56d63aa9b82891 (diff)
downloadmendeleev-master.tar.gz
Use ranges like in RustHEADmaster
Diffstat (limited to 'mendeleev.py')
-rw-r--r--mendeleev.py36
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:])]