Leet to English Translation

23

Twoim wyzwaniem jest napisanie programu do tłumaczenia (angielskiego) leetspeak / lolspeak / txtspk na normalny angielski. Twój program powinien czytać ze standardowego wejścia i wyjścia na standardowe wyjście, chyba że Twój język ich nie obsługuje.

Możesz użyć pliku zawierającego listę słów w języku angielskim, oddzielone nowymi wierszami. Powinien zostać wywołany Wi znajdować się w tym samym katalogu, co twój program. (W systemach GNU / Linux i ewentualnie innych możesz utworzyć Wlink do /usr/share/dict/words) Lista nie musi być pisana małymi literami, możesz jej użyć, aby określić, czy słowa powinny mieć wielkie litery.

Jest to oparte na usuniętym teraz pytaniu przesłanym przez Nikosa M., które można znaleźć tutaj . Nie jest to duplikat, ponieważ to oryginalne pytanie zostało zamknięte i nie otrzymano żadnych odpowiedzi, ponieważ nie było kryterium wygranej, a użytkownik nie chciał go podać.

Punktacja

Punktacja jest nieco skomplikowana!

Twój wynik to

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

Najwyższy wynik wygrywa.

Twój program nie musi być i prawdopodobnie nie może być idealny, ale im dokładniejszy, tym więcej dostanie bonusów!

Ponieważ $może to oznaczać jedno si drugie S, otrzymasz premię w wysokości 5 punktów za każdy element leet za podjęcie decyzji, czy powinna ona zawierać wielką literę (tj. Wielkie litery na początku zdań).

Dostajesz dodatkową premię w wysokości 5 punktów za każdy element leet za wdrożenie odpowiednich rzeczowników (słów, które zawsze mają wielkie litery) - sposób, w jaki to działa, polega na tym, że przeglądasz listę słów, sprawia, że ​​wyniki są pisane dużymi literami, jeśli tylko listę, a jeśli obie wersje są dostępne, po prostu zgadnij.

Jeśli znak ma dwa znaczenia (np. 1Może oznaczać Llub I), dostajesz 20 punktów za element leet za wybranie tylko tych tłumaczeń przedmiotu, które tworzą prawdziwe angielskie słowa - użyj do tego listy słów. Jeśli więcej niż jedno tłumaczenie elementu leet tworzy prawdziwe angielskie słowo, możesz dowolnie wybrać jedno z ważnych tłumaczeń i nadal otrzymać bonus.

Lista Leet

Są to elementy, które możesz wdrożyć. Nie musisz wdrażać ich wszystkich, ale im więcej dodasz, tym więcej punktów otrzymasz.

Nigdy nie możesz zdobyć punktów, tłumacząc przedmiot lub postać na siebie. Ta zasada zastępuje wszelkie błędy, które mogłem popełnić na liście.

Kuszące jest zrobienie prostego trlub s/.../.../g. Prawdziwym wyzwaniem jest ustalenie, które z wielu znaczeń może, a nie może być poprawne, za pomocą listy słów.

Leet Items (każdy z nich dodaje 1 do leet itemsformuły)

$ -> s, S
(-> c, C
5 -> s, S
@ -> a, A
4 -> a, A
3 -> e, E
7 -> t, T
+ -> t, T
# -> h, H
teh -> the
'd -> ed
pwnd -> pwned
pwnt -> pwned
k, K -> OK
kk -> OK
0 [zero] -> o, O
y, Y -> dlaczego
4 -> dla
txt -> tekst
dafuq -> co do cholery
/ \, ^ -> a, A
\ / -> v, V
d00d -> koleś
n00b -> nowicjusz
\ / \ / -> w, W
8 -> b, B
| _ | -> u, U
| - | -> h, H
Я -> r, R
j00 -> ty
joo -> ty
vv, VV -> w, W
tomoz -> jutro
| <-> k, K
[), |) -> d, D
<3 -> miłość
> <-> x, X
10100111001 -> leet (binarna reprezentacja 1337)
2 -> też
ur, UR -> twoja, jesteś (nie musisz poprawnie rozróżniać między nimi)
u, U -> ty
8 -> -ate-, 8
x, X -> -ks -, - cks-
z, Z -> s, S
1 -> i, I, l, L
! -> ja, ja ,!
c, C -> patrz, C, morze
b, B -> be, B, pszczoła
[litera akcentowana] -> [forma nieakcentowana] (wynik 1 za obsługiwaną literę akcentowaną)
&, 7 -> oraz, anned, ant (może być użyty w środku słowa)

Harder „Leet”: zdobądź 30 punktów za leet itemskażdy

