Foro SofosAgora

Foro abierto a los intereses de sus usuarios. Debate, aprende y diviértete.
Fecha actual 26 Abr 2018, 00:16

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 22 mensajes ]  Ir a página Anterior  1, 2, 3
Autor Mensaje
 Asunto: Re: ¿Mét. para detectar contradicción en sist. d inecuacione
NotaPublicado: 15 Abr 2018, 15:56 
Desconectado
Avatar de Usuario

Registrado: 10 Jun 2011, 21:52
Mensajes: 4298
He hecho esto para los dos para que veáis que los IDEs online son útiles:

https://ideone.com/QGahg8

No sé si tendrá fecha de caducidad, así que lo copio aquí:

Código:
resolve = lambda a, b: [(a[0], b[1])] if a[1] == b[0] else []
 
def isconsistent(inequations):
  pending = inequations[:]
  done = []
  hashes = set()
  while pending:
    c = pending.pop()
    if c[0] == c[1]:
      return False
    for i in done:
      n = resolve(c, i) + resolve(i, c)
      for e in n:
        h = "%s<%s"%e
        if h in hashes:
          continue
        hashes.add(h)
        pending.append(e)
    done.append(c)
  return True
 
print(isconsistent([("A", "B"), ("B", "C"), ("C", "D")]))
print(isconsistent([("A", "B"), ("B", "C"), ("C", "A")]))


En las tuplas que se pasan se entiende que está el símbolo '<'.

PD: https://ideone.com/Sv2IVz más breve:

Código:
res = lambda a, b: [(a[i], b[(i+1)%2]) for i in [0,1] if a[(i+1)%2] == b[i]]

def isconsistent(inequations):
  pending, done, hashes = [inequations[:], [], set()]
  while pending:
    p = pending.pop()
    if p[0] == p[1]:
      return False
    for n in (n for d in done for n in res(p, d) if "%s<%s"%n not in hashes):
      hashes.add("%s<%s"%n)
      pending.append(n)
    done.append(p)
  return True

print(isconsistent([("A", "B"), ("B", "C"), ("C", "D")]))
print(isconsistent([("A", "B"), ("B", "C"), ("C", "A")]))


Y con esto se terminó el fin de semana :(

_________________
Spoiler: show
Imagen


Arriba
 Perfil  
Responder citando  
 Asunto: Re: ¿Mét. para detectar contradicción en sist. d inecuacione
NotaPublicado: 20 Abr 2018, 11:51 
Desconectado
Avatar de Usuario

Registrado: 10 Ago 2011, 20:39
Mensajes: 8050
No hice mucho, pero acabo de terminar el generador de condiciones al azar. No es la solución del tema, sólo algo relacionado que me aburría terminar.
Spoiler: show
Código:
Lets = "CVF";
Cs = 0;
Vs = 0;
Fs = 0;
Conds = 0;
function CondXValYPart () {
   LetCant_Refonly = Let+"s";
   LetCant = eval(LetCant_Refonly);
   LetCantplus1 = LetCant+1;
   LetNum = random(LetCantplus1)+1;
}
function LetIncr () {
   if (LetCant<=LetNum) {
      set (LetCant_Refonly, LetCantplus1);
   }
}
do {
   Conds = Conds+1;
   // Val1
   Let = Lets.charAt(random(3));
   CondXValYPart();
   CondXVal1 = Let+LetNum;
   set ("Cond"+Conds+"Val1", CondXVal1);
   LetIncr();
   // Val2
   do {
      if (Let != "F") {
         Let = Lets.charAt(random(3));
      } else {
         Let = Lets.charAt(random(2));
      }
      CondXValYPart();
      CondXVal2 = Let+LetNum;
      set ("Cond"+Conds+"Val2", CondXVal2);
   } while (CondXVal1 == CondXVal2);
   LetIncr();
   trace (CondXVal1+" < "+CondXVal2);
} while (Conds < 5);
stop ();
Pensé que podría tardarse mucho en terminar el do while si cambio el 5 por 1000 por ejemplo, pero no, funciona rápido.

Creo que algunas relaciones pueden repetirse de forma inversa, por ejemplo C1<C2 y C2<C1. Veré qué hago... pero no aún (4).
1- Desarrollar la solución que tengo en mente para este tema.
2- Desarrollar la solución que me dijo martesk.
3- Continuar leyendo sus respuestas e intentar aplicar vuestras soluciones.

See ya.

_________________
Si no puedes hacerlo, intenta primero hacer algo más simple aunque similar.


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 22 mensajes ]  Ir a página Anterior  1, 2, 3

Todos los horarios son UTC + 1 hora [ DST ]


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO