Problema:
È necessario creare un programma che esegua le seguenti operazioni:
- prende una grande stringa di testo minuscolo e conta tutte le occorrenze di ogni lettera.
- quindi metti le lettere in ordine crescente o minore.
- quindi prendi quell'elenco e lo trasforma in un codificatore / decodificatore per il testo.
- quindi codifica il testo con quella cifra.
Difficile da capire? Vedi questo esempio:
Esempio:
Testo di input:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc sed dui e nisi euismod pellentesque ac sed enim. Nullam auctor justo quis diam faucibus, eu fringilla est porttitor. Pellentesque vel pharetra nisl. Vestibolo 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. Vestibolo ac urna ut lacus commodo sollicitudin nec non velit. Nulla cursus urna sem, a 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. Integer scelerisque tempo tellus, viverra varius neque mattis in. Integer porta vestibulum nisl, et feugiat tortor tincidunt vel. Faucibus di elezione di dignità di Enea. Morbi nec neque vel ante pulvinar mollis eu in ipsum.
Converti in minuscolo.
Conteggio caratteri (per lettera. Spazi e punteggiatura ignorati):
[('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)]
Conteggio caratteri ordinato:
[('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)]
Quindi creare una tabella di ricerca utilizzando gli elenchi originali e ordinati:
abcdefghijklmnopqrstuvwxyz
||||||||||||||||||||||||||
eisultnarocmdpvqbgfhjkwxyz
Dizionario 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'}
E ora codifica il testo originale con questa tabella di ricerca:
'Lvgld rqfjd uvmvg frh edlh, svpflshlhjg eurqrfsrpn lmrh. Njps flu ujr eh prfr ljrfdvu qlmmlphlfbjl es influenza 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. "
Adoro il pitone!
Regole:
- Il tuo programma accetterà una stringa e ne uscirà una.
- Converti tutti gli input in lettere minuscole prima di fare qualsiasi cosa
- Non mi importa come si fa l'ordinamento dell'elenco, ma conto solo lettere minuscole
- Punti bonus (-30) per creare un decriptatore (non copiare l'elenco di decodifica, fallo da zero
- Questo è code-golf, quindi vince il codice più corto!
- Divertiti!
Bonus points (-30) for making a decryptor (no copying the decryption list, do it from scratch? È IMPOSSIBILE! Dovresti avere la chiave (il tuo "elenco di decrittazione" aka "tabella di ricerca") per poterlo fare. Basta prendere un testo cifrato e aspettarsi che qualcuno fornisca un decifratore che lo trasforma in testo normale senza l'uso di alcuna chiave è come se ci stessi chiedendo di pubblicare una domanda su StackOverflow senza digitare lettere o numeri. La teoria dell'informazione ci dice già che non puoi ottenere informazioni dal nulla ... quindi il tuo codice di sostituzione ha bisogno di quella tabella di ricerca (nota anche come chiave).