Leet 'den İngilizce' ya Çeviri


23

Buradaki zorluk, (İngilizce) leetspeak / lolspeak / txtspk 'u normal İngilizce' ye çevirmek için bir program yazmaktır. Diliniz desteklemiyorsa, programınız standart girdiden çıktıdan standart çıktıya okunmalıdır.

İngilizce dilinde, sözcüklerin listesini içeren ve yeni satırlarla ayrılmış bir dosya kullanabilirsiniz. Çağrılmalıdır Wve programınızla aynı dizinde bulunacaktır. (GNU / Linux sistemlerinde ve muhtemelen başkalarında Wbağlantı kurabilirsiniz /usr/share/dict/words) Liste tamamen küçük olmak zorunda değildir, kelimelerin büyük harfleri olup olmadığını belirlemek için kullanabilirsiniz.

Bu, burada bulunabilecek olan Nikos M. tarafından yayınlanan ve şimdi silinmiş bir soruyu temel almaktadır . Bu orijinal soru kapatıldığı ve herhangi bir cevap alamadığı için bu bir yineleme değildir, çünkü kazanan bir kriter yoktur ve kullanıcı bir tane koymak istememektedir.

puanlama

Puanlama biraz karmaşık!

skorunuz

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

En yüksek puan kazanır.

Programınızın olması gerekmiyor ve muhtemelen mükemmel olamaz, ama ne kadar doğru olursa, o kadar fazla bonus kazanır!

Yana $hem anlamına gelebilir sve S, bunu bir harf (cümle başında yani büyük harfler) sahip olup olmayacağını karar vermek için leet ürün başına 5 puan bonus olsun.

Uygun isimleri (her zaman büyük harfleri olan kelimeler) uygulamak için leet öğesi başına 5 puan daha fazla bonus alırsınız - bu şekilde çalışır, kelime listesine bakarsınız, yalnızca büyük harfli bir sürüm varsa çıktıyı büyük harfle yaz. Her iki sürümde varsa, sadece tahmin

Bir karakter (örneğin iki anlamı varsa 1anlamına gelebilir Lya I), sadece gerçek İngilizce kelimeleri yapmak öğenin bu çeviriler toplama için leet ürün başına 20 puan almak - Bunun için wordlist kullanın. Bir leet öğesinin birden fazla çevirisi gerçek bir İngilizce kelime yapıyorsa, keyfi olarak geçerli çevirilerden birini seçebilir ve hala bonus kazanabilirsiniz.

Leet Listesi

Bunlar uygulayabileceğiniz pırasa öğeleridir. Hepsini uygulamak zorunda değilsiniz, ama ne kadar çok eklerseniz o kadar çok puan kazanırsınız.

Bir öğeyi veya karakteri kendine çevirerek puan kazanamazsınız. Bu kural, listede yapmış olabileceğim hataları geçersiz kılar.

Basit trya da yapmak için cazip s/.../.../g. Asıl zorluk, birden fazla anlamdan hangisinin doğru olduğunu ve kelime listesini kullanarak yapamayacağının belirlenmesidir.

