Cifrado progresivo

Iniciado por Sanko, Febrero 05, 2014, 07:14:44 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Traduje este cifrado que hizo Metal:

Código: python
def progresivo(s, n, o):
    encoded = [ord(s[0]) + n,]
    decoded = [ord(s[0]) - n,]
     
    if o == 1:
        for i in s[1::]:
            encoded.append(ord(i) + encoded[-1])
         
        print "".join([unichr(x) for x in encoded])
     
    elif o == 0:
        for i in s[1::]:
            decoded.append(ord(i) - decoded[-1])
             
        print "".join([unichr(x) for x in decoded])

#Params: s = Texto a cifrar o descifrar | n = key | o = 1 -> cifrar, o = 0 -> descifrar
#progresivo('sanko', 2, 1) -> output example uÖńƯȞ
Sigueme en Twitter : @Sankosk
Estos nuevos staff no tienen puta idea XD

Febrero 05, 2014, 07:24:24 PM #1 Ultima modificación: Febrero 06, 2014, 03:49:36 PM por Juan
Nosé si la sintaxis esta bien pero así se resume a la mitad:

Código: python
def progresivo(s, n, o):
    encoded = [ord(s[0]) + n,]
    decoded = [ord(s[0]) - n,]
     
    for i in s[1::]:
        if o == 1:       
            encoded.append(ord(i) + encoded[-1])
        elif o == 0:
            decoded.append(ord(i) - decoded[-1])     

    print "".join([unichr(x) for x in encoded]) if (o ==1)
    print "".join([unichr(x) for x in decoded]) if (o ==0)


Excelente trabajo por parte de los dos! se ven excelente los codes!
Felicitaciones!


Febrero 06, 2014, 11:01:50 AM #3 Ultima modificación: Febrero 06, 2014, 11:43:36 AM por Sanko
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Nosé si la sintaxis esta bien pero así se resume a la mitad:

Código: python
def progresivo(s, n, o):
    encoded = [ord(s[0]) + n,]
    decoded = [ord(s[0]) - n,]
     
    for i in s[1::]:
        if o == 1:       
            encoded.append(ord(i) + encoded[-1])
        elif o == 0:
            decoded.append(ord(i) - decoded[-1])     

    print "".join([unichr(x) for x in encoded])

No bro, tu code esta erroneo, de esta manera solo podrias cifrar.
PD: Hablamos de E/S
Saludos
Sigueme en Twitter : @Sankosk
Estos nuevos staff no tienen puta idea XD

Febrero 06, 2014, 03:50:22 PM #4 Ultima modificación: Febrero 06, 2014, 03:52:04 PM por Juan
Haber si funciona con lo que he editado, esque es una tontería hacer dos for para un proceso y su inversa ademas salen mas lineas...

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Haber si funciona con lo que he editado, esque es una tontería hacer dos for para un proceso y su inversa ademas salen mas lineas...

Tu código era correcto, lo único que no imprimías el resultado en caso de descifrado, pero idéntico a nivel semántico.

El otro código no hace 2 for para un proceso y su inversa, simplemente multiplexa con un condicional la función a realizar y solo se ejecuta uno de los bucles. Muchas veces, una linea o 2 más no importa, incluso puede ayudar a mejorar la eficiencia, aunque no es mucho mira:

Juan:   0.000392249999046s
Sanko: 0.000362740001678s

Además por mi parte veo más lógico saber si primero se va a cifrar o descifrar y luego aplicar la función y no en el mismo bucle de la función realizar n comparaciones siendo n la longitud de la cadena a cifrar (tú estás comprobando por cada caracter si va a ser cifrado o descifrado cada vez que se itera sobre él, esto no es necesario y sobrarían n-1 condicionales ya que el primer resultado es idéntico a los obtenidos después)

En resumidas cuentas, el código de sanko hace 1 condicional y 1 bucle, mientras que el tuyo hace 1 bucle con  n condicionales.

Un saludo manes :)