import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
public class RandomWriter {
public static void main(String[] args) throws FileNotFoundException {
Random r = new Random();
String sentence = readToString("huckfinn.txt");
int k = r.nextInt(4) + 3;
int length = 10;
String seed = getSeed(sentence);
String word = buildWord(seed, k, sentence);
for (int i = 0; i < length; i++) {
seed = getSeed(sentence);
k = r.nextInt(4) + 3;
word = buildWord(seed, k, sentence);
System.out.print(word + " ");
}
System.out.println(".");
}
private static String buildWord(String seed, int k, String sentence) {
String holder = seed;
for (int i = 0; i < k; i++) {
holder += nextBestLetter(holder, sentence);
}
return holder;
}
private static String nextBestLetter(String holder, String sentence) {
String winner = "";
Map<String, Integer> mapOfCandidates = new HashMap<String, Integer>();
for (int i = 0; i < (sentence.length() - holder.length()); i++) {
String checker = sentence.substring(i, i + holder.length());
if (checker.equals(holder) && !mapOfCandidates.containsKey(sentence.substring((i + holder.length()), (i + holder.length() + 1)))) {
mapOfCandidates.put(sentence.substring(i + holder.length(), i + holder.length() + 1), 1);
}
else if (mapOfCandidates.containsKey(sentence.substring((i + holder.length()), (i + holder.length() + 1)))) {
mapOfCandidates.put(sentence.substring(i + holder.length(), i + holder.length() + 1), mapOfCandidates.get(sentence.substring(i + holder.length(), i + holder.length() + 1)) + 1);
}
}
int max = 0;
for (String s : mapOfCandidates.keySet()) {
if (mapOfCandidates.get(s) > max && !s.equals(" ")) {
max = mapOfCandidates.get(s);
winner = s;
}
}
return winner;
}
private static String getSeed(String sentence) {
Random r = new Random();
int index = r.nextInt(sentence.length());
String holder = sentence.substring(index, index + 1);
while (holder.contains(" ") || holder.contains(".") || holder.contains(",") || holder.contains("\"")) {
index = r.nextInt(sentence.length());
holder = sentence.substring(index, index + 1);
}
return holder;
}
public static String readToString(String path) throws FileNotFoundException {
String wholeThing = "";
Scanner scanner = new Scanner(new File(path));
while (scanner.hasNext()) {
wholeThing += scanner.next() + " ";
}
return wholeThing;
}
}