!!! 1 !! 1-> !!!!!!! (przetłumacz 1 w sekwencji! na!!)
!!! jeden! -> !!!!!
! jedenaście-> !!!

Przykłady

Oto przykłady tego, co program, który implementuje wszystkie powyższe postacie leet i niektóre bonusy, może zrobić:

Przykładowe zdanie: |-|3 15 $|_|(# @ n00b=He is such a newbie

Cenzura Leeta: $#!+=s**t

Extreme leet: \/\/ 1 |< 1 P 3 [) 1 A=Wikipedia

-xor sufiks: H4X0R=hacker

Bardziej ekstremalny leet: @1\/\/4Y5 p0$+ ur n3VV qu35710nz 1n teh $&80x=Always post your new questions in the sandbox

Przykład punktacji

Bash, 10 postaci, 3 przedmioty, brak bonusów:

tr 137 let

To wyniki ( 1 * 3 ) * 10 / 10 = 3.

całkowicie ludzki
źródło
Przepraszam, nie złapałem tego w piaskownicy, ale jeśli pomnożysz bonusy przez 10, to nadal są warte dużo więcej niż same słowa. Czy to twoja intencja?
Martin Ender
@ m.buettner To do walki po prostu za pomocą trlub s/.../.../g. Tłumaczenie takich rzeczy byłoby nudnym wyzwaniem, dlatego musimy nagradzać lepsze tłumaczenia, które korzystają z listy słów
Czy dopuszczalna byłaby długa seria wyrażeń regularnych? Chciałbym zobaczyć, czy byłoby to możliwe (choć trudne), aby to zrobić nawet w sposób uwzględniający kontekst, w większości wyrażeń regularnych. (A może sedscenariusz.)
Isiah Meadows
Kiedy mówię sedskrypt, mam na myśli coś więcej niż prosty s/.../.../g, ale plik, który jest analizowany i wykonywany sedsam. Jakkolwiek zwięzły jest ten język, może być przyzwoitym językiem gry w golfa ...
Isiah Meadows
Reguły @impinball są absolutnie w porządku, chociaż nie mam pojęcia, jak otworzyć listę słów i parsować ją tylko za pomocą języka wyrażeń regularnych. sedskrypty są również w porządku i mogą być bardzo interesujące, mogłyby sobie z tym sed

Odpowiedzi:

11

JavaScript (49 + 5635) * 10/2174 = 26,14

Demo online:

Opcja „Prawdziwy słownik” nie działa w polu rozwijanym, ale będzie działać, jeśli zostanie uruchomiona na prawdziwym serwerze WWW. Testowane na serwerze deweloperskim Visual Studio i Google Chrome.

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

Wynik:

49 leet przedmiotów = 49

Bonus kapitalizacji = 5 * 49 = 245

premia za wyszukiwanie słownika = 20 * 49 = 980

premia za wykrzyknik * 3 = 90 * 49 = 4410

(przedmioty leet + bonusy) * 10 / (długość kodu)

(49 + 5635) * 10/2174 = 26,14

Kod:

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: "!", "!": "!" }

Nie golfowany:

            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);
            }

Wyniki testów:

  • | - | 3 15 $ | _ | (# @ n00b ====> On jest takim nowicjuszem
  • @ 1 // 4Y5 p0 $ + ur n3VV qu35710nz 1n teh $ & 80x ====> Zawsze zamieszczaj swoje nowe pytania w piaskownicy
  • !!! 1 !! 1 ====> !!!!!!!
  • !!!jeden! ====> !!!!!
  • ! jedenaście ====> !!!
  • teh !!! 1 !! 1 ====> !!!!!!!
  • te !!! ====> !!!!!
  • teh! jedenaście ====> The !!!
  • teh !!! 1 !! 1 ====> !!!!!!!
  • qu35710nz! 1! ====> Pytania !!!
  • +357 +357. 735+ ====> Test testowy. Test
  • & 31! 73 # 4 (KER $ WR0 + 3 83773R L! K3 + #! 5 7 # @ N 2D @ Y ====> A elitarni hakerzy pisali lepiej niż dzisiaj

Uwagi:

Słownik jest osobnym plikiem javascript z obiektem o nazwie W zawierającym wszystkie słowa. Zawiera tylko słowa potrzebne do przeprowadzenia odpowiednich testów.

rdans
źródło
Jeśli uruchomisz to przez kompilator zamknięcia, to tylko 1640 znaków, dzięki czemu uzyskasz wynik 34.
AMK
co robi ten plik? dl.dropboxusercontent.com/u/141246873/leettranslator/... czy wystarczy pobrać słownik z Internetu? (tzn. czy program może działać przy użyciu, W.jsjeśli został usunięty)
@professorfish to zewnętrzna biblioteka js z słownikiem (słowa do dziesięciu liter). Jest używany tylko wtedy, gdy w wersji demonstracyjnej wybrana jest opcja „prawdziwy słownik”. To tylko wersja demonstracyjna z lepszym słownikiem i nie jest częścią mojej oficjalnej odpowiedzi.
rdans
6

Haskell - Wynik 1.421421421: (37 pozycji + (21 bonusów (wielkie litery) * 5)) * 10 / (999 bajtów)

To moja ostatnia odpowiedź.

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

Testy

Po skompilowaniu programu do pliku o nazwie min-ltmożesz napisać następujący skrypt powłoki

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

który to wydrukuje

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"
gxtaillon
źródło
przez -ks-miałem na myśli ksw środku wyrazu. Zajmę się tym, jak tylko znajdę kompilator
Wystarczy zainstalować haskell-platformpakiet. Czy masz przykład ks?
gxtaillon
<insertnamehere> rocXlubroX
Przetestowałem to, działa
1
Zaktualizowałem moją odpowiedź wynikiem i lepszą obsługą tłumaczenia słów.
gxtaillon
6

Rozszerzony 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+))

