| | 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() |