Суть задания: решить 1000 кубических уравнений, правильный ответ — наибольший корень, округленный до сотых. Для решения уравнений, воспользуемся библиотекой numpy, а коэффициенты уравнения будем извлекать при помощи регулярных выражений

import socket
import re
import numpy as np
 
def solve_cubic(a, b, c, d):
    coefficients = [a, b, c, d]
    roots = np.roots(coefficients)
    real_roots = [root.real for root in roots if abs(root.imag) < 1e-6]
    return real_roots
 
def process_equation(data):
    data = data.replace(' ', '')
    if '=' in data:
        data = data.split('=')[0]
    
    pattern = r'([+-]?\d*\.?\d*)x\^3([+-]\d*\.?\d*)x\^2([+-]\d*\.?\d*)x([+-]\d*\.?\d*)'
    match = re.match(pattern, data)
    if match:
        def parse_coefficient(coefficient):
            if coefficient in ('+', '-'):
                return float(coefficient + '1')
            elif coefficient == '':
                return 1.0
            else:
                return float(coefficient)
        
        a = parse_coefficient(match.group(1))
        b = parse_coefficient(match.group(2))
        c = parse_coefficient(match.group(3))
        d = parse_coefficient(match.group(4))
        return solve_cubic(a, b, c, d)
    else:
        print("Не удалось распознать уравнение.")
        return None
 
def main():
    host = '127.0.0.1'
    port = 5555
 
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect((host, port))
        
        while True:
            data = s.recv(1024).decode()
            print(f"Полученные данные: {data}")
 
            if data.startswith('ptech2024'):
                print(f"Получен флаг: {data}")
                break
 
            real_roots = process_equation(data)
            if real_roots:
                largest_root_rounded = round(max(real_roots), 2)
                print(f"Наибольший действительный корень: {largest_root_rounded}")
 
                s.sendall(f"{largest_root_rounded}".encode())
            else:
                print("Нет действительных корней.")
 
if __name__ == "__main__":
    main()