ITI0011:harjutus 03
Üldine
Tähtaeg: 15. - 16. veebruar 2016
gitis kaust: EX03
Ülesanne
Tegelesite eile javas ajamasina progemisega ning olite just jõudmas lõpusirgele, kuid Madis kallas selle koolat täis ning vea tõttu saadeti teid ajas tagasi Rooma Impeeriumisse. Roomas satub teile tee peale ette Julius Caesar. Te kuulete teda rääkimas oma kaaslasele, et oleks vaja viisi saata informatsiooni, ilma, et vaenlased aru saaks. Selle jaoks on olemas väga keerulisi ja häid mooduseid, kuid ka lihtsaid ja halbasid. Otsustasite kasutada lihtsat ja halba meetodit, nimega Caesari šiffer.
Caesari šiffer näeb ette, et kui on antud tekst ja mingi nihkenumber n, siis krüpteeritud teksti jaoks on vaja iga täht asendada sellest n tähte tähestikust tagapool oleva tähega. Teksti tagastamiseks on vaja võtta krüpteeritud tekst, seesama nihkenumber n, ja asendada krüpteeritud tekstis iga täht sellest n tähte tähestikust tagapool oleva tähega. Kui krüpteerimisel või dekrüpteerimisel valitud täht osutub tähestikust väljapoole, tuleb hakata teiselt poolt tähestikku edasi lugema. Caesar_cipher
Kusjuures on tähtis, et peab ka järgima järgnevaid ettekirjutusi:
Caesari ettekirjutused:
- Paberit ja tinti on väga vähe. Eemaldada tekstist kõige tihedamini esinev täht. Juhul kui neid on mitu, eemaldada neist tähestikus eespool olev täht.
- Kasutada inglise tähestikku, kus on 26 tähte.
a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z
- Krüpteerituna peab kogu tekst olema väikeste tähtedega, et kõrgete ametnike nimed kohe tekstis välja ei paistaks.
- Kirjavahemärgid (seehulgas ka tühikud ja tabid jätta puutumata)
- Peab olema võimalik valida šifri rotatsiooni.
Näide:
"you too Brutus?"
; 3 positsiooni edasi olevate tähtedega asendatuna ja Caesari ettekirjutustest lähtuvalt oleks: "bx w euxwxv?"
.
Mall
<source lang="java"> public class EX03 {
/** * Given text and a rotation, encrypts text. * @param plainText plain text, readable by humanoids * with relative ease. * @param rotation * @return encrypted text */ public static String encrypt(String plainText, int rotation) { // TODO: implement return null; }
/** * Finds the most frequently occurring letter in text. * @param text either plain or encrypted text. * @return the most frequently occurring letter in text. */ public static String findMostFrequentlyOccurringLetter(String text) { // TODO: implement return null; }
/** * Removes the most prevalent letter from text. * @param text either plain or encrypted text. * @return text in which the most prevalent letter has been removed. */ public static String minimizeText(String text) { // TODO: implement return null; }
/** * Given the initial rotation and the encrypted text, this method * decrypts said text. * @param cryptoText Encrypted text. * @param rotation How many letters to the right the alphabet was * shifted in order to encrypt text. * @return Decrypted text. */ public static String decrypt(String cryptoText, int rotation) { // TODO: implement return null; }
/** * The main method, which is the entry point of the program. * @param args Arguments from the command line */ public static void main(String[] args) { System.out.println(encrypt("you too Brutus?", 1)); // => zv u csvuvt? (both u and o appear 3 times, o comes earlier in alphabet) System.out.println(decrypt("zpv upp csvuvt?", 1)); // => you too brutus? System.out.println(findMostFrequentlyOccurringLetter("you too Brutus?")); // => o System.out.println(minimizeText("you too Brutus?")); // yu t brutus? }
} </source>