TimNekkYT

Untitled

Mar 3rd, 2022
798
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.62 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text.RegularExpressions;
  6.  
  7. internal class ReadWriter
  8. {
  9.     public static (char, char) GetMostAndLeastCommonLetters(string path)
  10.     {
  11.         using StreamReader streamReader = new(path);
  12.         var text = streamReader.ReadToEnd();
  13.         var letters = CountLetters(string.Join("", new Regex("[a-zA-z]").Matches(text)).ToLower());
  14.         var (most, least) = (letters.Values.Max(), letters.Values.Min());
  15.  
  16.         char mostLetter = 'a';
  17.         var mostLetters = letters.Where(x => x.Value == most);
  18.         if (mostLetters.Count() == 1)
  19.         {
  20.             mostLetter = mostLetters.First().Key;
  21.         }
  22.         else
  23.         {
  24.             int minPosition = text.Length + 1;
  25.             foreach (var (letter, _) in mostLetters)
  26.             {
  27.                 int position = text.ToLower().IndexOf(letter);
  28.                 if (position < minPosition)
  29.                 {
  30.                     minPosition = position;
  31.                     mostLetter = letter;
  32.                 }
  33.             }
  34.         }
  35.        
  36.         char leastLetter = 'a';
  37.         var leastLetters = letters.Where(x => x.Value == least);
  38.         if (leastLetters.Count() == 1)
  39.         {
  40.             leastLetter = leastLetters.First().Key;
  41.         }
  42.         else
  43.         {
  44.             int minPosition = text.Length + 1;
  45.             foreach (var (letter, _) in leastLetters)
  46.             {
  47.                 int position = text.ToLower().IndexOf(letter);
  48.                 if (position < minPosition && letter != mostLetter)
  49.                 {
  50.                     minPosition = position;
  51.                     leastLetter = letter;
  52.                 }
  53.             }
  54.         }
  55.        
  56.         return (mostLetter, leastLetter);
  57.     }
  58.  
  59.     private static Dictionary<char, int> CountLetters(string line)
  60.     {
  61.         var letters = new Dictionary<char, int>();
  62.         foreach (var sym in line)
  63.         {
  64.             if (letters.ContainsKey(sym)) letters[sym]++;
  65.             else letters[sym] = 1;
  66.         }
  67.  
  68.         return letters;
  69.     }
  70.  
  71.     public static void ReplaceMostRareLetter((char, char) leastAndMostCommon, string inputPath, string outputPath)
  72.     {
  73.         using StreamWriter streamWriter = new(outputPath);
  74.         using StreamReader streamReader = new(inputPath);
  75.         var text = streamReader.ReadToEnd();
  76.         var r = text.Replace(leastAndMostCommon.Item2, leastAndMostCommon.Item1)
  77.             .Replace(leastAndMostCommon.Item2.ToString().ToUpper(), leastAndMostCommon.Item1.ToString().ToUpper());
  78.         streamWriter.Write(r);
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment