Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text.RegularExpressions;
- internal class ReadWriter
- {
- public static (char, char) GetMostAndLeastCommonLetters(string path)
- {
- using StreamReader streamReader = new(path);
- var text = streamReader.ReadToEnd();
- var letters = CountLetters(string.Join("", new Regex("[a-zA-z]").Matches(text)).ToLower());
- var (most, least) = (letters.Values.Max(), letters.Values.Min());
- char mostLetter = 'a';
- var mostLetters = letters.Where(x => x.Value == most);
- if (mostLetters.Count() == 1)
- {
- mostLetter = mostLetters.First().Key;
- }
- else
- {
- int minPosition = text.Length + 1;
- foreach (var (letter, _) in mostLetters)
- {
- int position = text.ToLower().IndexOf(letter);
- if (position < minPosition)
- {
- minPosition = position;
- mostLetter = letter;
- }
- }
- }
- char leastLetter = 'a';
- var leastLetters = letters.Where(x => x.Value == least);
- if (leastLetters.Count() == 1)
- {
- leastLetter = leastLetters.First().Key;
- }
- else
- {
- int minPosition = text.Length + 1;
- foreach (var (letter, _) in leastLetters)
- {
- int position = text.ToLower().IndexOf(letter);
- if (position < minPosition && letter != mostLetter)
- {
- minPosition = position;
- leastLetter = letter;
- }
- }
- }
- return (mostLetter, leastLetter);
- }
- private static Dictionary<char, int> CountLetters(string line)
- {
- var letters = new Dictionary<char, int>();
- foreach (var sym in line)
- {
- if (letters.ContainsKey(sym)) letters[sym]++;
- else letters[sym] = 1;
- }
- return letters;
- }
- public static void ReplaceMostRareLetter((char, char) leastAndMostCommon, string inputPath, string outputPath)
- {
- using StreamWriter streamWriter = new(outputPath);
- using StreamReader streamReader = new(inputPath);
- var text = streamReader.ReadToEnd();
- var r = text.Replace(leastAndMostCommon.Item2, leastAndMostCommon.Item1)
- .Replace(leastAndMostCommon.Item2.ToString().ToUpper(), leastAndMostCommon.Item1.ToString().ToUpper());
- streamWriter.Write(r);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment