Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Tachikomaia en 9 Junio 2018, 00:20 am



Título: ¿Alguien me traduce este cíodigo de Phython 3.5?
Publicado por: Tachikomaia en 9 Junio 2018, 00:20 am
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")]))

Gracias.


Título: Re: ¿Alguien me traduce este cíodigo de Phython 3.5?
Publicado por: Ragnarok en 10 Junio 2018, 16:33 pm
Yo empezaría por ver qué nos da Google translate, a ver si ayuda, así:

Código:
resolve = lambda a, b: [(a [0], b [1])] si a [1] == b [0] else []
 
def isconsistent (inecuaciones):
   pendiente = inecuaciones [:]
   hecho = []
   hashes = set ()
   mientras está pendiente:
     c = pending.pop ()
     si c [0] == c [1]:
       falso retorno
     para mí en hecho:
       n = resolver (c, i) + resolver (i, c)
       para e en n:
         h = "% s <% s"% e
         si h en hash:
           continuar
         hashes.add (h)
         pending.append (e)
     done.append (c)
   devolver verdadero
 
print (isconsistente ([("A", "B"), ("B", "C"), ("C", "D")]))
print (isconsistente ([("A", "B"), ("B", "C"), ("C", "A")]))


Título: Re: ¿Alguien me traduce este cíodigo de Phython 3.5?
Publicado por: Tachikomaia en 13 Junio 2018, 04:08 am
Te explico.

No soy de leer o hacer cursos, soy mas bien de pensar e intentar hacer cosas pidiendo ayuda, o sea que no conozco mucho los tecnicismos y no me interesan.

Leí un manual para principiantes, de BASIC, hice un curso de Clipper, y desde entonces hago cosas con MACROMEDIA Flash 5 porque no he visto otro IDE/lenguaje que me gustara más. Su lenguaje es Action Script 1.0 digamos (dije "digamos" porque no sé si en aquella época le ponían un número a la versión),

Es muy similar a BASIC, pero hay "clips de película" con propiedades como su posición en la pantalla, que puedes cambiar con una línea de código. Nada que ver con Clipper donde sólo podías pintar la pantalla usando ciertos rectángulos con puntitos y si querías mover un dibujo hecho de ellos tenías que borrarlos y crearlos en otro lugar, cosa que requería muchas líneas de código. En BASIC creo que se podían crear circulos y cosas por el estilo pero nunca usé tanto eso y creo que no podías moverlo, tenías que borrarlo y redibujarlo.

El punto es que veo por ejemplo
Código:
resolve = lambda a, b: [(a [0], b [1])] si a [1] == b [0] else []
y más allá de alguna condición que están diciendo ahí, no entiendo una m*****, nunca vi algo así.

¿Están creando una variable?

¿Qué es lambda? Me da asco porque no suena a nada salvo a lambida. Lo acabo de buscar:
https://es.wikipedia.org/wiki/Expresi%C3%B3n_lambda
Lo más parecido que he visto es "function", pero rara vez le pongo parámetros a las que creo, y jamás he visto que se le pongan condiciones o lo que sea que le han puesto.

El código en cuestión me lo han dado como respuesta a algo que pedí, más o menos así:
"Quisiera hacer un programa que genere X sentencias condicionales entre Y variables, de modo que no se contradigan".
Por ejemplo si las variables son A, B, C y D, el programa podría generar A<B, B<C, A<C y así sucesivamente, no pretendo que evite redundancias (en el ejemplo, A<C lo es), pero contradicciones sí: Si generó A<B no quiero que genere A==B, por ejemplo.

Bueno, comienza con una función que parece al p***, porque si pregunto cómo hacer una pizza por ejemplo no pones al inicio "receta para hacer pizza, sartén (vacía), tomates(en la mesa)" o vaya a saber qué cosas, me dices los pasos a seguir y listo.

Código:
def isconsistent(inequations):
¿Qué es esto? ¿están definiendo una variable? Pero de valor le están poniendo algo que no han definido aún.

Código:
pending = inequations[:]
Siguen definiendo cosas con algo que aún no definieron.
Esto "[:]" no sé qué es, imagino que marca el tipo de variable (en AS nunca hago eso, se define automáticamente basado en el valor que le ponga), pero está claro que no sé cual es, y menos si no han definido qué es "inequations".
¿Acaso todo este código es para usar una vez que se haya definido eso? Entonces me dieron algo bastante distinto de lo que pedí porque yo no tengo una variable llamada inequations. A lo mejor es que una vez generadas las sentencias condicionales (les había llamado inecuaciones, ahora que recuerdo), esta función analizaría si contradice a las demás, inecuaciones iría variando...

En fin, quiero el pseudocódigo.


Título: Re: ¿Alguien me traduce este cíodigo de Phython 3.5?
Publicado por: engel lex en 13 Junio 2018, 04:48 am
el lambda si es más complicado, pero es lo que usualmente le llaman  "funciones anonimas" solo que con capacidades extras... sobre el def con el parámetro, te tocará estudiar algoritmia básica ya que eso es material inicial sobre funciones y estructuras de control

Código:
funcion(parametros)



Título: Re: ¿Alguien me traduce este cíodigo de Phython 3.5?
Publicado por: tincopasan en 13 Junio 2018, 18:13 pm
Citar
¿Qué es lambda? Me da asco porque no suena a nada salvo a lambida.

ya que te da asco y sabes que necesitas, ¿por qué no lo haces directamente en tu lenguaje favorito, sin recurrir a un código ya hecho?
que fácil criticar lo que no se entiende.