| import gradio as gr |
| import os |
| from openai import OpenAI |
| import time |
|
|
| def solve_competitive_problem(problem_statement, language_choice, api_key, progress=gr.Progress()): |
| """ |
| Generate a solution for a competitive programming problem |
| |
| Args: |
| problem_statement (str): The problem statement |
| language_choice (str): Programming language for the solution |
| api_key (str): OpenRouter API key |
| progress: Gradio progress tracker |
| |
| Returns: |
| str: Step-by-step solution with code |
| """ |
| if not api_key.strip(): |
| return "Error: Please provide your OpenRouter API key." |
| |
| if not problem_statement.strip(): |
| return "Error: Please provide a problem statement." |
| |
| try: |
| progress(0.1, "Initializing...") |
| |
| |
| client = OpenAI( |
| base_url="https://openrouter.ai/api/v1", |
| api_key=api_key, |
| ) |
| |
| progress(0.3, "Creating prompt...") |
| |
| |
| prompt = f""" |
| You are an expert competitive programmer. Analyze the following problem and provide a step-by-step solution with explanations and code in {language_choice}. |
| Problem: |
| {problem_statement} |
| Your response should include: |
| 1. Problem Analysis: |
| - Clear restatement of the problem in your own words |
| - Identification of input/output formats |
| - Key constraints and edge cases to consider |
| - Time and space complexity requirements |
| 2. Approach: |
| - High-level strategy to solve the problem |
| - Why this approach is optimal compared to alternatives |
| - Any mathematical insights or observations |
| - Data structures that will be helpful |
| 3. Algorithm: |
| - Detailed step-by-step breakdown of the algorithm |
| - Clear explanation of the logic behind each step |
| - Time complexity analysis with justification |
| - Space complexity analysis with justification |
| - Any optimizations made to improve performance |
| 4. Implementation: |
| - Clean, efficient, and well-commented {language_choice} code |
| - Proper variable naming and code organization |
| - Error handling and edge case management |
| - Optimized for both readability and performance |
| 5. Testing: |
| - Example test cases with expected outputs |
| - Edge case testing scenarios |
| - Explanation of how to verify correctness |
| - Potential areas where the solution might need improvement |
| Format your answer with clear headings and subheadings. Use markdown formatting for better readability. |
| """ |
| |
| progress(0.5, "Generating solution...") |
| |
| |
| completion = client.chat.completions.create( |
| extra_headers={ |
| "HTTP-Referer": "https://competitive-programming-assistant.app", |
| "X-Title": "Competitive Programming Assistant", |
| }, |
| model="open-r1/olympiccoder-7b:free", |
| messages=[ |
| { |
| "role": "user", |
| "content": prompt |
| } |
| ], |
| temperature=0.7, |
| stream=False |
| ) |
| |
| progress(0.9, "Processing response...") |
| |
| solution = completion.choices[0].message.content |
| |
| progress(1.0, "Complete!") |
| return solution |
| |
| except Exception as e: |
| return f"Error: {str(e)}" |
|
|
| |
| with gr.Blocks(title="Competitive Programming Assistant", theme=gr.themes.Soft()) as app: |
| gr.Markdown(""" |
| # 🏆 Competitive Programming Assistant |
| |
| Upload a problem statement from Codeforces, LeetCode, or any competitive programming platform to get: |
| - Step-by-step analysis |
| - Optimal solution approach |
| - Complete code implementation |
| - Time and space complexity analysis |
| |
| Powered by the OlympicCoder model. |
| """) |
| |
| with gr.Row(): |
| with gr.Column(scale=2): |
| api_key_input = gr.Textbox( |
| placeholder="Enter your OpenRouter API key here", |
| label="OpenRouter API Key", |
| type="password" |
| ) |
| |
| problem_input = gr.Textbox( |
| placeholder="Paste your competitive programming problem statement here...", |
| label="Problem Statement", |
| lines=10 |
| ) |
| |
| language = gr.Dropdown( |
| choices=["Python", "C++", "Java", "JavaScript"], |
| value="Python", |
| label="Programming Language" |
| ) |
| |
| submit_btn = gr.Button("Generate Solution", variant="primary") |
| |
| with gr.Column(scale=3): |
| solution_output = gr.Markdown( |
| label="Generated Solution" |
| ) |
| |
| with gr.Accordion("About", open=False): |
| gr.Markdown(""" |
| ### How to use this app: |
| |
| 1. Enter your OpenRouter API key (get one at [openrouter.ai](https://openrouter.ai)) |
| 2. Paste the complete problem statement |
| 3. Select your preferred programming language |
| 4. Click "Generate Solution" |
| |
| ### Tips for best results: |
| |
| - Include the entire problem, including input/output formats and constraints |
| - Make sure to include example inputs and outputs |
| - For complex problems, consider adding clarifying notes |
| |
| ### Solution Format: |
| |
| Your solution will include: |
| 1. **Problem Analysis** - Breaking down the problem into manageable components |
| 2. **Approach** - Strategic methodology with mathematical insights |
| 3. **Algorithm** - Detailed step-by-step procedure with complexity analysis |
| 4. **Implementation** - Clean, commented code in your chosen language |
| 5. **Testing** - Example test cases and verification methods |
| """) |
| |
| |
| submit_btn.click( |
| solve_competitive_problem, |
| inputs=[problem_input, language, api_key_input], |
| outputs=solution_output |
| ) |
|
|
| |
| if __name__ == "__main__": |
| app.launch() |