This file is to give a brief synopsis of how each of the 10 functions is applicable to the overall program: Overview: -------- The strategy used throughout this program is as follows: First, collect data on the encrypted text, and allowing a user to view these results if desired. The program then begins breaking the overall problem of mapping each letter of the cipher alphabet to a letter of the plaintext alphabet. The first step in the process is to break the cipher alphabet up into groups based on letter frequency. Letters within the same group have similar frequencies and the break between the groups is when large gaps in frequency occurs. These KeyGroups are then rated to find the most accurate and the most accurate KeyGroup is used to create possible Keys. Multiple KeyGroups are created with the hope of an accurate one being created. From there, multiple Keys are created again with the hope of finding the most accurate. This technique cuts down the number of possible Keys by making educated guesses. Data Collecting Classes: ----------------------- BigramCount: This function cycles through the entire message recording each pair of letters in a Frequency Record. It then cycles through this array of bigram and calculates how often each different bigram appears. Finally, this method orders the bigrams in descending order. TrigramCount: This function cycles through the message collecting the different trigrams that appear in the encrypted message. If the trigram has already been accounted for, this method increments the freqency of the trigram in the accumulate (acc) array. It then orders the trigrams based on their frequency in the acc array. KeyCount: Collects the frequency of individual letters in the cipher alphabet and orders the array based on frequency. Display Classes: --------------- These classes display collected data or possible guesses BigramDiplay: This function displays the data collected in BigramCount in a TextArea, ordered by frequency. TrigramDiplay: This function displays the data collected in TrigramCount in a TextArea, ordered by frequency. KeyDisplay: This function displays the possible keys. Building Classes: ----------------- KeyBuilder: This class builds a possible key. KeyGroup: This function uses letter frequency to create different groupings of of 5, based on letter frequency. The first 9 letters are shifted producing possible groupings. Keys: This group uses the top rated KeyGroup to create possible Keys. The letters of each group, in the top ranking KeyGroup, are shifted with the hope of creating the correct key. This is done multiple times to allow the user the most options Scoring Class: Calculate: This class calculates the accuracy of each KeyGroup. It does so by, getting the cipher text Bigram/Trigram data and checking if their letters appear in the proper groups of each KeyGroup. If so, the score of that KeyGroup is incremented according to the frequency of the Bigram/Trigram. Final Class: SubstitutionAnalysis: This class pulls together all the data collected and keys created throughout this program. It outputs the most accurate key, listed from 'a' to 'z,' the number of Bigram/Trigram hits.