Problem:
Musisz stworzyć program, który wykonuje następujące czynności:
- pobiera duży ciąg małych liter i zlicza wszystkie wystąpienia każdej litery.
- następnie układasz litery w kolejności od największego do najmniejszego wystąpienia.
- następnie bierzesz tę listę i przekształca ją w koder / dekoder tekstu.
- następnie koduje tekst za pomocą tego szyfru.
Ciężko zrozumieć? Zobacz ten przykład:
Przykład:
Wprowadź tekst:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc sed dui i nisi euismod pellentesque ac sed enim. Nullam auctor justo quis diam faucibus, ue 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 ułatwienia diam turpis, gdzie indziej niesklasyfikowane lobortis dui blandit, gdzie indziej niesklasyfikowane Vestibulum ac urna ut lacus commodo sollicitudin, gdzie indziej niesklasyfikowany. Nulla cursus urna sem, at 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 tempor tellus, viverra varius neque mattis in. Integer porta vestibulum nisl, et feugiat tortor tincidunt vel. Aenean dignissim eleifend faucibus. Morbi, gdzie indziej niesklasyfikowane, pulvinar mollis eu in ipsum.
Konwertuj na małe litery.
Liczba znaków (na literę. Spacje i interpunkcja są ignorowane):
[(„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)]
Liczba zamówionych znaków:
[(„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)]
Następnie utwórz tabelę odnośników, używając oryginalnych i posortowanych list:
abcdefghijklmnopqrstuvwxyz
||||||||||||||||||||||||||
eisultnarocmdpvqbgfhjkwxyz
Słownik 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'}
A teraz zakoduj oryginalny tekst za pomocą tej tabeli odnośników:
„Lvgld rqfjd uvmvg frh edlh, svpflshlhjg eurqrfsrpn lmrh. Njps grypa 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. ”
Uwielbiam pytona!
Zasady:
- Twój program zaakceptuje ciąg i wyprowadzi jeden.
- Konwertuj wszystkie dane na małe litery przed zrobieniem czegokolwiek
- Nie obchodzi mnie, jak sortujesz listę, ale liczę tylko małe litery
- Punkty bonusowe (-30) za wykonanie deszyfratora (bez kopiowania listy deszyfrujących, zrób to od zera
- To jest golf-golf, więc wygrywa najkrótszy kod!
- Baw się dobrze!
Bonus points (-30) for making a decryptor (no copying the decryption list, do it from scratch? TO NIEMOŻLIWE! Aby móc to zrobić, musisz mieć klucz („listę deszyfrowania”, zwaną też „tabelą odnośników”). Samo zaszyfrowanie tekstu zaszyfrowanego i oczekiwanie, że ktoś dostarczy deszyfrator, który przekształci go z powrotem w tekst jawny bez użycia żadnego klucza, jest tak, jakbyś prosił nas o opublikowanie pytania na StackOverflow bez wpisywania liter lub cyfr. Teoria informacji mówi nam już, że nie możesz zdobyć informacji znikąd… więc twój szyfr podstawienia potrzebuje tabeli odnośników (inaczej klucza).