Leet에서 영어로 번역


23

문제는 (영어) leetspeak / lolspeak / txtspk를 일반 영어로 번역하는 프로그램작성하는 것입니다. 언어가 지원하지 않는 한 프로그램은 표준 입력 및 출력에서 ​​표준 출력으로 읽어야합니다.

영어로 된 단어 목록이 포함 된 파일을 줄 바꿈으로 구분하여 사용할 수 있습니다. 호출되어야하며 W프로그램과 같은 디렉토리에 위치합니다. (GNU / Linux 시스템 및 다른 시스템 W에서는 링크를 만들 수 있습니다. /usr/share/dict/words) 목록이 모두 소문자 일 필요는 없으며 단어를 대문자로 사용해야하는지 여부를 결정하는 데 사용할 수 있습니다.

이것은 Nikos M이 게시 한 지금 삭제 된 질문을 기반으로하며 여기 에서 찾을 수 있습니다 . 이 최초의 질문이 닫히고 답변을 얻지 못했기 때문에 중복되지 않습니다. 승인 기준이 없으며 사용자가 질문을 넣기를 원하지 않았기 때문입니다.

채점

점수는 약간 복잡합니다!

당신의 점수는

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

최고 점수가 이깁니다.

당신의 프로그램은 반드시 완벽 할 필요는없고 완벽하지는 않지만 더 정확할수록 더 많은 보너스를 얻게됩니다!

때문에 $모두를 의미 s하고 S, 당신은 대문자 (문장의 시작 즉, 대문자)가할지 여부를 결정하는 리트 항목 당 5 점의 보너스를 얻을.

적절한 명사 (항상 대문자가있는 단어)를 구현하면 leet 항목 당 5 점의 추가 보너스가 제공됩니다.이 방법은 단어 목록을 살펴보고 대문자 버전 만있는 경우 출력을 대문자로 만드는 것입니다. 목록과 두 버전이 모두 있으면 추측하십시오.

문자에 두 가지 의미가있는 경우 (예 : 1mean L또는 I) 실제 영어 단어를 만드는 항목의 번역 만 고르기 위해 leet 항목 당 20 점을 얻습니다. 단어 목록을 사용하십시오. leet 항목의 둘 이상의 번역이 실제 영어 단어를 만드는 경우 유효한 번역 중 하나를 임의로 선택하여 여전히 보너스를 얻을 수 있습니다.

리트 목록

이들은 구현할 수있는 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-> 에드
pwnd-> pwned
pwnt-> pwned
k, K-> 확인
kk-> 확인
0 [0]-> o, O
y, Y-> 왜
4->
txt-> 텍스트
dafuq-> 무슨 F ** K
/ \, ^-> a, A
\ /-> v, V
d00d-> 친구
n00b-> 초보자
\ / \ /-> w, W
8-> b, B
| _ | -> u, U
|-| -> h, H
Я-> r, R
j00-> 당신
joo-> 당신
vv, VV-> w, W
tomoz-> 내일
| <-> k, K
[), |)-> d, D
<3-> 사랑
> <-> x, X
10100111001-> leet (1337의 이진 표현)
2->, 너무
ur, UR-> 당신은 (두 가지를 정확하게 구별 할 필요가 없습니다)
u, U-> 너
8-> -ate-, 8
x, X-> -ks-,-cks-
z, Z-> s, S
1-> i, I, l, L
! -> 나, 나!
c, C-> 참조, C, 바다
b, B-> be, B, 꿀벌
[강세 문자]-> [비 강세 양식] (강조 문자 1 개당 점수 1)
&, 7-> and, anned, ant (단어 중간에 사용될 수 있음)

더 어려운 "Leet": leet items각 30 점

!!! 1 !! 1-> !!!!!!! (1을!의 순서로 번역!)
!!! 하나!-> !!!!!
! 11-> !!!

다음은 위의 모든 leet 문자를 구현하는 프로그램과 일부 보너스가 수행 할 수있는 작업의 예입니다.

