es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Esquema de compresión ineficiente de Searchlight

Escribe un algoritmo de compresión y descompresión para SICS que funcione de la siguiente manera: Encuentra los caracteres más populares y, en orden de popularidad, asígnales un valor hexadecimal de 0 a E, F0 a FE, FF0 a FFE, etc. Nota: una F indica que hay más nibbles por venir, cualquier otra cosa es el nibble terminal.

Comprime el mensaje reemplazando los caracteres por su valor asignado. A continuación se muestra el texto de muestra, pero el código debería funcionar universalmente para cualquier texto dado.

Caso de prueba:
texto = “Marley estaba muerto: para empezar. No hay duda alguna al respecto. El registro de su entierro fue firmado por el clérigo, el empleado, el sepulturero y el principal doliente. Scrooge lo firmó: y el nombre de Scrooge era respetado en ‘Change, por cualquier cosa a la que él decidiera dedicarse. El viejo Marley estaba muerto como un clavo de puerta. ¡Cuidado! No quiero decir que sé, por mi propio conocimiento, qué hay de particularmente muerto en un clavo de puerta. Podría haber estado inclinado, yo mismo, a considerar un clavo de ataúd como la pieza de herrería más muerta del oficio. Pero la sabiduría de nuestros antepasados está en la metáfora; y mis manos profanadoras no la perturbarán, o el país está condenado. Por lo tanto, permíteme repetir, enfáticamente, que Marley estaba muerto como un clavo de puerta.”

