Spaces:
Sleeping
Sleeping
| import json | |
| import logging | |
| import heapq | |
| from flask import request, jsonify | |
| from routes import app | |
| logger = logging.getLogger(__name__) | |
| def max_bugs_fixed(): | |
| data = request.get_json() | |
| logging.info("Data received for evaluation: {}".format(data)) | |
| results = [] | |
| for test_case in data: | |
| bugseq = test_case.get("bugseq", []) | |
| # Sort the bugs by their escalation limits (deadlines) | |
| bugseq.sort(key=lambda x: x[1]) | |
| total_time = 0 | |
| max_heap = [] | |
| for difficulty, limit in bugseq: | |
| total_time += difficulty | |
| # Use a max heap by inserting negative difficulty | |
| heapq.heappush(max_heap, -difficulty) | |
| if total_time > limit: | |
| # Remove the bug with the largest difficulty | |
| removed_difficulty = -heapq.heappop(max_heap) | |
| total_time -= removed_difficulty | |
| logging.debug(f"Removed bug with difficulty {removed_difficulty} to meet the limit.") | |
| num_bugs_fixed = len(max_heap) | |
| results.append(num_bugs_fixed) | |
| logging.info("Computed number of bugs fixed: {}".format(num_bugs_fixed)) | |
| return jsonify(results) | |
| def bugfixer_p1(): | |
| data = request.get_json() | |
| logging.info("Data received for evaluation: {}".format(data)) | |
| if data is None: | |
| logging.error("No data received") | |
| return json.dumps([]) | |
| # Ensure data is in list form | |
| if isinstance(data, dict): | |
| items = [data] | |
| elif isinstance(data, list): | |
| items = data | |
| else: | |
| logging.error("Invalid data format") | |
| return json.dumps([]) | |
| result = [] | |
| for item in items: | |
| time_list = item.get('time') or [] | |
| prerequisites_list = item.get('prerequisites') or [] | |
| total_time = compute_min_time(time_list, prerequisites_list) | |
| result.append(total_time) | |
| logging.info("My result: {}".format(result)) | |
| return jsonify(result) | |
| def compute_min_time(time_list, prerequisites_list): | |
| n = len(time_list) | |
| time_list = [0] + time_list # Adjust to 1-based indexing | |
| graph = [[] for _ in range(n + 1)] # adjacency list | |
| in_degree = [0] * (n + 1) | |
| earliest_finish_time = [0] * (n + 1) | |
| for prereq in prerequisites_list: | |
| a, b = prereq | |
| graph[a].append(b) | |
| in_degree[b] += 1 | |
| # Initialize queue with nodes with in-degree zero | |
| queue = [] | |
| for i in range(1, n + 1): | |
| if in_degree[i] == 0: | |
| earliest_finish_time[i] = time_list[i] | |
| queue.append(i) | |
| # Process nodes | |
| while queue: | |
| u = queue.pop(0) | |
| for v in graph[u]: | |
| earliest_finish_time[v] = max( | |
| earliest_finish_time[v], earliest_finish_time[u] + time_list[v] | |
| ) | |
| in_degree[v] -= 1 | |
| if in_degree[v] == 0: | |
| queue.append(v) | |
| # Maximum earliest_finish_time among all projects | |
| total_time = max(earliest_finish_time) | |
| return total_time |