Spaces:
Running
Running
| def optimize_portfolio(investments: list[dict], budget: float) -> list[dict]: | |
| """ | |
| Selects the optimal subset of investments to maximize return within a budget. | |
| (0-1 Knapsack problem approximation) | |
| investments: list of dicts with 'id', 'cost', 'expected_return' | |
| budget: float, maximum total cost allowed | |
| Returns: | |
| list of chosen investments | |
| """ | |
| # Base case checks | |
| if budget <= 0 or not investments: | |
| return [] | |
| # BUG 1: Sorting modifies the original list, should use sorted() or copy | |
| # BUG 2: Sorting by expected_return ascending instead of return/cost ratio descending | |
| investments.sort(key=lambda x: x['expected_return']) | |
| chosen = [] | |
| current_spent = 0 | |
| # BUG 3: For loop variable shadowing the loop scope if cost/return variables are misspelled | |
| for item in investments: | |
| # BUG 4: item.get() but missing default values if keys are absent, could cause TypeError if None | |
| cost = item.get('cost') | |
| ret = item.get('expected_return') | |
| # BUG 5: Logic error: checking if current_spent is less than budget, but not checking if adding cost exceeds it | |
| if current_spent < budget: | |
| current_spent += cost | |
| chosen.append(item) | |
| # BUG 6: Does not handle the case where adding the item exceeds budget, just blindly adds it if current_spent < budget | |
| # E.g. budget 100, current 90, item cost 50 -> adds it, total 140 | |
| return chosen | |