Traduction de Leet à l'anglais

23

Votre défi est d' écrire un programme pour traduire (anglais) leetspeak / lolspeak / txtspk en anglais normal. Votre programme doit lire depuis l'entrée et la sortie standard vers la sortie standard, sauf si votre langue ne les prend pas en charge.

Vous pouvez utiliser un fichier contenant une liste de mots en anglais, séparés par de nouvelles lignes. Il doit être appelé Wet sera situé dans le même répertoire que votre programme. (Sur les systèmes GNU / Linux et éventuellement d'autres, vous pouvez créer Wun lien vers /usr/share/dict/words) La liste ne doit pas être entièrement en minuscules, vous pouvez l'utiliser pour déterminer si les mots doivent avoir des majuscules.

Ceci est basé sur une question maintenant supprimée publiée par Nikos M. qui peut être trouvée ici . Ce n'est pas un doublon car cette question d'origine a été fermée et n'a reçu aucune réponse, car il n'y avait pas de critère de gain et l'utilisateur n'était pas disposé à en mettre un.

Notation

Le score est un peu compliqué!

Ton score est

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

Le score le plus élevé l'emporte.

Votre programme ne doit pas être et ne peut probablement pas être parfait, mais plus il est précis, plus il reçoit de bonus!

Puisque $peut signifier les deux set S, vous obtenez un bonus de 5 points par élément de leet pour décider s'il doit avoir une majuscule (c'est-à-dire des majuscules au début des phrases).

Vous obtenez un bonus supplémentaire de 5 points par élément de leet pour la mise en œuvre de noms propres (mots qui ont toujours des majuscules) - la façon dont cela fonctionne est que vous parcourez la liste de mots, mettez la sortie en majuscule si seule une version en majuscule est présente dans le liste, et si les deux versions sont là, devinez.

Si un personnage a deux significations (par exemple, 1peut signifier Lou I), vous obtenez 20 points par élément de leet pour ne choisir que les traductions de l'élément qui font de vrais mots anglais - utilisez la liste de mots pour cela. Si plus d'une traduction d'un élément leet fait un vrai mot anglais, vous pouvez choisir arbitrairement l'une des traductions valides et toujours obtenir le bonus.

Liste de Leet

Ce sont les éléments leet que vous pouvez implémenter. Vous n'êtes pas obligé de tous les implémenter, mais plus vous en ajoutez, plus vous obtenez de points.

Vous ne pouvez jamais marquer de points en traduisant un objet ou un personnage en lui-même. Cette règle annule toutes les erreurs que j'ai pu commettre dans la liste.

Il est tentant de faire un simple trou s/.../.../g. Le vrai défi est de déterminer laquelle des multiples significations pourrait et ne pourrait pas être correcte, en utilisant la liste de mots.

Articles Leet (chacun d'eux ajoute 1 à leet itemsdans la formule)

$ -> s, S
(-> c, C
5 -> s, S
@ -> a, A
4 -> a, A
3 -> e, E
7 -> t, T
+ -> t, T
# -> h, H
teh -> le
'd -> ed
pwnd -> pwned
pwnt -> pwned
k, K -> OK
kk -> OK
0 [zéro] -> o, O
y, Y -> pourquoi
4 -> pour
txt -> texte
dafuq -> ce que le f ** k
/ \, ^ -> a, A
\ / -> v, V
d00d -> mec
n00b -> débutant
\ / \ / -> w, W
8 -> b, B
| _ | -> u, U
| - | -> h, H
Я -> r, R
j00 -> vous
joo -> toi
vv, VV -> w, W
tomoz -> demain
| <-> k, K
[), |) -> d, D
<3 -> amour
> <-> x, X
10100111001 -> leet (représentation binaire de 1337)
2 -> aussi
ur, UR -> votre, vous êtes (pas besoin de distinguer correctement les deux)
u, U -> toi
8 -> -ate-, 8
x, X -> -ks -, - cks-
z, Z -> s, S
1 -> i, I, l, L
! -> je, je,!
c, C -> voir, C, mer
b, B -> être, B, abeille
[lettre accentuée] -> [forme non accentuée] (note 1 par lettre accentuée prise en charge)
&, 7 -> et, anned, ant (peut être utilisé au milieu d'un mot)

Harder "Leet": marquez 30 points pour leet itemschacun

!!! 1 !! 1-> !!!!!!! (traduisez 1 dans une séquence de! en!)
!!! un! -> !!!!!
! eleven-> !!!

Exemples

Ce sont des exemples de ce qu'un programme qui implémente tous les caractères leet ci-dessus, et certains des bonus, pourrait faire:

Exemple de phrase: |-|3 15 $|_|(# @ n00b=He is such a newbie

Censure basée sur leet: $#!+=s**t

Leet extrême: \/\/ 1 |< 1 P 3 [) 1 A=Wikipedia

-xor suffixe: H4X0R=hacker

Leet plus extrême: @1\/\/4Y5 p0$+ ur n3VV qu35710nz 1n teh $&80x=Always post your new questions in the sandbox

Exemple de notation

Bash, 10 personnages, 3 objets, pas de bonus:

tr 137 let

Ce scores ( 1 * 3 ) * 10 / 10 = 3.

totalement humain
la source
Désolé, je n'ai pas attrapé cela dans le bac à sable, mais si vous multipliez les bonus par 10, ils valent toujours beaucoup plus que les mots eux-mêmes. Est-ce votre intention?
Martin Ender
@ m.buettner C'est pour combattre simplement en utilisant trou s/.../.../g. Le simple fait de traduire des choses de ce genre constituerait un défi ennuyeux, nous devons donc récompenser de meilleures traductions qui utilisent la liste de mots
Une longue série d'expressions rationnelles serait-elle admissible? J'adorerais voir s'il était possible (quoique difficile) de le faire même de manière contextuelle dans la plupart des regexps. (Ou peut-être un sedscript.)
Isiah Meadows
Quand je dis un sedscript, je veux dire plus qu'un simple s/.../.../g, mais un fichier qui est analysé et exécuté par sedlui-même. Aussi laconique que soit la langue, elle pourrait être une langue décente pour le golf ...
Isiah Meadows
@impinball Les regex sont très bien, bien que je ne sache pas comment ouvrir la liste de mots et l'analyser avec un langage regex seul. sedles scripts sont également très bien et pourraient être très intéressants, ils pourraient très bien faire cela en raison de la courte syntaxe de substitution, vous pourriez être en mesure de lire à partir de la liste de mots, soit avec des extensions GNU ou en utilisant seddans le cadre d'un programme Bash plus large

Réponses:

11

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

Démo en ligne:

L'option "Vrai dictionnaire" ne fonctionne pas sur la boîte de dépôt mais elle fonctionnera si elle est exécutée sur un vrai serveur Web. Testé sur le serveur de développement Visual Studio et Google Chrome.

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

But:

49 objets leet = 49

Bonus de capitalisation = 5 * 49 = 245

bonus de recherche de dictionnaire = 20 * 49 = 980

bonus d'exclamation * 3 = 90 * 49 = 4410

(objets leet + bonus) * 10 / (longueur du code)

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

Code:

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

Non golfé:

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

Résultats de test:

  • | - | 3 15 $ | _ | (# @ n00b ====> C'est un débutant
  • @ 1 // 4Y5 p0 $ + ur n3VV qu35710nz 1n teh $ & 80x ====> Postez toujours vos nouvelles questions dans le bac à sable
  • !!! 1 !! 1 ====> !!!!!!!
  • !!!une! ====> !!!!!
  • ! eleven ====> !!!
  • teh !!! 1 !! 1 ====> Le !!!!!!!
  • teh !!! un! ====> Le !!!!!
  • teh! eleven ====> Le !!!
  • teh !!! 1 !! 1 ====> Le !!!!!!!
  • qu35710nz! 1! ====> Questions !!!
  • +357 +357. 735+ ====> Test de test. Tester
  • & 31! 73 # 4 (KER $ WR0 + 3 83773R L! K3 + #! 5 7 # @ N 2D @ Y ====> Et les pirates d'élite ont mieux écrit comme ça qu'aujourd'hui

Remarques:

Le dictionnaire est un fichier javascript séparé avec un objet appelé W contenant tous les mots. Cela contient juste les mots dont j'avais besoin pour exécuter les tests pertinents.

rdans
la source
Si vous exécutez cela via le compilateur de fermeture, il n'y a que 1640 caractères, ce qui porte votre score à 34.
AMK
que fait ce fichier? dl.dropboxusercontent.com/u/141246873/leettranslator/… est-ce juste pour obtenir un dictionnaire sur le Web? (c.-à-d. le programme peut-il s'exécuter en utilisant W.jss'il est supprimé)
@professorfish c'est une lib js externe avec un dictionnaire (mots jusqu'à dix lettres). Il n'est utilisé que si l'option «vrai dictionnaire» est sélectionnée sur la démo. C'est juste pour une démo avec un meilleur dictionnaire et ne fait pas partie de ma réponse officielle.
rdans
6

Haskell - Score 1,421421421: (37 éléments + (21 bonus (capitalisation) * 5)) * 10 / (999 octets)

Ceci est ma réponse finale.

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

Les tests

Lorsque le programme est compilé dans un fichier nommé min-lt, vous pouvez écrire le script shell suivant

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

qui imprimera ce

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
la source
par -ks-je voulais dire ksau milieu d'un mot. Je vais y jeter un œil dès que je trouverai un compilateur haskell
Installez simplement le haskell-platformpaquet. Avez-vous un exemple pour ks?
gxtaillon
<insertnamehere> rocXouroX
Je l'ai testé, ça fonctionne
1
Mise à jour de ma réponse avec un score et une meilleure gestion de la traduction des mots.
gxtaillon
6

BrainFuck étendu : 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+))

Cela fait donc 15 traductions "$ (5 @ 437 + # 0821! &", Pas de bonus et il a 222 octets (sauts de ligne non inclus non inclus). 15 * 10/222 = 0,6757

Usage:

%> 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 n'est pas vraiment fait pour le golf, mais sa fonction Rle, ses macros et sa fonction de chaîne d'impression le rendent un peu plus facile à compresser que BrainFuck. Le binaire BrainFuck compilé à la fin ressemble à ceci:

>>,[-<+<+>>]<[>++++++[-<------>]+<+++[--[-[--[--[---[-----[-[-[-[-[-[--[-[--------[[-]
>[-]<<.>]>[->++++++++[-<++++++++>]<+.[-]]<]>[->++++++++[-<++++++++>]<++.[-]]<]>[->++++
+++++[-<+++++++++>]<+++.[-]]<]>[->+++++++++[-<+++++++++>]<++.[-]]<]>[->++++++++[-<++++
++++>]<+.[-]]<]>[->++++++++[-<+++++++++>]<---.[-]]<]>[->+++++++++[-<+++++++++>]<+++.--
---.[-]]<]>[->++++++++[-<+++++++++>]<++++.[-]]<]>[->+++++++++[-<+++++++++>]<--.[-]]<]>
[->+++++++++[-<+++++++++>]<+++.[-]]<]>[->++++++++[-<++++++++>]<+++.[-]]<]>[->++++++++[
-<++++++++>]<+.+++++++++++++.----------.[-]]<]>[->+++++++++[-<+++++++++>]<++.[-]]<]>[-
>++++++++[-<+++++++++>]<.[-]]<]>[->++++++++[-<+++++++++>]<+.[-]]<[-]<[-]>>,[-<+<+>>]<]
Sylwester
la source
1
Le code BF compilé semble bien fonctionner, il semble assez court pour un programme BF
@professorfish Utilisation ~"OTLHEAND"J'ai pu créer tous les caractères une fois pour un code objet de 107 octets au lieu de les faire à partir de 0 à chaque fois en utilisant 354, mais ma réponse est optimisée pour la taille du code 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);}}

Il fait donc les transformations suivantes

+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

Le calcul du score est délicat

  • (objets leet + bonus) * 10 / (longueur du code)
  • longueur du code = 1165 leet
  • articles en leet = 39 (unique)
  • bonus = 21 (je ne sais pas comment calculer MomemtumMori ainsi copié) (Veuillez aviser)

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

Code non golfé:

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
la source
2
Cela vous dérangerait-il de ne pas le golfer? : D
Knerd
0

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

Le programme peut sortir presque toutes les lettres minuscules et majuscules. Comme je n'utilise pas de liste de mots anglais, la première clé trouvée dans le dictionnaire est utilisée. Par exemple, \ / \ / devient vav. Si char est la première lettre d'un mot, ToUpper est appliqué.

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

Voici ma sortie de test:

$ -> 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
la source