Перекладемо на англійський переклад


23

Вашим завданням є написати програму для перекладу (англійською) leetspeak / lolspeak / txtspk на звичайну англійську. Ваша програма повинна читати від стандартного вводу та виводу до стандартного виводу, якщо ваша мова не підтримує їх.

Ви можете використовувати файл, що містить перелік слів англійською мовою, розділений новими рядками. Його слід викликати Wі буде розміщено в тому ж каталозі, що і ваша програма. (У системах GNU / Linux та, можливо, інших, ви можете зробити Wпосилання на /usr/share/dict/words) Список не повинен бути реєстровим, ви можете використовувати його, щоб визначити, чи мають слова мати великі літери.

Це ґрунтується на видаленому зараз питанні Нікоса М., яке можна знайти тут . Це не дублікат, оскільки це оригінальне запитання було закрито, і відповіді на нього не було, оскільки не було критерію виграшу, і користувач не бажав його ставити.

Оцінка балів

Рахунок трохи складний!

Ваш рахунок є

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

Найвищий результат виграє.

Ваша програма не повинна бути і, ймовірно, не може бути досконалою, але чим точніша вона, тим більше бонусів вона отримує!

Оскільки це $може означати і те, sі інше S, ви отримуєте бонус у 5 балів за кожний предмет, який вирішує, чи має він мати велику літеру (тобто великі літери на початку речень).

Ви отримуєте додатковий бонус у 5 балів за кожну позицію за реалізацію власних іменників (слова, у яких завжди є великі літери) - як це працює, якщо ви переглянете список слів, зробіть вихідний з великої літери, якщо у версії присутня лише великова версія список, і якщо обидві версії є, просто здогадайтесь.

Якщо персонаж має два значення (наприклад, 1може означати Lабо I), ви отримуєте 20 балів за деталь лише, щоб вибрати лише ті переклади елемента, які складають справжні англійські слова - використовуйте для цього список слів. Якщо більш ніж один переклад літнього предмету складає справжнє англійське слово, ви можете довільно вибрати один із дійсних перекладів і все одно отримати бонус.

Список Leet

Це найголовніші елементи, які ви можете реалізувати. Вам не доведеться реалізувати їх усі, але чим більше ви додасте, тим більше очок отримуєте.

Ви ніколи не можете набрати очки, переклавши предмет або символ на себе. Це правило перекриває будь-які помилки, які я могла допустити у списку.

Заманливо зробити простий trабо s/.../.../g. Справжньою задачею є визначити, яке з кількох значень могло б бути, а що не можна виправити, використовуючи список слів.

Пусті елементи (кожен із них додає 1 leet itemsу формулу)

$ -> s, S
(-> с, С
5 -> с, S
@ -> a, A
4 -> а, А
3 -> е, Е
7 -> т, Т
+ -> т, Т
# -> ч, Н
teh -> the
'd -> ред
pwnd -> pwned
pwnt -> pwned
k, K -> ОК
kk -> ОК
0 [нуль] -> о, О
y, Y -> чому
4 -> для
txt -> текст
dafuq -> що f ** k
/ \, ^ -> а, А
\ / -> v, V
d00d -> чувак
n00b -> новачок
\ / \ / -> ш, ш
8 -> б, В
| _ | -> у, U
| - | -> ч, Н
Я -> г, R
j00 -> ти
joo -> ти
vv, VV -> w, W
tomoz -> завтра
| <-> к, К
[), |) -> d, D
<3 -> любов
> <-> х, X
10100111001 -> leet (двійкове представлення 1337)
2 -> до, теж
ур, UR -> твій, ти (немає необхідності правильно розрізняти два)
u, U -> ти
8 -> -ате-, 8
x, X -> -ks -, - cks-
z, Z -> s, S
1 -> я, я, л, л
! -> я, я,!
c, C -> див., C, море
б, В -> бути, В, бджола
[лист з наголосом] -> [форма без наголосу] (оцінка 1 за лист з наголосом, що підтримується)
&, 7 -> і, мурашник, мураха (може використовуватися в середині слова)

Твердіший "Леет": набрати по 30 очок за leet itemsкожного

!!! 1 !! 1-> !!!!!!! (перекладіть 1 у послідовності! 's у!' s)
!!! один! -> !!!!!
! одинадцять-> !!!

Приклади

Ось приклади того, що програма, яка реалізує всі символи 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, вони все одно вартують набагато більше, ніж самі слова. Це ваш намір?
Мартін Ендер

@ m.buettner Це боротьба просто з використанням trабо s/.../.../g. Просто переклад подібних речей склав би нудне завдання, тому нам потрібно винагороджувати кращі переклади, які використовують список слів

Чи допустима довга серія регулярних виразів? Я хотів би побачити, чи можливо це зробити (хоч і важко) зробити це навіть зрозумілим контекстом здебільшого зворотними формулами. (А може, sedсценарій.)
Ісія Медоуз

Коли я кажу sedсценарій, я маю на увазі більше, ніж простий s/.../.../g, але файл, який розбирається і виконується sedсам по собі. Настільки ж лаконічною є ця мова, це може бути пристойною мовою гольфу ...
Ісія Медоуз

@impinball Regexes - це абсолютно добре, хоча я не маю уявлення, як би ви відкрили список слів і розбирали його лише мовою регулярного виразка. sedСценарії також прекрасні і можуть бути дуже цікавими, вони могли б зробити це дуже добре з-за синтаксису коротких підстановок, ви можете прочитати зі списку слів або з розширеннями GNU, або використовуючи sedяк частину більшої програми Bash

Відповіді:


11

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

Демонстрація в Інтернеті:

Параметр "Справжній словник" не працює у вікні, але він працюватиме, якщо працювати на реальному веб-сервері. Тестували на сервері розробки візуальної студії та Google Chrome.

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

Оцінка:

49 предметів із лету = 49

Бонус за капіталізацію = 5 * 49 = 245

бонус за пошук словника = 20 * 49 = 980

знак оклику * 3 = 90 * 49 = 4410

(Leet items + бонуси) * 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 $ & 80x ====> Завжди публікуйте свої нові запитання у пісочниці
  • !!! 1 !! 1 ====> !!!!!!!
  • !!! один! ====> !!!!!
  • ! одинадцять ====> !!!
  • teh !!! 1 !! 1 ====> The !!!!!!!
  • тех !!! один! ====> The !!!!!
  • teh! одинадцять ====> The !!!
  • teh !!! 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 lib зі словником у ній (слова до десяти літер). Його використовується лише в тому випадку, якщо на демонстраційній версії вибрано параметр 'реальний словник'. Це лише для демонстрації з кращим словником і не є частиною моєї офіційної відповіді.
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"я міг зробити всі символи один раз за 107 байт об'єктного коду, а не робити їх з 0 кожного разу, використовуючи 354, але моя відповідь оптимізована для розміру коду 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

Розрахунок балів складний

  • (Leet items + бонуси) * 10 / (довжина коду)
  • довжина коду = 1165 літ
  • 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
Кнерд

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 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.