Click here to Skip to main content
15,891,677 members
Articles / Programming Languages / C# 4.0
Alternative
Tip/Trick

L33t Tr4nsl4t0r (Leet Translator)

Rate me:
Please Sign up or sign in to vote.
5.00/5 (1 vote)
8 Jun 2011CPOL 17.1K   1   6
I have tried to change the code with a good idea from Luc Pattyn (Thanks).The code is more compact, and I have tried to make the code more simple, that handles the degree selection.// Leet Translator - L33t Tr4nsl4t0r.// Version 2.//// Just for the fun.//using...
I have tried to change the code with a good idea from Luc Pattyn (Thanks).

The code is more compact, and I have tried to make the code more simple, that handles the degree selection.
C#
// Leet Translator - L33t Tr4nsl4t0r.
// Version 2.
//
// Just for the fun.
//
using System.Text;
using System.Linq;
namespace Translator
{
  public static class Leet
  {
    /// <summary>
    /// Translate text to Leet - Extension methods for string class
    /// </summary>
    /// <param name="text">Orginal text</param>
    /// <param name="degree">Degree of translation (0 - 100%)</param>
    /// <returns>Leet translated text</returns>
    public static string ToLeet(this string text, int degree = 30)
    {
      return Translate(text, degree);
    }
    /// <summary>
    /// Translate text to Leet
    /// </summary>
    /// <param name="text">Orginal text</param>
    /// <param name="degree">Degree of translation (0 - 100%)</param>
    /// <returns>Leet translated text</returns>
    public static string Translate(string text, int degree = 30)
    {
      // Adjust degree between 0 - 100
      degree = degree >= 100 ? 100 : degree <= 0 ? 0 : degree;
      // No Leet Translator
      if (degree == 0)
        return text;
      // StringBuilder to store result.
      StringBuilder sb = new StringBuilder(text.Length);
      foreach (char c in text)
      {
        if (degree > 99)
        {
          int index = FindingCharDegree100.IndexOf(c);
          if (index < 0)
            sb.Append(c);
          else
            sb.Append(ReplacingCharDegree100[index]);
        }
        else if (degree > 80)
        {
          int index = FindingCharDegree81And99.IndexOf(c);
          if (index < 0)
            sb.Append(c);
          else
            sb.Append(ReplacingCharDegree81And99[index]);
        }
        else if (degree > 64)
        {
          int index = FindingCharDegree65And80.IndexOf(c);
          if (index < 0)
            sb.Append(c);
          else
            sb.Append(ReplacingCharDegree65And80[index]);
        }
        else if (degree > 48)
        {
          int index = FindingCharDegree49And64.IndexOf(c);
          if (index < 0)
            sb.Append(c);
          else
            sb.Append(ReplacingCharDegree49And64[index]);
        }
        else if (degree > 32)
        {
          int index = FindingCharDegree33And48.IndexOf(c);
          if (index < 0)
            sb.Append(c);
          else
            sb.Append(ReplacingCharDegree33And48[index]);
        }
        else if (degree > 16)
        {
          int index = FindingCharDegree16And32.IndexOf(c);
          if (index < 0)
            sb.Append(c);
          else
            sb.Append(ReplacingCharDegree16And32[index]);
        }
        else //if (degree > 0)
        {
          if (c == 'e' || c == 'E')
            sb.Append("3");
          else
            sb.Append(c);
        }
      }
      return sb.ToString(); // Return result.
    }
    #region Static string for finding and replacing - Credit to CP member Luc Pattyn for this great idea
    private static string FindingCharDegree16And32   = "aeioAEIO";
    private static string[] ReplacingCharDegree16And32 = {"4", "3", "1", "0", "4", "3", "1", "0"};
    private static string FindingCharDegree33And48   = FindingCharDegree16And32 + "sSlLcCyYuUdD";
    private static string[] ReplacingCharDegree33And48 = ReplacingCharDegree16And32.Concat(new string[] { "$", "$", "£", "£", "(", "(", "¥", "¥", "µ", "µ", "Ð", "Ð" }).ToArray();
    private static string FindingCharDegree49And64 = FindingCharDegree33And48 + "kKgGtTzZfF";
    private static string[] ReplacingCharDegree49And64 = ReplacingCharDegree33And48.Concat(new string[] { "|{", "|{", "9", "9", "7", "7", "2", "2", "ƒ", "ƒ" }).ToArray();
    private static string FindingCharDegree65And80 = FindingCharDegree49And64 + "yYnNwWhHvVmM";
    private static string[] ReplacingCharDegree65And80 = ReplacingCharDegree49And64.Concat(new string[] { "¥", "¥", "|\\|", "|\\|", "\\/\\/", "\\/\\/", "|-|", "|-|", "\\/", "\\/", "|\\/|", "|\\/|" }).ToArray();
    private static string FindingCharDegree81And99 = FindingCharDegree65And80 + "rRbBqQxX";
    private static string[] ReplacingCharDegree81And99 = ReplacingCharDegree65And80.Concat(new string[] { "®", "®", "ß", "ß", "Q", "Q¸", ")(", ")(" }).ToArray();
    private static string FindingCharDegree100 = FindingCharDegree81And99 + "jJ";
    private static string[] ReplacingCharDegree100 = ReplacingCharDegree81And99.Concat(new string[] { "_|", "_|" }).ToArray();
    #endregion
  }
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer Miralix
Denmark Denmark
Has worked as a programmer since 1999, starting with C++/MFC, Java, PHP and MySQL. Now it is all about C# (my favorite programming language), MS SQL, Azure and Xamarin (iOS/Android/WP8)

My primary work is to create applications that interacts with PABC/PBX, Microsoft Lync / UCMA.

Comments and Discussions

 
GeneralRe: I don't want to change the functionality. All I said is: if ... Pin
Luc Pattyn8-Jun-11 4:15
sitebuilderLuc Pattyn8-Jun-11 4:15 
GeneralHaven't done any benchmarking, and not sure if you have alre... Pin
neeklo21-Jun-11 0:19
neeklo21-Jun-11 0:19 
GeneralRe: Yes I have considered a Dictionary. But the speed on a Dicti... Pin
Kim Togo25-Jun-11 7:23
professionalKim Togo25-Jun-11 7:23 
GeneralCompute once and for all which "string" and "string[]" you'l... Pin
Riz Thon13-Jun-11 15:08
Riz Thon13-Jun-11 15:08 
Generalyou seem to have missed part of the suggestion, you could st... Pin
Luc Pattyn8-Jun-11 4:00
sitebuilderLuc Pattyn8-Jun-11 4:00 
GeneralRe: You are right. But the problem is with char "w" that becomes... Pin
Kim Togo8-Jun-11 4:05
professionalKim Togo8-Jun-11 4:05 
You are right. But the problem is with char "w" that becomes a "\\/\\/" ( 6 chars ).
The same is for char "n", "h" and "m".
But perhaps it is better to find another replacements char and drop the long string?

And thanks for you help Smile | :)

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.