Czyni to 15 tłumaczeń „$ (5 @ 437 + # 0821! &”, Bez bonusów i ma 222 bajty (niepotrzebne podawanie linii nie jest wliczone). 15 * 10/222 = 0,6757

Stosowanie:

%> 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 nie jest tak naprawdę przeznaczony do gry w golfa, ale jego funkcja rle, makra i ciąg znaków drukowania są nieco łatwiejsze do kompresji niż BrainFuck. Kompilowany na końcu plik binarny BrainFuck wygląda następująco:

>>,[-<+<+>>]<[>++++++[-<------>]+<+++[--[-[--[--[---[-----[-[-[-[-[-[--[-[--------[[-]
>[-]<<.>]>[->++++++++[-<++++++++>]<+.[-]]<]>[->++++++++[-<++++++++>]<++.[-]]<]>[->++++
+++++[-<+++++++++>]<+++.[-]]<]>[->+++++++++[-<+++++++++>]<++.[-]]<]>[->++++++++[-<++++
++++>]<+.[-]]<]>[->++++++++[-<+++++++++>]<---.[-]]<]>[->+++++++++[-<+++++++++>]<+++.--
---.[-]]<]>[->++++++++[-<+++++++++>]<++++.[-]]<]>[->+++++++++[-<+++++++++>]<--.[-]]<]>
[->+++++++++[-<+++++++++>]<+++.[-]]<]>[->++++++++[-<++++++++>]<+++.[-]]<]>[->++++++++[
-<++++++++>]<+.+++++++++++++.----------.[-]]<]>[->+++++++++[-<+++++++++>]<++.[-]]<]>[-
>++++++++[-<+++++++++>]<.[-]]<]>[->++++++++[-<+++++++++>]<+.[-]]<[-]<[-]>>,[-<+<+>>]<]
Sylwester
źródło
1
Skompilowany kod BF wydaje się działać dobrze, wygląda dość krótko jak na program BF
@professorfish Za pomocą ~"OTLHEAND"Mógłbym zrobić wszystkie znaki tylko raz dla 107 bajtów kodu obiektowego zamiast robić je od 0 za każdym razem przy użyciu 354, ale moja odpowiedź jest zoptymalizowana dla rozmiaru kodu EBF :)
Sylwester
2

Java: 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);}}

Czyni to następujące transformacje

+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

Obliczanie wyniku jest trudne

  • (przedmioty leet + bonusy) * 10 / (długość kodu)
  • długość kodu = 1165 leet
  • leet items = 39 (unikalny)
  • bonus = 21 (nie wiem jak obliczyć tak skopiowane MomemtumMori) (Proszę doradzić)

((39 + (21 * 5)) * 10) / 1165 = 1,236

Kod bez gry w golfa:

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);
    }
}
Uday Shankar
źródło
2
Czy miałbyś coś przeciwko odłogowaniu? : D
Knerd
0

Wynik C # 45 * 10/2556 = 0,176

Program może wyświetlać prawie wszystkie małe i duże litery. Ponieważ nie używam angielskiej listy słów, użyty został pierwszy klucz znaleziony w Słowniku. Np. \ / \ / Staje się vav. Jeśli char jest pierwszą literą słowa, stosuje się 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();
}
}

Oto mój wynik testu:

$ -> 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 
Bacchusbeale
źródło