init
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
import itertools
|
||||
from typing import Iterator, Set
|
||||
|
||||
class NameGenerator:
|
||||
def __init__(self):
|
||||
self._name_iterator = self._create_iterator()
|
||||
self.used_names = set()
|
||||
|
||||
def _create_iterator(self) -> Iterator[str]:
|
||||
"""
|
||||
Generates obfuscated names like: vIl1lO0o0Z2z2...
|
||||
"""
|
||||
patterns = ['Il1l', 'O0o0', 'Z2z2', 'S5s5', 'B8b8', 'Q9q9']
|
||||
for length in itertools.count(2): # Start with length=2, continue forever
|
||||
for combo in itertools.product(patterns, repeat=length):
|
||||
yield 'v' + ''.join(combo)
|
||||
|
||||
def generate_name(self) -> str:
|
||||
"""
|
||||
Get a fresh unique variable name.
|
||||
"""
|
||||
while True:
|
||||
candidate = next(self._name_iterator)
|
||||
if candidate not in self.used_names:
|
||||
self.used_names.add(candidate)
|
||||
return candidate
|
||||
Reference in New Issue
Block a user