
import java.util.Map;
import java.util.HashMap;


/**
 * Created by terry on 6/25/18.
 */


public class LetterFrequency {

    public static void main(String[] args) {

        String ciphertext = "r glivcp gvvi kf gvvi mvijzfe fw vcvtkifezt trjy nflcu rccfn feczev grpdvekj kf sv jvek uzivtkcp wifd fev grikp kf refkyvi" +
                " nzkyflk xfzex kyiflxy r wzeretzrc zejkzklkzfe. uzxzkrc jzxerklivj gifmzuv grik fw kyv jfclkzfe, slk kyv drze svevwzkj riv cfjk zw r kiljkvu" +
                " kyziu grikp zj jkzcc ivhlzivu kf givmvek uflscv-jgveuzex. nv gifgfjv r jfclkzfe kf kyv uflscv-jgveuzex gifscvd ljzex r gvvi-kf-gvvi evknfib." +
                " kyv evknfib kzdvjkrdgj kirejrtkzfej sp yrjyzex kyvd zekf re fexfzex tyrze fw yrjy-srjvu giffw-fw-nfib, wfidzex r ivtfiu kyrk treefk sv tyrexvu" +
                " nzkyflk ivufzex kyv giffw-fw-nfib. kyv cfexvjk tyrze efk fecp jvimvj rj giffw fw kyv jvhlvetv fw vmvekj nzkevjjvu, slk giffw kyrk zk trdv wifd " +
                "kyv crixvjk gffc fw tgl gfnvi. rj cfex rj r drafizkp fw tgl gfnvi zj tfekifccvu sp efuvj kyrk riv efk tffgvirkzex kf rkkrtb kyv evknfib, kyvp'cc" +
                " xvevirkv kyv cfexvjk tyrze reu flkgrtv rkkrtbvij. kyv evknfib zkjvcw ivhlzivj dzezdrc jkiltkliv. dvjjrxvj riv sifrutrjk fe r svjk vwwfik srjzj," +
                " reu efuvj tre cvrmv reu ivafze kyv evknfib rk nzcc, rttvgkzex kyv cfexvjk giffw-fw-nfib tyrze rj giffw fw nyrk yrggvevu nyzcv kyvp nviv xfev.";


        String newCiphertext = ciphertext.replaceAll("[^a-zA-Z]", "").toLowerCase();

        System.out.println(newCiphertext);
        Map<Character, Integer> map = letterFrequency(newCiphertext);
        System.out.println(map);


        //**********************************************************************

        Map<Character, Character> decoder = new HashMap<>();

        String key = "abcdefghijklmnopqrstuvwxyz";

        String val = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";


        String newval = val.substring(9) + val.substring(0, 9);

        System.out.println(newval);

        for (int j = 0; j < key.length(); j++) {

            decoder.put(key.charAt(j), newval.charAt(j));
        }

        System.out.println(decoder);


        //***********************************************************************

        System.out.println();
        String decodedString = translator(ciphertext, decoder);
        System.out.println(decodedString);

    }


    private static Map<Character, Integer> letterFrequency(String ciphertxt) {

        Map<Character, Integer> map = new HashMap<>();

        for (int i = 0; i < ciphertxt.length(); i++) {

            char c = ciphertxt.charAt(i);
            Integer val = map.get(c);

            if (val != null) {
                map.put(c, (val + 1));
            } else {
                map.put(c, 1);
            }
        }
        return map;
    }


    private static String translator (String ciphertext, Map<Character, Character> decoder) {

        StringBuilder newString = new StringBuilder();

        for (int k=0; k<ciphertext.length(); k++) {

            Character ky = ciphertext.charAt(k);

            if (decoder.get(ky) != null) {
                Character vl = decoder.get(ky);
                newString.append(vl);
            }
            else {
                newString.append(ciphertext.charAt(k));
            }
        }

        return newString.toString();
    }

}
