while True:
tmp = groups.copy()#Se realiza una copia de los grupo para manejarlos al antojo
groups,m,marcado,parar = {},0,set(),True#Realización de declaraciones de sentencias para el recorrido, comparación y condiciones de parada de las sentencias
l = sorted(list(tmp.keys()))
for i in range(len(l)-1):
for j in tmp[l[i]]:
for k in tmp[l[i+1]]:
res = comparar(j,k)#Inicio de la comparación de los bits de los binarios para setear su cambio
if res[0]:
try:
groups[m].append(j[:res[1]]+'-'+j[res[1]+1:]) if j[:res[1]]+'-'+j[res[1]+1:] not in groups[m] else None
except KeyError:
groups[m] = [j[:res[1]]+'-'+j[res[1]+1:]]
parar = False
marcado.add(j)
marcado.add(k)
m += 1
no_marcados = set(aplanar_lista(tmp)).difference(marcado)#Aquellos elementos que no tienen comparativa de bits con otro binario en la matriz
todos = todos_p.union(no_marcados)#Implicantes primos
print("Elementos no marcados de la tabla:",None if len(no_marcados)==0 else ', '.join(no_marcados))
if parar:#Cuando los minterminos no logran tener una comparación
print("\n\nTodos los implicantes primos: ",None if len(todos_p)==0 else ', '.join(todos_p))
break
print("\n\n\n\nGrupo\tMinterminos\tBinarios\n%s"%('='*50))
for i in sorted(groups.keys()):#Se agrupan los pares y sus repectivos binarios con cambios de bit
print("%5d:"%i)
for j in groups[i]:
print("\t\t%-24s%s"%(','.join(buscar(j)),j))
print('-'*50)
Se empareja elementos de implicantes, además si no se puede simplificar más, se seleccionen los implicantes primos. Aún en desarrollo con los análisis faltantes.