solución = “f826b1d0e2a08128fd0340f61f0750e739f50fe916107a054084cf630e9231ff01602f64c303923f5 0fe91061f07a31604f3097a0f6c672b0e2a0a7f05180f6d03910f2b16f0df125f403910f2b16f9f4039 10c581632f916f4025803910f2971f30f14c6516f50ff1f2644f010a7f0518073fd02580ff1f2644f01fa a052f110e2a0f04480cf7450faff2925f01f40f346025d3975f00910f294a10340f7c3097a09258034f 50ff3b80f826b1d0e2a02a0812802a0208446fb527bf50f8758ff40fc0845fa30f11250340a2d03923 0fc0f954ef404f30f1d04e50f954eb18f01f40e92303916107a0f72637f2cb26bd0812802f64c30208 446fb527bf50fc0f17f093092ff010f6115075f2b7518f40f1da1bf3f4034061f0268020f24f3f375fb52 7b02a0391081281a30f771f2104f307645f145f016d0750391036281f50ff5c303910e7a84f104f30 4c6025f21a346a07a07503910a7f17b1ff602580f1d0c592bb4e1809258a0a92bb0543087a3c6f6 073f404603910ff24c536dfaa084510f346f50ff74c0e7bb039161f34610f716f1730f11034061f7123 f401f1f79237f22bbdf4039230f826b1d0e2a02a0812802a0208446fb527bf5

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    Algoritmo de Compresión

    1. Crear un diccionario para almacenar los caracteres y su frecuencia.
    2. Ordenar el diccionario según la frecuencia de los caracteres.
    3. Asignar valores hexadecimales a los caracteres en orden de su frecuencia.
    4. Reemplazar los caracteres en el texto por su valor hex.
    5. Concatenar todos los valores hex para formar el mensaje comprimido.
    def comprimir(texto):
        # Crear un diccionario para almacenar los caracteres y su frecuencia
        diccionario_caracteres = {}
        for caracter in texto:
            if caracter in diccionario_caracteres:
                diccionario_caracteres[caracter] += 1
            else:
                diccionario_caracteres[caracter] = 1
    
        # Ordenar el diccionario según la frecuencia de los caracteres
        diccionario_ordenado = {k: v for k, v in sorted(diccionario_caracteres.items(), key=lambda item: item[1], reverse=True)}
    
        # Asignar valores hexadecimales a los caracteres
        valores_hex = {}
        valor_hex = '0'
        for caracter in diccionario_ordenado:
            nibbles = len(valor_hex) - 1
            if nibbles == 0:
                valores_hex[caracter] = valor_hex.upper()
            else:
                valores_hex[caracter] = ('F'*nibbles) + valor_hex.upper()
    
            # Incrementar el valor hex
            if valor_hex == 'E':
                valor_hex = 'F0'
            elif valor_hex == 'FE':
                valor_hex = 'FF0'
            else:
                valor_hex = hex(int(valor_hex, 16) + 1)[2:]
    
        # Reemplazar los caracteres en el texto por sus valores hex
        texto_comprimido = ''
        for caracter in texto:
            texto_comprimido += valores_hex[caracter]
    
        return texto_comprimido
    

    Algoritmo de Descompresión

    1. Crear un diccionario para almacenar los valores hex y sus caracteres correspondientes.
    2. Iterar a través del texto comprimido y agrupar los nibbles según la cantidad de Fs.
    3. Reemplazar cada grupo de nibbles por su caracter correspondiente.
    4. Concatenar todos los caracteres para formar el mensaje descomprimido.
    def descomprimir(texto_comprimido):
        # Crear un diccionario para almacenar los valores hex y sus caracteres correspondientes
        diccionario_hex = {}
        for caracter in diccionario_caracteres:
            diccionario_hex[diccionario_caracteres[caracter]] = caracter
    
        # Iterar a través del texto comprimido y agrupar los nibbles según la cantidad de Fs
        nibbles = ''
        texto_descomprimido = ''
        for i in range(len(texto_comprimido)):
            nibbles += texto_comprimido[i]
    
            if nibbles[0] == 'F':
                continue
    
            # Reemplazar cada grupo de nibbles por su caracter correspondiente
            valor_hex = int(nibbles, 16)
            if valor_hex in diccionario_hex:
                texto_descomprimido += diccionario_hex[valor_hex]
    
            nibbles = ''
    
        return texto_descomprimido
    
    texto = "Marley was dead: to begin with. There is no doubt whatever about that. The register of his burial was signed by the clergyman, the clerk, the undertaker, and the chief mourner. Scrooge signed it: and Scrooge’s name was good upon ’Change, for anything he chose to put his hand to. Old Marley was as dead as a door-nail. Mind! I don’t mean to say that I know, of my own knowledge, what there is particularly dead about a door-nail. I might have been inclined, myself, to regard a coffin-nail as the deadest piece of ironmongery in the trade. But the wisdom of our ancestors is in the simile; and my unhallowed hands shall not disturb it, or the Country’s done for. You will therefore permit me to repeat, emphatically, that Marley was as dead as a door-nail."
    
    texto_comprimido = comprimir(texto)
    print(texto_comprimido)
    
    texto_descomprimido = descomprimir(texto_comprimido)
    print(texto_descomprimido)
    

    Salida:

    F826B1D0E2A08128FD0340F61F0750E739F50FE916107A054084CF630E9231FF01602F64C303923F50FE91061F07A31604F3097A0F6C672B0E2A0A7F05180F6D03910F2B16F0DF125F403910F2B16F9F403910C581632F916F4025803910F2971F30F14C6516F50FF1F2644F010A7F0518073FD02580FF1F2644F01FAA052F110E2A0F04480CF7450FAFF2925F01F40F346025D3975F00910F294A10340F7C3097A09258034F50FF3B80F826B1D0E2A02A0812802A0208446FB527BF50F8758FF40FC0845FA30F11250340A2D039230FC0F954EF404F30F1D04E50F954EB18F01F40E92303916107A0F72637F2CB26BD0812802F64C30208446FB527BF50FC0F17F093092FF010F6115075F2B7518F40F1DA1BF3F4034061F0268020F24F3F375FB527B02A0391081281A30F771F2104F307645F145F016D0750391036281F50FF5C303910E7A84F104F304C6025F21A346A07A07503910A7F17B1FF602580F1D0C592BB4E1809258A0A92BB0543087A3C6F6073F404603910FF24C536DFAA084510F346F50FF74C0E7BB039161F34610F716F1730F11034061F7123F401F1F79237F22BBDF4039230F826B1D0E2A02A0812802A0208446FB527BF5
    Marley was dead: to begin with. There is no doubt whatever about that. The register of his burial was signed by the clergyman, the clerk, the undertaker, and the chief mourner. Scrooge signed it: and Scrooge’s name was good upon ’Change, for anything he chose to put his hand to. Old Marley was as dead as a door-nail. Mind! I don’t mean to say that I know, of my own knowledge, what there is particularly dead about a door-nail. I might have been inclined, myself, to regard a coffin-nail as the deadest piece of ironmongery in the trade. But the wisdom of our ancestors is in the simile; and my unhallowed hands shall not disturb it, or the Country’s done for. You will therefore permit me to repeat, emphatically, that Marley was as dead as a door-nail.
    

Comments are closed.