升到英语翻译


23

您面临的挑战是编写一个程序,将leetspeak / lolspeak / txtspk(英语)翻译成正常的英语。您的程序应从标准输入和输出读取为标准输出,除非您的语言不支持这些。

您可以使用包含英语单词列表的文件,并用新行分隔。它应该被调用W,并将与您的程序位于同一目录中。(在GNU / Linux系统以及可能的其他系统上,您可以W链接到/usr/share/dict/words)列表不必全为小写,您可以使用它来确定单词是否应使用大写。

这是基于Nikos M.现在删除的问题,可以在此处找到。这不是重复的,因为此原始问题已关闭且未收到任何答案,因为没有获胜标准,并且用户不愿意输入。

计分

计分有点复杂!

你的分数是

(leet items + bonuses) * 10 / (code length)

最高分获胜。

您的程序不一定是完美的,也可能不是完美的,但是它越精确,它所获得的奖金就越多!

既然$可以同时表示sS,则每个leet项目决定是否应使用大写字母(即句子开头的大写字母)可获得5分的奖励。

如果实现专有名词(始终带有大写字母的单词),则每个leet项目还将获得5分的额外奖励-这种方法的工作方式是,您可以浏览单词列表,并且如果单词中只有大写形式,则将输出大写。列表,如果两个版本都在那儿,那就猜吧。

如果一个字符具有两种含义(例如,1可以表示意思LI),则每个leet项目仅获得那些构成真正英语单词的翻译,即可获得20分。为此,请使用单词表。如果一个leet物品的多个翻译成一个真实的英语单词,您可以任意选择其中一种有效的翻译,但仍然可以获得奖励。

升力清单

这些是您可以实现的重要项目。您不必全部实现它们,但是添加的越多,获得的积分就越多。

您无法通过将项目或角色翻译成自身来获得分数。该规则将覆盖我在列表中可能犯的任何错误。

做一个简单的tr或诱人s/.../.../g。真正的挑战是使用单词表确定多种含义中的哪种正确与否。

升项(每个项leet items在公式中加1)

$-> s,S
(-> c,C
5-> s,S
@-> a,A
4-> a,A
3-> e,E
7-> t,T
+-> t,T
#-> h,H
->的
'd-> ed
pwnd-> pwned
pwnt-> pwned
k,K->确定
kk->确定
0 [零]-> o,O
y,Y->为什么
4->对于
txt->文字
dafuq->什么f ** k
/ \,^-> a,A
\ /-> v,V
d00d->花花公子
n00b->新手
\ / \ /-> w,W
8-> b,B
| _ | ->你
|-| ->小时
Я-> r,R
j00->你
朱->你
vv,VV-> w,W
托莫兹->明天
| <-> k,K
[),|)-> d,D
<3->爱
> <-> x,X
10100111001-> leet(1337的二进制表示形式)
2->也太
ur,UR->您,您就是(不需要正确区分两者)
你,你->你
8-> -ate-,8
x,X-> -ks-,-cks-
z,Z-> s,S
1-> i,I,l,L
!->我,我!
c,C->看,C,海
b,B-> be,B,bee
[带重音符号]-> [非带重音符号形式](每个带重音符号的分数为1)
&,7-> and,anned,ant(可以在单词中间使用)

艰苦的“ Leet”:leet items每人得分30分

!!! 1 !! 1-> !!!!!!! (将!的序列中的1转换为!)
!!!!-> !!!!!
十一-> !!!

例子

这些是实现上述所有leet角色的程序以及某些附加功能可能执行的示例:

