Initial code version
This commit is contained in:
parent
59ebddc6ce
commit
cb801cc8a7
0
pyproject.toml
Normal file
0
pyproject.toml
Normal file
2
src/urbrato_algo/__init__.py
Normal file
2
src/urbrato_algo/__init__.py
Normal file
@ -0,0 +1,2 @@
|
||||
__version__ = '1.0.0'
|
||||
__author__ = 'Urbrato'
|
||||
42
src/urbrato_algo/lazy_graphs.py
Normal file
42
src/urbrato_algo/lazy_graphs.py
Normal file
@ -0,0 +1,42 @@
|
||||
from collections import deque
|
||||
from collections.abc import Callable, Hashable, Iterable
|
||||
|
||||
|
||||
def find_chain[T: Hashable](
|
||||
objects: Iterable[T],
|
||||
start: T,
|
||||
end: T,
|
||||
is_next: Callable[[T, T], bool]
|
||||
) -> list[T]:
|
||||
nodes = list(objects)
|
||||
|
||||
if start == end:
|
||||
return [start]
|
||||
|
||||
visited: set[T] = {start}
|
||||
parent: dict[T, T | None] = {start: None}
|
||||
queue = deque([start])
|
||||
|
||||
while queue:
|
||||
current = queue.popleft()
|
||||
|
||||
for node in nodes:
|
||||
if node not in visited and is_next(current, node):
|
||||
visited.add(node)
|
||||
parent[node] = current
|
||||
queue.append(node)
|
||||
|
||||
if node == end:
|
||||
queue.clear()
|
||||
break
|
||||
|
||||
if end not in parent:
|
||||
return []
|
||||
|
||||
path: list[T] = []
|
||||
curr: T | None = end
|
||||
while curr is not None:
|
||||
path.append(curr)
|
||||
curr = parent[curr]
|
||||
|
||||
return path[::-1]
|
||||
6
tests/lazy_graphs_test.py
Normal file
6
tests/lazy_graphs_test.py
Normal file
@ -0,0 +1,6 @@
|
||||
#import urbrato_algo.lazy_graphs as graphs
|
||||
|
||||
#words = ['вино', 'сука', 'срок', 'арка', 'тура', 'сова', 'жара', 'день', 'жгут', 'урна', 'заяц', 'зона', 'звук', 'гора', 'гусь', 'руна', 'суша', 'тара', 'враг', 'арба', 'кара', 'поза', 'бобр', 'икра', 'слон', 'доза', 'знак', 'груз', 'глаз', 'жаба', 'база', 'дока', 'губа', 'блин', 'жена', 'доля', 'роса', 'бита', 'каюк', 'друг', 'вера', 'заря', 'дыра', 'буря', 'дача', 'вода', 'кафр', 'дума', 'драп', 'баян', 'суха', 'диво', 'грач', 'дочь', 'брат', 'дуга', 'каюр', 'крюк', 'звон', 'пола', 'вата', 'град', 'банк', 'рука', 'сока', 'урюк', 'иней', 'дека', 'борт', 'бокс', 'сухо', 'мура', 'балл', 'врач', 'долг', 'урок', 'стон', 'мука', 'азот', 'лука', 'кафе', 'жест', 'вход', 'волк', 'муха', 'блок', 'гриф', 'жбан', 'двор', 'дело', 'зима', 'ваза', 'рана', 'сток', 'змея', 'каре', 'горе', 'полк', 'роза', 'арфа', 'игра']
|
||||
|
||||
# здесь продолжайте программу
|
||||
#print(graphs.find_chain(words, 'мура', 'сухо', lambda a,b: sum(1 for i in range(len(a)) if a[i] != b[i]) == 1))
|
||||
Loading…
Reference in New Issue
Block a user