The basic task is to measure similarity between any two files in our collection. To do this, we will require a appropriate universe of words. This will consist of all words in collection that are (a) more than four letters long, (b) don't occur more than 20 times overall, and (c) do not happen in more than 7 files in collection. Now we constructor a vector (in mathematical sense) corresponding to each file. Vector will have as many coordinates as words in universe -- so there is one coordinate for each word in universe. If word occurs in file, corresponding coordinate is 1, otherwise it is 0.
Let us give example: assume universe consists of five words: apple, grapes, banana, doctor, program. Assume file1 contains: apple, banana, program. Then the vector for file1 is (1,0,1,0,1).
We require to normalize each of vectors so that it has unit length. So each coordinate in above vector gets divided by square root of 3.
Similarity of two files is defined to be scalar product of corresponding two vectors. Scalar product of two vectors is obtained by multiplying corresponding components and adding. For instance, scalar product of (2,1,3) and (0,5,6) is 2 * 0 + 1 * 5 + 3 * 6.
Your task is to write down the program which prints names of two files with highest similarity among files in collection, and names of two files with lowest similarity.