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
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
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...

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
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 :)