Sorun:
Aşağıdakileri yapan bir program yapmalısınız:
- büyük bir küçük harf dizesi alır ve her harfin tüm örneklerini sayar.
- daha sonra harfleri en büyükten en küçük düzeye doğru sıralarsınız.
- o listeyi alıp metin için bir kodlayıcı / kod çözücüye dönüştürürsünüz.
- daha sonra metni bu şifre ile kodlar.
Anlaşılması zor? Bu örneğe bakın:
Misal:
Giriş metni:
Lorem ipsum dolor sit amet, seçkin adipiscing elit. Nisi euismod pellentesque ac sed enim şirketinde Nunc sed dui. Nullam auctor justo quis diam faucibus, ab fringilla est porttitor. Pellentesque vel pharetra nisl. Vestibulum congue ultrisleri bir fringilla magna. Quisque porttitor, risus suscipit pellentesque tristique, orci lorem accumsan nisi, scelerisque viverra turpis metus sit amet sapien. Başka yerde sınıflandırılmamış Fusce facilisis diam turpis, başka yerde sınıflandırılmamış lobortis dui blandit. Başka yerde sınıflandırılmamış vestibulum ac urna ut lacus commodo sollicitudin. Nulla cursus urna sem, tincidunt sem molestie vel'de. Nullam fringilla ante ab dolor bibendum, posuere iaculis nunc lacinia. Sed ac pretium est, vel scelerisque nisl. Phasellus lobortis dolor sodales sapien mollis hendrerit. Tam sayı scelerisque tempor tellus, viverra varius neque mattis in. Tam sayı porta vestibulum nisl, et feugiat tortor tincidunt vel. Aenean dignissim faucibus eleifend. Başka yerde sınıflandırılmamış morbi ante pulvinar mollis eu.
Küçük harfe dönüştür.
Karakter sayısı (harf başına. Boşluk ve noktalama işaretleri yoksayılır):
[('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)]
Sipariş edilen karakter sayısı:
[('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)]
Ardından, orijinal ve sıralı listeleri kullanarak bir arama tablosu oluşturun:
abcdefghijklmnopqrstuvwxyz
||||||||||||||||||||||||||
eisultnarocmdpvqbgfhjkwxyz
Python sözlüğü:
{'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'}
Ve şimdi orijinal metni bu arama tablosuyla kodlayın:
'Lvgld rqfjd uvmvg frh edlh, svpflshlhjg eurqrfsrpn lmrh. Njps grip ujr eh prfr ljrfdvu qlmmlphlfbjl es grip lprd. Njmmed ejshvg ojfhv bjrf ur 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 feqrp. Fjfsl tesrmrfrf urj 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. '
Python'u seviyorum!
Kurallar:
- Programınız bir dizeyi kabul eder ve bir dizge çıkarır.
- Herhangi bir şey yapmadan önce tüm girdileri küçük harfe dönüştürün
- Liste sıralamasını nasıl yaptığınız umrumda değil, sadece küçük harfleri sayıyorum
- Bir şifre çözücü yapmak için bonus puan (-30) (şifre çözme listesini kopyalamak yok, sıfırdan yapın)
- Bu kod golf, böylece en kısa kod kazanır!
- İyi eğlenceler!
Bonus points (-30) for making a decryptor (no copying the decryption list, do it from scratch? BU İMKANSIZ! Bunu yapabilmek için anahtara (“şifre çözme listeniz“ aka “arama tablosu”) sahip olmanız gerekir. Sadece bir şifre metni almak ve herhangi bir anahtar kullanmadan onu tekrar düz metne dönüştüren bir şifre çözücü sunmasını beklemek, herhangi bir harf veya rakam yazmadan StackOverflow'a bir soru göndermemizi istiyormuşsunuz gibi. Bilgi teorisi zaten bize hiçbir yerden bilgi elde edemeyeceğinizi söylüyor ... ikame şifrenizin bu arama tablosuna (diğer bir deyişle anahtar) ihtiyacı var.