>>> solve_simultaneous([[1, 2, 3],[4, 5, 6]]) [-1.0, 2.0] >>> solve_simultaneous([[0, -3, 1, 7],[3, 2, -1, 11],[5, 1, -2, 12]]) [6.4, 1.2, 10.6] >>> solve_simultaneous([]) Traceback (most recent call last): ... IndexError: solve_simultaneous() requires n
(equations: list[list])
| 55 | |
| 56 | |
| 57 | def solve_simultaneous(equations: list[list]) -> list: |
| 58 | """ |
| 59 | >>> solve_simultaneous([[1, 2, 3],[4, 5, 6]]) |
| 60 | [-1.0, 2.0] |
| 61 | >>> solve_simultaneous([[0, -3, 1, 7],[3, 2, -1, 11],[5, 1, -2, 12]]) |
| 62 | [6.4, 1.2, 10.6] |
| 63 | >>> solve_simultaneous([]) |
| 64 | Traceback (most recent call last): |
| 65 | ... |
| 66 | IndexError: solve_simultaneous() requires n lists of length n+1 |
| 67 | >>> solve_simultaneous([[1, 2, 3],[1, 2]]) |
| 68 | Traceback (most recent call last): |
| 69 | ... |
| 70 | IndexError: solve_simultaneous() requires n lists of length n+1 |
| 71 | >>> solve_simultaneous([[1, 2, 3],["a", 7, 8]]) |
| 72 | Traceback (most recent call last): |
| 73 | ... |
| 74 | ValueError: solve_simultaneous() requires lists of integers |
| 75 | >>> solve_simultaneous([[0, 2, 3],[4, 0, 6]]) |
| 76 | Traceback (most recent call last): |
| 77 | ... |
| 78 | ValueError: solve_simultaneous() requires at least 1 full equation |
| 79 | """ |
| 80 | if len(equations) == 0: |
| 81 | raise IndexError("solve_simultaneous() requires n lists of length n+1") |
| 82 | _length = len(equations) + 1 |
| 83 | if any(len(item) != _length for item in equations): |
| 84 | raise IndexError("solve_simultaneous() requires n lists of length n+1") |
| 85 | for row in equations: |
| 86 | if any(not isinstance(column, (int, float)) for column in row): |
| 87 | raise ValueError("solve_simultaneous() requires lists of integers") |
| 88 | if len(equations) == 1: |
| 89 | return [equations[0][-1] / equations[0][0]] |
| 90 | data_set = equations.copy() |
| 91 | if any(0 in row for row in data_set): |
| 92 | temp_data = data_set.copy() |
| 93 | full_row = [] |
| 94 | for row_index, row in enumerate(temp_data): |
| 95 | if 0 not in row: |
| 96 | full_row = data_set.pop(row_index) |
| 97 | break |
| 98 | if not full_row: |
| 99 | raise ValueError("solve_simultaneous() requires at least 1 full equation") |
| 100 | data_set.insert(0, full_row) |
| 101 | useable_form = data_set.copy() |
| 102 | simplified = simplify(useable_form) |
| 103 | simplified = simplified[::-1] |
| 104 | solutions: list = [] |
| 105 | for row in simplified: |
| 106 | current_solution = row[-1] |
| 107 | if not solutions: |
| 108 | if row[-2] == 0: |
| 109 | solutions.append(0) |
| 110 | continue |
| 111 | solutions.append(current_solution / row[-2]) |
| 112 | continue |
| 113 | temp_row = row.copy()[: len(row) - 1 :] |
| 114 | while temp_row[0] == 0: |