import java.io.*; import java.util.*; public class Cipher { private double[] CorpusFreqs; public String encode(String s, int offset) { String codedWord = ""; String word = s.toLowerCase(); for (int i = 0; i < word.length(); i++) { char letter = word.charAt(i); if (letter >= 'a' && letter <= 'z') { letter = (char)((letter - 'a' + offset)%26 + 'a'); } codedWord = codedWord + letter; } return codedWord; } public void buildCorpusFreq(String filename) { CorpusFreqs = new double[26]; try { Scanner sc = new Scanner (new File(filename)); while (sc.hasNext()) { String s = sc.nextLine().toLowerCase(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c >= 'a' && c <= 'z') { CorpusFreqs[c-'a'] ++; } } } } catch (Exception e) {} } public String getFreq(char c) { String s = "" + c + ": " + CorpusFreqs[c - 'a']; return s; } public double buildReferenceVector() { double sum = 0; for (double d: CorpusFreqs) { sum = sum + Math.pow(d,2); } return Math.sqrt(sum); } public double buildVector(String s) { double[] freqs = new double[26]; String code = s.toLowerCase(); for (int i = 0; i < code.length(); i++) { char c = s.charAt(i); if (c >= 'a' && c <= 'z') { freqs[c-'a'] ++; } } double sum = 0; for (double d: freqs) { sum = sum + Math.pow(d,2); } return Math.sqrt(sum); } }