Information to logical expression
This is a try to convert information to input output circuit expressionimport sympy as sp
import sys

def texto_a_binario(texto):
    # Codificar el texto en bytes
    bytes_texto = texto.encode()

    # Convertir cada byte a binario y almacenarlo en una lista
    binario_lista = [bin(byte)[2:].zfill(64) for byte in bytes_texto]

    return binario_lista

# Definir símbolos para las entradas y salidas
input_symbols = sp.symbols(' '.join([f'x{i}' for i in range(64)]))  # Entradas
output_symbols = sp.symbols(' '.join([f'y{i}' for i in range(64)]))  # Salidas

# Ejemplo de texto
texto=sys.argv[1]
print("Data Binary Graph")
print(texto)
binario_lista = texto_a_binario(texto)


# Generar tabla de verdad basada en el texto
truth_table = []
for i in range(len(binario_lista) - 1):
    input_bits = [int(bit) for bit in binario_lista[i]]
    output_bits = [int(bit) for bit in binario_lista[i + 1]]
    truth_table.append((input_bits, output_bits))
#print(truth_table)
# Convertir la tabla de verdad en una expresión lógica
expr_list = []
for input_bits, output_bits in truth_table:
    input_exprs = [input_symbols[i] if bit == 1 else ~input_symbols[i] for i, bit in enumerate(input_bits)]
    output_exprs = [output_symbols[i] if bit == 1 else ~output_symbols[i] for i, bit in enumerate(output_bits)]
    expr_list.append(sp.And(*input_exprs, *output_exprs))



# Combinar todas las expresiones en una sola expresión lógica
circuit_expr = sp.Or(*expr_list)
#print(circuit_expr)
# Simplificar el circuito lógico
simplified_circuit_expr = sp.simplify_logic(circuit_expr)
print(simplified_circuit_expr)
# Convertir la expresión lógica simplificada en CNF
#cnf_expr = sp.to_cnf(circuit_expr)

# Imprimir la expresión CNF simplificada
#print("Expresión CNF simplificada:")
#print(cnf_expr)

# Imprimir algunos ejemplos de la tabla de verdad

print("\nEjemplos de la tabla de verdad del futuro:")
for i, (inputs, outputs) in enumerate(truth_table):
    print(f"Ejemplo {i+1}: Entrada={inputs}, Salida={outputs}")




# Probar el circuito con el primer ejemplo
input_example = truth_table[0][0]
expected_output = truth_table[0][1]
input_subs = {input_symbols[i]: bit for i, bit in enumerate(input_example)}
satisfying_assignment = sp.satisfiable(simplified_circuit_expr.subs(input_subs))

# Obtener los valores de salida presentes en la asignación
output_values = {output_symbol: satisfying_assignment[output_symbol] for output_symbol in satisfying_assignment.keys() if output_symbol in output_symbols}

print("\nPrueba del circuito con el primer ejemplo:")
print("Entrada:")
print(input_example)
print("Salida esperada:")
print(expected_output)
print("Salida del circuito:")
out=[output_values[output_symbol] for output_symbol in output_symbols]
print(out)

binary_string = ''.join('1' if elem else '0' for elem in out)

# Convertir la cadena binaria en un carácter
result_char = chr(int(binary_string, 2))

print(result_char)You can pass any information to convert to logical expression for circuits. Just a idea