Spaces:
Runtime error
Runtime error
| from collections import deque | |
| from rich.console import Console | |
| from rich.panel import Panel | |
| from rich.table import Table | |
| from rich.progress import Progress, SpinnerColumn, TextColumn | |
| console = Console() | |
| class WikiSolver: | |
| def __init__(self, wiki_run_engine): | |
| """Initialize the solver with a WikiRunEnvironment instance""" | |
| self.engine = wiki_run_engine | |
| def find_path(self, start_article, target_article): | |
| """Find the shortest path using BFS""" | |
| if not self.engine.article_exists(start_article): | |
| return None, "Start article not found in wiki data" | |
| if not self.engine.article_exists(target_article): | |
| return None, "Target article not found in wiki data" | |
| # Initialize BFS | |
| queue = deque([(start_article, [start_article])]) | |
| visited = {start_article} | |
| with Progress( | |
| SpinnerColumn(), | |
| TextColumn("[progress.description]{task.description}"), | |
| console=console | |
| ) as progress: | |
| task = progress.add_task("Finding path...", total=None) | |
| while queue: | |
| current, path = queue.popleft() | |
| if current == target_article: | |
| return path, None | |
| # Get all links from current article | |
| # Need to set current article to get links | |
| state = self.engine.reset(current, target_article) | |
| for next_article in state['available_links']: | |
| if next_article not in visited and self.engine.article_exists(next_article): | |
| visited.add(next_article) | |
| queue.append((next_article, path + [next_article])) | |
| return None, "No path found" | |
| def display_solution(self, path, start_article, target_article): | |
| """Display the solution in a beautiful format""" | |
| if not path: | |
| console.print("[red]No solution found![/red]") | |
| return | |
| # Create a panel for the solution | |
| console.print(Panel( | |
| f"[bold cyan]Solution Found![/bold cyan]\n" | |
| f"From: [green]{start_article}[/green]\n" | |
| f"To: [red]{target_article}[/red]\n" | |
| f"Steps: [yellow]{len(path)-1}[/yellow]", | |
| title="Wiki Run Solver", | |
| border_style="cyan" | |
| )) | |
| # Create a table for the path | |
| table = Table(show_header=True, header_style="bold magenta") | |
| table.add_column("Step", style="dim") | |
| table.add_column("Article", style="cyan") | |
| for i, article in enumerate(path): | |
| table.add_row( | |
| str(i), | |
| article | |
| ) | |
| console.print(table) |