/// <summary> /// Returns message constructed from least frequent character in each column in columns /// </summary> /// <returns></returns> public string PartTwo() { for (int i = 0; i < columns.Length; i++) { message += AlphaFreqDict.GetLeastFrequentCharacter(columns [i]); } return(message); }
/// <summary> /// Uses checksum to determine whether roomName is real /// </summary> /// <param name="roomName">full name of a single room</param> /// <returns>returns true if room is real, false if not</returns> bool IsRealRoom(string roomName) { string checkSum = GetCheckSum(roomName); Dictionary <char, int> letterFrequencies = AlphaFreqDict.GetLetterFrequencyDictionary(); for (int i = 0; i < roomName.Length; i++) { if (char.IsLetter(roomName [i])) { letterFrequencies [roomName [i]]++; } if (char.IsNumber(roomName [i])) { break; } } for (int i = 0; i < AlphaFreqDict.alphabet.Length; i++) { if (letterFrequencies [AlphaFreqDict.alphabet [i]] == 0) { letterFrequencies.Remove(AlphaFreqDict.alphabet [i]); } } List <KeyValuePair <char, int> > sortable = letterFrequencies.ToList(); sortable.Sort( delegate(KeyValuePair <char, int> pair1, KeyValuePair <char, int> pair2) { int count = pair1.Value.CompareTo(pair2.Value); if (count != 0) { return(count); } else { return(-pair1.Key.CompareTo(pair2.Key)); } }); sortable.Reverse(); for (int i = 0; i < checkSum.Length; i++) { if (checkSum [i] != sortable [i].Key) { return(false); } } return(true); }