Pırasa Öğeleri (bunların her biri leet itemsformülde 1'e ekler )

$ -> s, S
(-> c, C
5 -> s, S
@ -> a, A
4 -> a, A
3 -> e, E
7 -> t, T
+ -> t, T
# -> h, H
teh ->
'd -> ed
Pwnd -> Pwned
pwnt -> kıkırdadı
k, K -> Tamam
kk -> Tamam
0 [sıfır] -> o, O
y, Y -> neden
4 -> için
txt -> metin
dafuq -> ne f ** k
/ \, ^ -> a, A
\ / -> v, V
d00d -> dostum
n00b -> acemi
\ / \ / -> w, W
8 -> b, B
| _ | -> sen, U
| - | -> h, H
Я -> r, R
j00 -> siz
joo -> sen
vv, VV -> w, W
tomoz -> yarın
| <-> k, K
[), |) -> d, D
<3 -> aşk
> <-> x, X
10100111001 -> Leet (1337'nin ikili gösterimi)
2 -> ila
ur, UR -> sizin, siz (ikisi arasında doğru şekilde ayrım yapmanıza gerek yok)
sen -> sen
8 -> -ate-, 8
x, X -> -ks -, - cks-
z, Z -> s, S
1 -> ben, ben, ben
! -> Ben, ben!
c, C -> görmek, C, deniz
b, B -> olmak, B, arı
[vurgulu mektup] -> [vurgulu olmayan form] (vurgulu mektup başına 1 puan desteklenir)
&, 7 -> ve, tavlanmış, karınca (bir kelimenin ortasında kullanılabilir)

Zor "Leet": leet itemsHer biri için 30 puan

!!! 1 !! 1-> !!!!!!! (1 'in!' in dizisine çevrilmesi!)
!!! one! -> !!!!!
! onbir-> !!!

Örnekler

Bunlar, yukarıdaki tüm karakter karakterlerini uygulayan bir programın ve bazı bonusların neler yapabileceğinin örnekleridir:

Örnek cümle: |-|3 15 $|_|(# @ n00b=He is such a newbie

Leet tabanlı sansür: $#!+=s**t

Aşırı leet: \/\/ 1 |< 1 P 3 [) 1 A=Wikipedia

-xor soneki: H4X0R=hacker

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

Örnek Puanlama

Bash, 10 karakter, 3 öğe, bonus yok:

tr 137 let

Bu puanlar ( 1 * 3 ) * 10 / 10 = 3.


Üzgünüm sanal alanda bu anlayamadım ama 10 ile ikramiye çarparak eğer bunlar hala çok daha fazla kelimelerin kendisi yerine değer. Amacın bu mu?
Martin Ender

@ m.buettner Sadece trya da kullanarak mücadele etmek s/.../.../g. Sadece bunun gibi şeyleri çevirmek sıkıcı bir zorluk yaratacaktır, bu yüzden

Uzun bir dizi regexps izin verilebilir mi? Çoğunlukla regexps bağlamında farkında bir şekilde bile bunu yapmak mümkün (zor olsa da) görmek isterdim. (Ya da belki bir sedsenaryo.)
Isiah Meadows

Bir sedkomut dosyası derken , basitten daha fazlasını kastediyorum s/.../.../g, ancak sedkendisi tarafından ayrıştırılan ve yürütülen bir dosya . Dil gibi kısa, iyi bir golf yapılabilir dil olabilir ...
Isiah Meadows

@ impinball Regexes kesinlikle gayet iyi, ancak kelime listesini nasıl açacağınızı ve yalnızca bir regex dili ile nasıl ayrıştıracağınızı bilmiyordum. sedkomut dosyaları da iyidir ve çok ilginç olabilirler, kısa ikame sözdizimi nedeniyle bu konuda çok başarılı olabilirlerdi, GNU uzantılarıyla veya seddaha büyük bir Bash programının parçası olarak kullanarak sözcük listesinden okuyabilirsiniz.

Yanıtlar:


11

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

Çevrimiçi Demo:

"Gerçek sözlük" seçeneği açılan kutuda çalışmaz ancak gerçek bir web sunucusunda çalıştırıldığında çalışır. Görsel stüdyo geliştirme sunucusu ve Google Chrome'da test edilmiştir.

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

Gol:

49 leet eşyası = 49

Büyük harf kullanımı bonusu = 5 * 49 = 245

sözlük arama bonusu = 20 * 49 = 980

ünlem bonusu * 3 = 90 * 49 = 4410

(leet eşyalar + bonuslar) * 10 / (kod uzunluğu)

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

Ungolfed:

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

Test sonuçları:

  • | - | 3 15 $ | _ | (# @ n00b ====> O böyle bir acemi
  • @ 1 // 4Y5 p0 $ + ur n3VV qu35710nz 1n $ & 80x ====> Yeni sorularınızı her zaman sanal alana gönderin
  • !!! 1 !! 1 ====> !!!!!!!
  • !!!bir! ====> !!!!!
  • ! eleven ====> !!!
  • teh !!! 1 !! 1 ====> The !!!!!!!
  • Teh !!! tane! ====> !!!!!
  • teh! eleven ====> !!!
  • teh !!! 1 !! 1 ====> The !!!!!!!
  • qu35710nz! 1! ====> Sorular !!!
  • +357 +357. 735+ ====> Test testi. Ölçek
  • & 31! 73 # 4 (KER $ WR0 + 3 83773R L! K3 + #! 5 7 # @ N 2D @ Y ====> Elit bilgisayar korsanları bu şekilde daha iyi yazdı

Notlar:

Sözlük, tüm kelimeleri içeren W isimli bir nesne içeren ayrı bir javascript dosyasıdır. Bu sadece ilgili testleri yapmak için ihtiyacım olan kelimeleri içeriyor.


Eğer bunu Closure Compiler'den geçirirseniz puanınız 34'e
çıkacak

Bu dosya ne işe yarar? dl.dropboxusercontent.com/u/141246873/leettranslator/… sadece web'den bir sözlük almak için mi? (yani program W.jskaldırılmışsa program çalıştırabilir )

@professorfish, harici bir js'nin içinde bir sözlük bulunan bir kütüphaneyi (on harften oluşan kelimeler) ifade eder. Demoda 'gerçek sözlük' seçeneği seçiliyse kullanılır. Bu sadece benim resmi cevabımın bir parçası değil, daha iyi bir sözlük içeren bir demo için.
Haziran'da

6

Haskell - Puan 1.421421421: (37 öğe + (21 bonus (büyük harf) * 5)) * 10 / (999 bayt)

Bu benim son cevabım.

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

Testler

Program adlı bir dosyaya derlendiğinde min-lt, aşağıdaki kabuk betiğini yazabilirsiniz.

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

bu yazdıracak

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"

tarafından -ks-Demek ksbir kelimenin ortasında. Bir

Sadece haskell-platformpaketi kur . Bir örneğiniz var ksmı?
gxtaillon

<insertnamehere> rocXveyaroX

Test ettim, çalışıyor

1
Cevabımı skorla ve kelime çevirisini daha iyi ele alarak güncellendi.
gxtaillon

6

Genişletilmiş 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+))

Böylece 15 çeviri "$ (5 @ 437 + # 0821! &", Bonus yok ve 222 bayt var (zorunlu satır beslemeleri dahil değil). 15 * 10/222 = 0.6757

Kullanımı:

%> 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, golf oynamak için gerçekten yapılmamıştır, ancak gerçek özelliği, makrolar ve baskı dizisi özelliği, sıkıştırmayı BrainFuck'tan biraz daha kolay hale getirir. Son derlenen BrainFuck ikilisi şöyle görünür:

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

1
Derlenmiş BF kodu iyi çalışıyor gibi görünüyor, bir BF programı için oldukça kısa görünüyor

@professorfish Kullanma ~"OTLHEAND"Her karakter 354 kullanarak 0'dan yapmak yerine 107 bayt nesne kodu için bir kez tüm karakterleri yapabilirdim, ancak cevabım EBF kod boyutu için optimize edildi :)
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);}}

Yani aşağıdaki dönüşümleri yapar

+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

Puan hesaplaması zor

  • (leet eşyalar + bonuslar) * 10 / (kod uzunluğu)
  • kod uzunluğu = 1165 leet
  • leet eşyaları = 39 (benzersiz)
  • bonus = 21 (bu şekilde kopyalanan MomemtumMori'nin nasıl hesaplanacağını bilmiyorum) (Lütfen tavsiye et)

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

Golfsüz kod:

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
Unolfing sakıncası var mı? : D
Knerd

0

C # puanı 45 * 10/2556 = 0,176

Program neredeyse tüm küçük ve büyük harfleri çıkarabilir. İngilizce kelime listesi kullanmadığım için Sözlük'te bulunan ilk anahtar kullanılıyor. Örneğin, \ / \ / vav olur. Char bir kelimenin ilk harfi ise ToUpper uygulanır.

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

İşte benim test çıktım:

$ -> 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 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.