例句:|-|3 15 $|_|(# @ n00b=He is such a newbie

基于轻量级的检查:$#!+=s**t

至尊莱特:\/\/ 1 |< 1 P 3 [) 1 A=Wikipedia

-xor后缀:H4X0R=hacker

更极端的莱特:@1\/\/4Y5 p0$+ ur n3VV qu35710nz 1n teh $&80x=Always post your new questions in the sandbox

计分范例

重击,10个字符,3个物品,无奖金:

tr 137 let

这得分( 1 * 3 ) * 10 / 10 = 3


抱歉,我没有在沙盒中发现这个问题,但是如果您将奖金乘以10,则奖金的价值仍然远远超过其本身。那是你的意图吗?
马丁·恩德2014年

@ m.buettner只需使用tr或即可进行战斗s/.../.../g。仅仅翻译这样的事情会带来无聊的挑战,因此我们需要奖励使用单词列表的更好翻译

允许使用大量的正则表达式吗?我很想看看即使在大多数正则表达式中以上下文感知的方式也可以(尽管很难)做到这一点。(或者也许是一个sed剧本。)
Isiah Meadows 2014年

当我说一个sed脚本时,我所指的不仅仅是一个简单的s/.../.../g,而是一个由sed自身解析和执行的文件。尽管语言简洁,但它可能是一种体面的高尔夫语言……
Isiah Meadows

@impinball正则表达式绝对可以,尽管我不知道您如何打开单词表并仅使用正则表达式语言对其进行解析。sed脚本也很好,可能非常有趣,由于使用了短替换语法,它们可以在此方面做得很好,您可以使用GNU扩展或将其sed用作更大的Bash程序的一部分,从单词表中读取

Answers:


11

Javascript(49 + 5635)* 10/2174 = 26.14

在线演示:

“真实词典”选项在投递箱上不起作用,但如果在真实Web服务器上运行,它将起作用。在Visual Studio开发服务器和Google Chrome中进行了测试。

https://dl.dropboxusercontent.com/u/141246873/leettranslator/index.html

得分:

49个leet项目= 49

资本化奖金= 5 * 49 = 245

字典查询奖励= 20 * 49 = 980

感叹号奖励* 3 = 90 * 49 = 4410

(项目+奖金)* 10 /(代码长度)

(49 + 5635)* 10/2174 = 26.14

码:

function IsInDict(e) { return W[e] } function translate(e) { words = e.split(" "); res = ""; for (var t in words) { ex = ""; function n(e, r, i) { var s = false; for (var o = 1; o <= e.length; o++) { var u = e.substring(0, o) === "!" || i; var a = et[e.substring(0, o)]; var f = e.substring(o); if (a) { s = true; if (f.length === 0) { if (u) { ex = r + a; words[t] = "" } } else n(f, r + a, u) } } if (i && !s && r) { ex = r; words[t] = e.split("").reverse().join("") } } n(words[t].split("").reverse().join(""), "", false); mes = []; function r(e, t) { for (var n = 1; n <= e.length; n++) { var i = tokens[e.substring(0, n)]; var s = e.substring(n); if (i) { mFound = true; if (s.length === 0) for (var o in i) { mes.push(t + i[o]) } else for (var o in i) r(s, t + i[o]) } } if (e.length > 1) r(e.substring(1), t + e.substring(0, 1)); else { mes.push(t + e) } } m = ""; if (words[t] !== "") { r(words[t].toLowerCase(), ""); if (mes.length === 1) m = mes[0]; else { sl = []; for (var i in mes) { if (IsInDict(mes[i].slice(-1) === "." ? mes[i].substring(0, mes[i].length - 1) : mes[i])) { sl.push(mes[i]) } } if (sl.length > 0) m = sl[0]; else m = mes[0] } if (res === "") { m = cap(m) } if (res.slice(-1) === ".") { m = cap(m) } } res += " " + m; if (ex !== "") res += ex } return res.trim() } function cap(e) { return e.charAt(0).toUpperCase() + e.slice(1) } tokens = { $: ["s"], "(": ["c"], 5: ["s"], "@": ["a"], 4: ["a", "for"], 3: ["e"], "+": ["t"], "#": ["h"], teh: ["the"], "'d": ["ed"], pwnd: ["pwned"], pwnt: ["pwned"], k: ["ok"], kk: ["ok"], 0: ["o"], y: ["why"], txt: ["text"], dafuq: ["what the f**k"], "/\\": ["a"], "^": ["a"], "\\/": ["v"], d00d: ["dude"], n00b: ["newbie"], "\\/\\/": ["w"], 8: ["b", "ate"], "|_|": ["u"], "|-|": ["h"], "Я": ["r"], j00: ["you"], joo: ["you"], vv: ["w"], tomoz: ["tomorrow"], "|<": ["k"], "[)": ["d"], "|)": ["d"], "<3": ["love"], "><": ["x"], 10100111001: ["leet"], 2: ["to", "too"], ur: ["your", "you're"], u: ["you"], x: ["ks", "cks"], z: ["s"], 1: ["i", "l"], "!": ["i"], c: ["see", "sea"], b: ["be", "bee"], "&": ["and", "anned", "ant"], 7: ["and", "anned", "ant", "t"] }; et = { eno: "!", nevele: "!!", 1: "!", "!": "!" }

取消高尔夫:

            tokens={
            '$':['s'],'(':['c'],'5':['s'],'@':['a'],'4':['a','for'],'3':['e'],'+':['t'],'#':['h'],'teh':['the'],"'d":['ed'],'pwnd':['pwned'],
            'pwnt':['pwned'],'k':['ok'],'kk':['ok'],'0':['o'],'y':['why'],'txt':['text'],'dafuq':['what the f**k'],
            '/\\':['a'],'^':['a'],'\\/':['v'],'d00d':['dude'],'n00b':['newbie'],
            '\\/\\/':['w'],'8':['b','ate'],'|_|':['u'],'|-|':['h'],'Я':['r'],'j00':['you'],
            'joo':['you'],'vv':['w'],'tomoz':['tomorrow'],'|<':['k'],'[)':['d'],'|)':['d'],'<3':['love'],
            '><':['x'],'10100111001':['leet'],'2':['to','too'],'ur':["your","you're"],
            'u':['you'],'x':['ks','cks'],'z':['s'],'1':['i','l'],'!':['i'],'c':['see','sea'],
            'b':['be','bee'],'&':['and','anned','ant'],'7':['and','anned','ant','t']}
            var excTokens = {'eno':'!','nevele':'!!','1':'!','!':'!'}

            function IsInDict(word)
            {
                return (W[word]);
            }

            function translate(input) {
                var words = input.split(" ");
                var result = "";
                for (var i in words) {
                    var exclamations = "";
                    function parseExclamations(s, prev, exclamationFound) {
                        var matchFound = false;
                        for (var j = 1; j <= s.length; j++) {
                            var hasExclamation = (s.substring(0, j) === "!") || exclamationFound;
                            var currentToken = excTokens[s.substring(0, j)];
                            var remaining = s.substring(j);
                            if (currentToken) {
                                matchFound = true;
                                if (remaining.length === 0) {
                                    if (hasExclamation) {
                                        exclamations = prev + currentToken;
                                        words[i] = "";//word only had exclamations in it so dont parse the rest of it
                                    }
                                }
                                else
                                    parseExclamations(remaining, prev + currentToken, hasExclamation);
                            }
                        }
                        if (exclamationFound && !matchFound && prev) {
                            exclamations = prev;
                            words[i] = s.split("").reverse().join("");//reverse back again
                        }
                    }
                    var reverseWord = words[i].split("").reverse().join("");
                    parseExclamations(reverseWord, "", false);

                    var matches = []
                    function parse(s, prev) {
                        for (var j = 1; j <= s.length; j++) {
                            var currentTokenArray = tokens[s.substring(0, j)];
                            var remaining = s.substring(j);
                            if (currentTokenArray) {
                                matchFound = true;
                                if (remaining.length === 0)
                                    for (var k in currentTokenArray) {
                                        matches.push(prev + currentTokenArray[k]);
                                    }
                                else
                                    for (var k in currentTokenArray)
                                        parse(remaining, prev + currentTokenArray[k]);
                            }
                        }

                        if (s.length > 1)
                            parse(s.substring(1), prev + s.substring(0, 1));
                        else {
                            matches.push(prev + s);
                        }
                    }

                    var match = "";
                    if (words[i] !== "") {
                        parse(words[i].toLowerCase(), "");

                        //check the dictionary
                        if (matches.length === 1)
                            match = matches[0];
                        else {
                            var shortlist = [];
                            for (var j in matches) {
                                //check dictionary. allow for a full stop at the end of the word
                                var isInDict = IsInDict(matches[j].slice(-1) === "." ? matches[j].substring(0, matches[j].length - 1) : matches[j]);
                                if (isInDict) {
                                    shortlist.push(matches[j]);
                                }
                            }

                            if (shortlist.length > 0)
                                match = shortlist[0];
                            else
                                match = matches[0];
                        }
                        if (result === "") {
                            match = cap(match);
                        }
                        if (result.slice(-1) === ".") {
                            match = cap(match);
                        }
                    }
                    result += " " + match;

                    if (exclamations !== "")
                        result += exclamations;
                }

                return result.trim();
            }

            function cap(string) {
                return string.charAt(0).toUpperCase() + string.slice(1);
            }

检测结果:

  • |-| 3 15 $ | _ |(##n00b ====>他真是个新手
  • @ 1 // 4Y5 p0 $ + ur n3VV qu35710nz 1n teh $&80x ====>始终在沙盒中发布新问题
  • !!! 1 !! 1 ====> !!!!!!!
  • !!!一!====> !!!!!
  • !十一====> !!!
  • teh !!! 1 !! 1 ====> The !!!!!!!
  • !!一个!====> The !!!!!
  • 十一!====> !!!
  • !!! 1 !! 1 ====> The !!!!!!!
  • qu35710nz!1!====>问题!!!
  • +357 +357。735+ ====>测试测试。测试
  • &31!73#4(KER $ WR0 + 3 83773R L!K3 +#!5 7#@ N 2D @ Y ====>像这样的精英黑客比今天写的更好

笔记:

字典是一个单独的javascript文件,其中的对象W包含所有单词。这仅包含运行相关测试所需的单词。


如果运行通过关闭编译它只有1640字把你的分数34
AMK

这个文件做什么?dl.dropboxusercontent.com/u/141246873/leettranslator / ...仅仅是从网上获取字典吗?(即,W.js如果删除了该程序,可以运行该程序

@professorfish多数民众赞成在一个外部js库中有一个字典(单词最多10个字母)。仅在演示中选择了“真实词典”选项时,才使用它。它仅用于具有更好词典的演示,而不是我的官方答案的一部分。
rdans 2014年

6

Haskell-1.421421421得分:(37个项目+(21个奖金(大写)* 5))* 10 /(999字节)

这是我的最终答案。

import System.Environment
import Text.Parsec
import Text.Parsec.String
s=string
r=return
t=try
o=oneOf
(>|)=(<|>)
a p l u=b[p]l u
b (p:q) l u=e(foldl(>|)(s p)$map(s)q)l u
c p l u=e(o p)l u
d p q=t$s p>>r q
e p l u=t$do{p;r l}>|do{s". ";p;r$". "++u}
f p q=t$do{between(t$s" ")(t$s" ")(o p);r q}
g::Parser String
g=do{s<-many$c"$5""s""S">|c"@4^""a""A">|c"3""e""E">|c"7+""t""T">|c"#""h""H">|d"teh""the">|d"'d""ed">|d"pwnd""pwned">|d"pwnt""pwned">|c"kK""ok""OK">|d"kk""OK">|d"n00b""newbie">|f"yY""why">|d"4""for">|d"txt""text">|d"dafuq""what the f**k">|b["\\/\\/","vv","VV"]"w""W">|a"/\\""a""A">|d"d00d""dude">|c"0""o""O">|a"\\/""v""V">|c"8""b""B">|a"|_|""u""U">|a"|-|""h""H">|c"Я""r""R">|b["j00","joo"]"you""you">|d"tomoz""tomorrow">|a"|<""k""K">|b["[)","|)"]"d""D">|d"<3""love">|a"><""x""X">|c"1!""i""I">|d"10100111001""leet">|c"2""too""to">|d"ur""your">|d"UR""you're">|f"uU""you">|c"xX""ks""cks">|d"&""and">|do{c<-anyChar;return [c]};return$concat s}
main=getArgs>>=putStrLn.show.(parse g"").concat

测验

将程序编译为名为的文件时min-lt,可以编写以下shell脚本

#!/bin/bash
./min-lt "|-|3 15 $|_|(# @ n00b"
./min-lt "\$#!+"
./min-lt "\/\/ 1 |< 1 P 3 [) 1 A"
./min-lt "H4X0R"
./min-lt "@1\/\/4Y5 p0$+ ur n3VV qu35710nz 1n teh $&80x"
./min-lt "+357 +357. 735+"

这将打印此

Right "he is su(h a newbie"
Right "shit"
Right "w i k i P e d i A"
Right "HaksoR"
Right "aiwaYs post your new questionz in the sandboks"
Right "test test. Test"

通过-ks-我的意思是ks在一个字的中间。我一旦找到haskell编译器

只需安装该haskell-platform软件包。你有一个例子ks吗?
gxtaillon 2014年

<insertnamehere> rocXroX

我已经对其进行了测试,它可以正常工作

1
用分数和更好的单词翻译功能更新了我的答案。
gxtaillon 2014年

6

扩展的BrainFuck:0.6757

{a[-])&d}{c(-(-}{d)$t(-}:r:i:t$t,(-$i+$r+)$i($t 6+(-$i 5--)+$i 3+(--&c-(--
(3-(5-&c&c&c-&c--5-((-&d)$r.&d|"A"&a|"B"&a|"T"&a|"S"&a|"A"&a|"E"&a|"TO"&a
|"L"&a|"O"&a|"T"&a|"C"&a|"AND"&a|"S"&a|"H"&a|"I"(-))$i(-)$r(-)$t,(-$i+$r+))

因此,这会进行15个翻译“ $(5 @ 437 +#0821!&“),没有任何奖金,并且它有222个字节(不包括专业换行符)。15* 10/222 = 0.6757

用法:

%> beef ebf.bf < leet.ebf > leet.bf
%> echo '& 31337 #4(KER$ WR0+3 83773R L!K3 +#!5 7#@N 2D@Y' | beef  leet.bf
AND ELEET HACKERS WROTE BETTER LIKE THIS THAN TODAY
%>

EBF并不是真正为打高尔夫球而设计的,但它的rle功能,宏和打印字符串功能使压缩功能比BrainFuck稍微容易一些。最终编译的BrainFuck二进制文件如下所示:

>>,[-<+<+>>]<[>++++++[-<------>]+<+++[--[-[--[--[---[-----[-[-[-[-[-[--[-[--------[[-]
>[-]<<.>]>[->++++++++[-<++++++++>]<+.[-]]<]>[->++++++++[-<++++++++>]<++.[-]]<]>[->++++
+++++[-<+++++++++>]<+++.[-]]<]>[->+++++++++[-<+++++++++>]<++.[-]]<]>[->++++++++[-<++++
++++>]<+.[-]]<]>[->++++++++[-<+++++++++>]<---.[-]]<]>[->+++++++++[-<+++++++++>]<+++.--
---.[-]]<]>[->++++++++[-<+++++++++>]<++++.[-]]<]>[->+++++++++[-<+++++++++>]<--.[-]]<]>
[->+++++++++[-<+++++++++>]<+++.[-]]<]>[->++++++++[-<++++++++>]<+++.[-]]<]>[->++++++++[
-<++++++++>]<+.+++++++++++++.----------.[-]]<]>[->+++++++++[-<+++++++++>]<++.[-]]<]>[-
>++++++++[-<+++++++++>]<.[-]]<]>[->++++++++[-<+++++++++>]<+.[-]]<[-]<[-]>>,[-<+<+>>]<]

1
编译的BF代码似乎可以正常工作,对于BF程序来说看起来很短

@professorfish使用~"OTLHEAND"我可以为107个字节的对象代码制作一次所有字符,而不是每次使用354每次都从0开始,但是我的答案针对EBF代码大小进行了优化:)
Sylwester 2014年

2

爪哇:1.236

import java.util.*;public class L{static H<String,String>c;static H<String,String>w;static{c=new H();c.p("1","i");c.p("!","i");c.p("$","s");c.p("5","s");c.p("@","a");c.p("4","a");c.p("3","e");c.p("7","t");c.p("+","t");c.p("#","h");c.p("'d","ed");c.p("0","o");c.p("zero","o");c.p("\\/\\/","w");c.p("/\\","a");c.p("\\/","v");c.p("|<","k");c.p("[)","d");c.p("8","b");c.p("|_|","u");c.p("|-|","h");c.p("Я","r");c.p("(","c");c.p("VV","w");c.p("&","and");c.p("2","to");w=new H();w.p("@","a");w.p("teh","the");w.p("pwnd","pwned");w.p("pwnt","pwned");w.p("k","ok");w.p("kk","ok");w.p("y","why");w.p("Y","why");w.p("4","for");w.p("txt","text");w.p("dafuq","what the f**k");w.p("d00d","dude");w.p("n00b","newbie");w.p("j00","you");w.p("joo","you");}public static void main(String[]a){System.out.println(new L().C(a));}String C(String[]o){String x=T(o);for(String d:o){if(w.containsKey(d))x=x.replace(d,w.get(d));else{String r=d;for(String y:c.keySet()){if(d.contains(y))r=r.replace(y,c.get(y));}x=x.replace(d,r);}}return x;}String T(String[]l){String s="";for(String w:l)s+=" "+w;return s;}}class H<T1,T2>extends LinkedHashMap<T1,T2>{T2 p(T1 k,T2 v){return super.put(k,v);}}

因此,它进行了以下转换

+357 +357. 735+
test test. test
|-|3 15 $|_|(# @ n00b
he is such a newbie
$#!+
shit
\/\/ 1 |< 1 P 3 [) 1 A
w i k i P e d i A
@1\/\/4Y5 p0$+ ur n3VV qu35710nz 1n teh $&80x
aiwaYs post ur new questionz in the sandbox
& 31337 #4(KER$ WR0+3 83773R L!K3 +#!5 7#@N 2D@Y
and eieet hacKERs WRote betteR LiKe this thaN toDaY

分数计算很棘手

  • (项目+奖金)* 10 /(代码长度)
  • 码长度= 1165 leet
  • leet项目= 39(唯一)
  • 红利= 21(不知道如何计算如此复制的MomemtumMori)(请告知)

((39 +(21 * 5))* 10)/ 1165 = 1.236

非高尔夫代码:

import java.util.*;

public class L {
    static H<String, String> c;
    static H<String, String> w;

    static {
        c = new H();
        c.p("1", "i");
        c.p("!", "i");
        c.p("$", "s");
        c.p("5", "s");
        c.p("@", "a");
        c.p("4", "a");
        c.p("3", "e");
        c.p("7", "t");
        c.p("+", "t");
        c.p("#", "h");
        c.p("'d", "ed");
        c.p("0", "o");
        c.p("zero", "o");
        c.p("\\/\\/", "w");
        c.p("/\\", "a");
        c.p("\\/", "v");
        c.p("|<", "k");
        c.p("[)", "d");
        c.p("8", "b");
        c.p("|_|", "u");
        c.p("|-|", "h");
        c.p("Я", "r");
        c.p("(", "c");
        c.p("VV", "w");
        c.p("&", "and");
        c.p("2", "to");
        w = new H();
        w.p("@", "a");
        w.p("teh", "the");
        w.p("pwnd", "pwned");
        w.p("pwnt", "pwned");
        w.p("k", "ok");
        w.p("kk", "ok");
        w.p("y", "why");
        w.p("Y", "why");
        w.p("4", "for");
        w.p("txt", "text");
        w.p("dafuq", "what the f**k");
        w.p("d00d", "dude");
        w.p("n00b", "newbie");
        w.p("j00", "you");
        w.p("joo", "you");
    }

    public static void main(String[] a) {
        System.out.println(new L().C(a));
    }

    String C(String[] o) {
        String x = T(o);
        for (String d : o) {
            if (w.containsKey(d)) x = x.replace(d, w.get(d));
            else {
                String r = d;
                for (String y : c.keySet()) {
                    if (d.contains(y)) r = r.replace(y, c.get(y));
                }
                x = x.replace(d, r);
            }
        }
        return x;
    }

    String T(String[] l) {
        String s = "";
        for (String w : l) s += " " + w;
        return s;
    }
}

class H<T1, T2> extends LinkedHashMap<T1, T2> {
    T2 p(T1 k, T2 v) {
        return super.put(k, v);
    }
}

2
您介意取消它吗?:D
Knerd 2014年

0

C#得分45 * 10/2556 = 0.176

程序可以输出几乎所有的大小写字母。由于我没有使用英语单词列表,因此使用了在词典中找到的第一个键。例如\ / \ /变为vav。如果char是单词ToUpper的首字母。

using System;
using System.Collections.Generic;
class L
{
Dictionary<string, string> D;        
public L() 
{ 
D = new Dictionary<string, string>();
M();
}
public void M()
{
D.Add("$", "s,S");
D.Add("(", "c,C");
D.Add("5", "s,S");
D.Add("@", "a,A");
D.Add("4", "a,A,for");
D.Add("3", "e,E");
D.Add("7", "t,T,and,anned,ant");
D.Add("+", "t,T");
D.Add("#", "h,H");
D.Add("teh", "the");
D.Add("'d", "ed");
D.Add("pwnd", "pwned");
D.Add("pwnt", "pwned");
D.Add("k", "OK");
D.Add("K", "OK");
D.Add("kk", "OK");
D.Add("0", "o,O");
D.Add("y", "why");
D.Add("Y", "why");
D.Add("txt", "text");
D.Add("dafuq", "what the f**k");
D.Add("\\/\\/", "w,W");
D.Add("/\\", "a,A");
D.Add("^", "a,A");
D.Add("\\/", "v,V");
D.Add("d00d", "dude");
D.Add("n00b", "newbie");       
D.Add("8", "b,B,ate,8");
D.Add("|_|", "u,U");
D.Add("|-|", "h,H");
D.Add("j00", "you");
//Я      -> r,R
D.Add("joo", "you");
D.Add("vv", "w,W");
D.Add("VV", "w,W");
D.Add("tomoz", "tomorrow");
D.Add("|<", "k,K");
D.Add("[)", "d,D");
D.Add("|)", "d,D");
D.Add("<3", "love");
D.Add("><", "x,X");
D.Add("2", "to,too");
//10100111001       -> leet (binary representation of 1337)
D.Add("ur", "your,you're");
D.Add("UR", "your,you're");
D.Add("u", "you");
D.Add("U", "you");
D.Add("x", "ks,cks");
D.Add("X", "ks,cks");
D.Add("z", "s,S");
D.Add("Z", "s,S");
D.Add("1", "i,I,l,L");
D.Add("!", "i,I,!");
D.Add("c", "see,C,sea");
D.Add("C", "see,C,sea");
D.Add("b", "be,B,bee");
D.Add("B", "be,B,bee");
//[accented letter] -> [non-accented form] (score 1 per accented letter supported)
D.Add("&", "and,anned,ant");
}

int P(string K, out List<string> V)
{
V = new List<string>();
string v,comma=",";
if(D.TryGetValue(K,out v))
{
string[] vv = v.Split(comma.ToCharArray());
foreach(string s in vv)
{
V.Add(s);
}
}
return V.Count;
}

public string E(string X)
{
string e ="";
string S = " ",t,k="";
string[] W = X.Split(S.ToCharArray());
int n = 0,x=0,m=0;
List<string> V=new List<string>();
bool F = false;
foreach(string s in W)
{
n = s.Length;
F = false;
for (int i = 0; i < n; i++)
{
m = 0;
for (int j = 1; j < n - i+1; j++)
{
k = s.Substring(i, j);
x = P(k, out V);
if (x > 0)
{
t = V[0];
if (t.Length == 1 && i == 0)
t = t.ToUpper();
e += t;
m = t.Length;
F = true;
break;
}
}
if (m > 0) i += (m - 1);
}
e += S;
}
return e;
}
static void Main(string[] a)
{
string t = Console.ReadLine();
L x = new L();
t = x.E(t);
Console.WriteLine(t);
Console.ReadLine();
}
}

这是我的测试输出:

$ -> S 
( -> C 
5 -> S 
@ -> A 
4 -> A 
3 -> E 
7 -> T 
+ -> T 
# -> H 
teh -> the 
'd -> ed 
pwnd -> pwned 
pwnt -> pwned 
k -> OK 
K -> OK 
0 -> O 
y -> why 
Y -> why 
4 -> A 
txt -> text 
dafuq -> what the f**k 
/\ -> A 
^ -> A 
\/ -> V 
d00d -> dude 
n00b -> newbie 
\/\/ -> Vav 
8 -> B 
|_| -> U 
|-| -> H 
j00 -> you 
joo -> you 
vv -> W 
VV -> W 
tomoz -> tomorrow 
|< -> K 
[) -> D 
|) -> D 
<3 -> love 
>< -> X 
2 -> to 
ur -> you 
UR -> you 
u -> you 
U -> you 
8 -> B 
x -> ks 
X -> ks 
z -> S 
Z -> S 
1 -> I 
! -> I 
c -> see 
C -> see 
b -> be 
B -> be 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.