Problema:
Debe hacer un programa que haga lo siguiente:
- toma una cadena grande de texto en minúsculas y cuenta todas las apariciones de cada letra.
- luego pones las letras en orden de mayor a menor ocurrencia.
- luego toma esa lista y la convierte en un codificador / decodificador para el texto.
- luego codifica el texto con ese cifrado.
¿Difícil de entender? Ver este ejemplo:
Ejemplo:
Texto de entrada:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc sed dui en nisi euismod pellentesque ac sed enim. Nullam auctor justo quis diam faucibus, eu fringilla est porttitor. Pellentesque vel pharetra nisl. Vestibulum congue ultrices magna a fringilla. Quisque porttitor, risus suscipit pellentesque tristique, orci lorem accumsan nisi, scelerisque viverra turpis metus sit amet sapien. Fusce facilisis diam turpis, nec lobortis dui blandit nec. Vestibulum ac urna ut lacus commodo sollicitudin nec non velit. Nulla cursus urna sem, en tincidunt sem molestie vel. Nullam fringilla ante eu dolor bibendum, posuere iaculis nunc lacinia. Sed ac pretium est, vel scelerisque nisl. Phasellus lobortis dolor sodales sapien mollis hendrerit. Entero scelerisque tempor tellus, viverra varius neque mattis in. Entero porta vestibulum nisl, et feugiat tortor tincidunt vel. Aenean dignissim eleifend faucibus. Morbi nec neque vel ante pulvinar mollis eu in ipsum.
Convierte a minúsculas.
Recuento de caracteres (por letra. Espacios y puntuación ignorados):
[('a', 49), ('b', 11), ('c', 34), ('d', 22), ('e', 93), ('f', 9), ( 'g', 10), ('h', 3), ('i', 89), ('j', 1), ('k', 0), ('l', 61), ('m ', 31), (' n ', 56), (' o ', 37), (' p ', 20), (' q ', 12), (' r ', 47), (' s ', 71), ('t', 59), ('u', 65), ('v', 15), ('w', 0), ('x', 0), ('y', 0) , ('z', 0)]
Recuento de char pedido:
[('e', 93), ('i', 89), ('s', 71), ('u', 65), ('l', 61), ('t', 59), ( 'n', 56), ('a', 49), ('r', 47), ('o', 37), ('c', 34), ('m', 31), ('d ', 22), (' p ', 20), (' v ', 15), (' q ', 12), (' b ', 11), (' g ', 10), (' f ', 9), ('h', 3), ('j', 1), ('k', 0), ('w', 0), ('x', 0), ('y', 0) , ('z', 0)]
Luego cree una tabla de búsqueda utilizando las listas originales y ordenadas:
abcdefghijklmnopqrstuvwxyz
||||||||||||||||||||||||||
eisultnarocmdpvqbgfhjkwxyz
Diccionario de Python:
{'o': 'v', 'n': 'p', 'm': 'd', 'l': 'm', 'k': 'c', 'j': 'o', 'i': 'r', 'h': 'a', 'g': 'n', 'f': 't', 'e': 'l', 'd': 'u', 'c': 's', 'b': 'i', 'a': 'e', 'z': 'z', 'y': 'y', 'x': 'x', 'w': 'w', 'v': 'k', 'u': 'j', 't': 'h', 's': 'f', 'r': 'g', 'q': 'b', 'p': 'q'}
Y ahora codifique el texto original con esta tabla de búsqueda:
'Lvgld rqfjd uvmvg frh edlh, svpflshlhjg eurqrfsrpn lmrh. Njps flu ujr eh prfr ljrfdvu qlmmlphlfbjl es flu lprd. Njmmed ejshvg ojfhv bjrf ured tejsrijf, lj tgrpnrmme lfh qvghhrhvg. Plmmlphlfbjl klm qaeglhge prfm. Vlfhrijmjd svpnjl jmhgrslf denpe e tgrpnrmme. Qjrfbjl qvghhrhvg, grfjf fjfsrqrh qlmmlphlfbjl hgrfhrbjl, vgsr mvgld essjdfep prfr, fslmlgrfbjl krklgge hjgqrf dlhjf frh edlh feqrlp. Fjfsl tesrmrfrf ured hjgqrf, pls mvivghrf ujr imepurh pls. Vlfhrijmjd es jgpe jh mesjf svddvuv fvmmrsrhjurp pls pvp klmrh. Njmme sjgfjf jgpe fld, eh hrpsrujph fld dvmlfhrl klm. Njmmed tgrpnrmme ephl lj uvmvg irilpujd, qvfjlgl resjmrf pjps mesrpre. Slu es qglhrjd lfh, klm fslmlgrfbjl prfm. Paeflmmjf mvivghrf uvmvg fvuemlf feqrlp dvmmrf alpuglgrh. Iphlnlg fslmlgrfbjl hldqvg hlmmjf, krklgge kegrjf plbjl dehhrf rp. Iphlnlg qvghe klfhrijmjd prfm, lh tljnreh hvghvg hrpsrujph klm. Alplep urnprffrd lmlrtlpu tejsrijf. Mvgir pls plbjl klm ephl qjmkrpeg dvmmrf lj rp rqfjd.
¡Amo python!
Reglas:
- Su programa aceptará una cadena y generará una.
- Convierta todas las entradas a minúsculas antes de hacer algo
- No me importa cómo clasificas la lista, pero solo cuento letras minúsculas
- Puntos de bonificación (-30) para hacer un descifrador (sin copiar la lista de descifrado, hágalo desde cero
- Esto es código-golf, ¡entonces gana el código más corto!
- ¡Que te diviertas!
Bonus points (-30) for making a decryptor (no copying the decryption list, do it from scratch? ¡ESO ES IMPOSIBLE! Necesitaría tener la clave (su "lista de descifrado" también conocida como "tabla de búsqueda") para poder hacer eso. Simplemente tomar un texto cifrado y esperar que alguien proporcione un descifrador que lo transforme nuevamente en texto simple sin el uso de ninguna tecla es como si nos pidiera que publiquemos una pregunta en StackOverflow sin escribir letras o números. La teoría de la información ya nos dice que no puede obtener información de la nada ... por lo que su cifrado de sustitución necesita esa tabla de búsqueda (también conocida como clave).