문장 예 : |-|3 15 $|_|(# @ n00b=He is such a newbie

리트 기반 검열 : $#!+=s**t

극한의 거머리 : \/\/ 1 |< 1 P 3 [) 1 A=Wikipedia

-x 또는 접미사 : H4X0R=hacker

더 극단적 인 leet : @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을 곱하면 여전히 단어 자체보다 훨씬 가치가 있습니다. 그게 당신의 의도입니까?
Martin Ender 2014 년

@ m.buettner 그것은 사용하여 간단하게 방지 할 수있어 trs/.../.../g. 그냥 우리가 단어 목록 사용 더 나은 번역 보상을 할 필요가 있으므로, 지루한 도전을 만들 것 그런 것들을 번역

긴 일련의 정규 표현식을 사용할 수 있습니까? 나는 대부분의 정규 표현식에서 상황을 인식하는 방식 으로도이 작업을 수행 할 수 있는지 (어려울지라도)보고 싶었습니다. (또는 어쩌면 sed스크립트.)
Isiah 메도우

내가 sed스크립트를 말할 때 , 나는 단순한 s/.../.../g것이 아니라 파싱되고 sed자체적으로 실행되는 파일을 의미 합니다. 언어와 마찬가지로 간결한 골프 언어 일 수도 있습니다.
Isiah Meadows

@impinball 정규식은 절대적으로 훌륭하지만, 단어 목록을 열고 정규식 언어로 구문 분석하는 방법을 모르겠습니다. sed스크립트는 훌륭하고 매우 흥미로울 수 있습니다. 짧은 대체 구문으로 인해 이것에 대해 잘 할 수 있습니다. GNU 확장을 사용하거나 sed더 큰 Bash 프로그램의 일부로 사용하여 단어 목록에서 읽을 수 있습니다

답변:


11

자바 스크립트 (49 + 5635) * 10/2174 = 26.14

온라인 데모 :

드롭 박스에서는 "실제 사전"옵션이 작동하지 않지만 실제 웹 서버에서 실행될 경우 작동합니다. 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 !!!!!!!
  • !!!!!! 하나! ====> !!!!!
  • teh! 11 ====> !!!
  • !!! 1 !! 1 ====> !!!!!!!
  • qu35710nz! 1! ====> 질문 !!!
  • +357 +357. 735+ ====> 테스트 테스트. 테스트
  • & 31! 73 # 4 (KER $ WR0 + 3 83773R L! K3 + #! 5 7 # @ N 2D @ Y ====> 그리고 엘리트 해커는 오늘보다 더 잘 썼습니다

노트:

사전은 모든 단어를 포함하는 W라는 객체가있는 별도의 자바 스크립트 파일입니다. 여기에는 관련 테스트를 실행하는 데 필요한 단어 만 포함됩니다.


Closure Compiler를 통해 실행하면 점수가 34 점으로 1640 자에 불과합니다.
AMK

이 파일은 무엇을합니까? dl.dropboxusercontent.com/u/141246873/leettranslator/… 웹에서 사전을 얻는 것입니까? (즉, 프로그램 W.js이 제거 된 경우 사용하여 프로그램을 실행할 수 있음 )

@professorfish는 사전이있는 외부 JS 라이브러리입니다 (최대 10 자). 데모에서 '실제 사전'옵션을 선택한 경우에만 사용됩니다. 그것은 더 나은 사전과 내 공식 답변의 일부가 아닌 데모 용입니다.
rdans

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되면 다음 쉘 스크립트를 작성할 수 있습니다.

#!/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

<insertnamehere> rocX또는roX

테스트 한 결과 작동합니다

1
점수를 잘 맞추고 단어 번역을 더 잘 처리하여 내 답변을 업데이트했습니다.
gxtaillon

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"354를 사용하여 매번 0부터 만드는 대신 107 바이트 객체 코드에 대해 모든 문자를 한 번 만들 수는 있지만 내 대답은 EBF 코드 크기에 최적화되어 있습니다 :)
Sylwester

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 items = 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

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 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.