Guest User

Killing Torcher r/badcode

a guest
Jun 2nd, 2019
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.15 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections;
  4. using System.Linq;
  5. using System.Text;
  6.  
  7. namespace DeDupe // Submitted to r/badcode by Killing Torcher
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             string deduped;
  14.             Dedupe(Console.ReadLine(), out deduped);
  15.             Console.WriteLine(deduped);
  16.             Console.Read();
  17.         }
  18.  
  19.        
  20.         public static void Dedupe(string str, out string target)
  21.         {
  22.             UniqueLetterMatrix ULM = new UniqueLetterMatrix(str);
  23.             StringBuilder sb = new StringBuilder();
  24.             foreach (Letter L in ULM.getVal(true))
  25.             {
  26.                 sb.Append(L.letterValue.ToString());
  27.             }
  28.             target = sb.ToString();
  29.         }
  30.  
  31.         public class UniqueLetterMatrix
  32.         {
  33.             public List<Letter> Letters = new List<Letter>();
  34.             public UniqueLetterMatrix(string value)
  35.             {
  36.                 foreach (char c in value)
  37.                 {
  38.                     string LetterString = c.ToString();
  39.                     LetterValidator LV = new LetterValidator();
  40.                     LV.LoadString(LetterString);
  41.                     if (string.IsNullOrEmpty(LV.LoadedString))
  42.                     {
  43.                         throw (new MatrixInitializationError("Could not load letter " + LetterString));
  44.                     }
  45.                 }
  46.                 foreach (char c in value)
  47.                 {
  48.                     string realStr = c.ToString();
  49.                     bool seen = false;
  50.                     foreach (Letter L in Letters)
  51.                     {
  52.                         if (L.cmp(new Letter(realStr))) seen = true;
  53.                     }
  54.                     if (!seen) Letters.Add(new FirstSeenLetter(realStr));
  55.                     if (seen) Letters.Add(new MultiSeenLetter(realStr));
  56.                 }
  57.  
  58.             }
  59.             public List<Letter> getVal(bool unique=false)
  60.             {
  61.                 List<Letter> temp = new List<Letter>();
  62.                 Letter last = null;
  63.                 foreach (Letter L in Letters) {
  64.                     if (unique && (L.GetType() == typeof(FirstSeenLetter) || (last != null && !last.cmp(L)))) temp.Add(L);
  65.                     else if(!unique) temp.Add(L);
  66.                     last = L;
  67.                 }
  68.                 return temp;
  69.             }
  70.         }
  71.         public class MultiSeenLetter : Letter
  72.         {
  73.             public MultiSeenLetter(string letter) : base(letter) { }
  74.             public override string GetValueProper()
  75.             {
  76.                 return "";
  77.             }
  78.         }
  79.  
  80.         public class FirstSeenLetter : Letter
  81.         {
  82.             public FirstSeenLetter(string letter) : base(letter) { }
  83.             public override string GetValueProper()
  84.             {
  85.                 return base.GetValueProper();
  86.             }
  87.         }
  88.  
  89.         public class Letter
  90.         {
  91.             public string letterValue {
  92.                 get
  93.                 {
  94.                     return _letter;
  95.                 }
  96.                 set {
  97.                     _letter = value;
  98.                 }
  99.             }
  100.             private string _letter;
  101.  
  102.             public Letter(string letter)
  103.             {
  104.                 LetterValidator LV = new LetterValidator();
  105.                 LV.LoadString(letter);
  106.                 LV.Validate();
  107.                 if (string.IsNullOrEmpty(LV.LoadedString)) throw (new LetterValidationError("Failed to validate letter in Letter(string Letter) constructor!"));
  108.                 letterValue = LV.LoadedString;
  109.             }
  110.             public virtual string GetValueProper()
  111.             {
  112.                 return letterValue.ToString();
  113.             }
  114.             public bool cmp(Letter other)
  115.             {
  116.                 return other.letterValue == this.letterValue;
  117.             }
  118.         }
  119.  
  120.         public class LetterValidator
  121.         {
  122.             public string LoadedString
  123.             {
  124.                 get { return _loaded; }
  125.                 set { _loaded = value; }
  126.             }
  127.             private string _loaded;
  128.             public void LoadString(string str)
  129.             {
  130.                 LoadedString = str;
  131.             }
  132.             public void Validate()
  133.             {
  134.                 if (LoadedString.ToLower() != "a" &&
  135.                     LoadedString.ToLower() != "b" &&
  136.                     LoadedString.ToLower() != "c" &&
  137.                     LoadedString.ToLower() != "d" &&
  138.                     LoadedString.ToLower() != "e" &&
  139.                     LoadedString.ToLower() != "f" &&
  140.                     LoadedString.ToLower() != "g" &&
  141.                     LoadedString.ToLower() != "h" &&
  142.                     LoadedString.ToLower() != "i" &&
  143.                     LoadedString.ToLower() != "j" &&
  144.                     LoadedString.ToLower() != "k" &&
  145.                     LoadedString.ToLower() != "l" &&
  146.                     LoadedString.ToLower() != "m" &&
  147.                     LoadedString.ToLower() != "n" &&
  148.                     LoadedString.ToLower() != "o" &&
  149.                     LoadedString.ToLower() != "p" &&
  150.                     LoadedString.ToLower() != "q" &&
  151.                     LoadedString.ToLower() != "r" &&
  152.                     LoadedString.ToLower() != "s" &&
  153.                     LoadedString.ToLower() != "t" &&
  154.                     LoadedString.ToLower() != "u" &&
  155.                     LoadedString.ToLower() != "v" &&
  156.                     LoadedString.ToLower() != "w" &&
  157.                     LoadedString.ToLower() != "x" &&
  158.                     LoadedString.ToLower() != "y" &&
  159.                     LoadedString.ToLower() != "z")
  160.                 {
  161.                     LoadedString = "";
  162.                 }
  163.             }
  164.         }
  165.  
  166.         public class LetterValidationError : Exception
  167.         {
  168.             public LetterValidationError(string tx) : base("Validation error: " + tx) { }
  169.         }
  170.         public class MatrixInitializationError : Exception
  171.         {
  172.             public MatrixInitializationError(string tx) : base("Matrix Initialization error: " + tx) { }
  173.         }
  174.  
  175.     }
  176. }
Advertisement
Add Comment
Please, Sign In to add comment