リートから英語への翻訳


23

あなたの課題は、(英語の)leetspeak / lolspeak / txtspkを通常の英語に翻訳するプログラム書くことです。ご使用の言語がこれらをサポートしていない場合を除き、プログラムは標準入出力から標準出力に読み込む必要があります。

新しい行で区切られた英語の単語のリストを含むファイルを使用できます。呼び出す必要がWあり、プログラムと同じディレクトリに配置されます。(GNU / Linuxシステムおよびおそらく他のシステムではW、リンクを作成できます/usr/share/dict/words)リストはすべて小文字である必要はなく、単語を大文字にするかどうかを判断するために使用できます。

これは、Nikos M.によって投稿された、現在削除されている質問に基づいています。この元の質問は閉じられており、回答を受け取らなかったため、これは重複ではありません。これは、勝者の基準がなく、ユーザーがそれを入力したくないためです。

得点

得点は少し複雑です!

あなたのスコアは

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

最高スコアが勝ちます。

あなたのプログラムは必ずしもそうである必要はなく、おそらく完璧ではありませんが、それが正確であるほど、より多くのボーナスが得られます!

以来$、両方を意味することができますsS、あなたはそれが大文字(文章の開始時、すなわち大文字)を持つべきであるかどうかを決定するためのすご腕の項目ごとに5ポイントのボーナスを得ます。

適切な名詞(常に大文字の単語)を実装すると、リートアイテムごとに5ポイントのボーナスが追加されます-これが機能する方法は、単語リストに目を通し、リスト、両方のバージョンが存在する場合は、単に推測します。

文字に2つの意味がある場合(例:または1を意味できる)、リートアイテムごとに20ポイントを獲得します。実際の英語の単語を作成するアイテムの翻訳のみを選択すると、ワードリストを使用できます。リートアイテムの複数の翻訳が実際の英語の単語を作成する場合、有効な翻訳の1つを任意に選択しても、ボーナスを受け取ることができます。LI

リートのリスト

これらは、実装できるリートアイテムです。すべてを実装する必要はありませんが、追加するほどポイントが増えます。

アイテムやキャラクターを自分自身に翻訳してポイントを獲得することはできません。この規則は、リストで私が犯したかもしれない間違いを無効にします。

単純なtrまたはを行うのは魅力的s/.../.../gです。本当の課題は、単語リストを使用して、複数の意味のどれが正しいかどうかを判断することです。

リートアイテム(これらはそれぞれleet items式に1を追加します)

$-> s、S
(-> c、C
5-> s、S
@-> a、A
4-> a、A
3-> e、E
7-> t、T
+-> t、T
#-> h、H
テ->
'd-> ed
pwnd-> pwned
pwnt-> pwned
k、K-> OK
kk-> OK
0 [ゼロ]-> o、O
y、Y->なぜ
4->の
txt->テキスト
dafuq-> what the f ** k
/ \、^-> a、A
\ /-> v、V
d00d->男
n00b->初心者
\ / \ /-> w、W
8-> b、B
| _ | -> u、U
|-| -> h、H
Я-> r、R
j00->あなた
ジョー->あなた
vv、VV-> w、W
tomoz->明日
| <-> k、K
[)、|)-> d、D
<3->愛
> <-> x、X
10100111001->リート(1337のバイナリ表現)
2-> to、too
ur、UR-> your、you's(2つを正しく区別する必要はありません)
u、U->あなた
8-> -ate-、8
x、X-> -ks-、-cks-
z、Z-> s、S
1-> i、I、l、L
!->私、私、!
c、C-> see、C、sea
b、B-> be、B、bee
[アクセント記号付き文字]-> [アクセント記号なしの形式](アクセント記号付き文字ごとにスコア1をサポート)
&、7-> and、anned、ant(単語の途中で使用される場合があります)

より難しい「リート」:leet items各30ポイントを獲得

!!! 1 !! 1-> !!!!!!! (!のシーケンスの1を!に変換します)
!!! one!-> !!!!!
!11-> !!!

これらは、上記のすべてのリートキャラクターといくつかのボーナスを実装するプログラムができることの例です。

例文:|-|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

スコアリングの例

Bash、10文字、3アイテム、ボーナスなし:

tr 137 let

これは得点し( 1 * 3 ) * 10 / 10 = 3ます。


申し訳ありませんが、私はサンドボックスでこれをキャッチしていないが、あなたは10でボーナスを乗算している場合、彼らはまだ多くの言葉そのものよりも価値があります。それはあなたの意図ですか?
マーティンエンダー

@ m.buettner trまたはを使用して単純に戦うことですs/.../.../g。そのようなことを翻訳するだけでは退屈な挑戦になるので、ワードリストを使用するより良い翻訳に報酬を与える必要があります

長い一連の正規表現は許可されますか?ほとんどの正規表現でコンテキストを意識した方法でこれを行うことが可能かどうか(難しいとはいえ)を確認したいと思います。(またはsedスクリプトかもしれません。)
イサイアメドウズ

sedスクリプトを言うとき、私は単純な以上のものを意味s/.../.../gしますが、sedそれ自体が解析され実行されるファイルです。言語として簡潔であるため、それはまともなgolfable言語...かもしれない
アイザイアメドウズ

@impinball正規表現はまったく問題ありませんが、どのようにワードリストを開いて正規表現だけで解析するのかわかりません。sedスクリプトも素晴らしいし、非常に興味深いかもしれません。短い置換構文のために非常にうまくいきますsed

回答:


11

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

オンラインデモ:

「リアルディクショナリ」オプションはドロップボックスでは機能しませんが、実際のWebサーバーで実行すると機能します。Visual Studio開発サーバーとGoogle Chromeでテスト済み。

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

スコア:

49リートアイテム= 49

大文字のボーナス= 5 * 49 = 245

辞書検索ボーナス= 20 * 49 = 980

感嘆ボーナス* 3 = 90 * 49 = 4410

(リートアイテム+ボーナス)* 10 /(コード長)

(49 + 5635)* 10/2174 = 26.14

コード:

function IsInDict(e) { return W[e] } function translate(e) { words = e.split(" "); res = ""; for (var t in words) { ex = ""; function n(e, r, i) { var s = false; for (var o = 1; o <= e.length; o++) { var u = e.substring(0, o) === "!" || i; var a = et[e.substring(0, o)]; var f = e.substring(o); if (a) { s = true; if (f.length === 0) { if (u) { ex = r + a; words[t] = "" } } else n(f, r + a, u) } } if (i && !s && r) { ex = r; words[t] = e.split("").reverse().join("") } } n(words[t].split("").reverse().join(""), "", false); mes = []; function r(e, t) { for (var n = 1; n <= e.length; n++) { var i = tokens[e.substring(0, n)]; var s = e.substring(n); if (i) { mFound = true; if (s.length === 0) for (var o in i) { mes.push(t + i[o]) } else for (var o in i) r(s, t + i[o]) } } if (e.length > 1) r(e.substring(1), t + e.substring(0, 1)); else { mes.push(t + e) } } m = ""; if (words[t] !== "") { r(words[t].toLowerCase(), ""); if (mes.length === 1) m = mes[0]; else { sl = []; for (var i in mes) { if (IsInDict(mes[i].slice(-1) === "." ? mes[i].substring(0, mes[i].length - 1) : mes[i])) { sl.push(mes[i]) } } if (sl.length > 0) m = sl[0]; else m = mes[0] } if (res === "") { m = cap(m) } if (res.slice(-1) === ".") { m = cap(m) } } res += " " + m; if (ex !== "") res += ex } return res.trim() } function cap(e) { return e.charAt(0).toUpperCase() + e.slice(1) } tokens = { $: ["s"], "(": ["c"], 5: ["s"], "@": ["a"], 4: ["a", "for"], 3: ["e"], "+": ["t"], "#": ["h"], teh: ["the"], "'d": ["ed"], pwnd: ["pwned"], pwnt: ["pwned"], k: ["ok"], kk: ["ok"], 0: ["o"], y: ["why"], txt: ["text"], dafuq: ["what the f**k"], "/\\": ["a"], "^": ["a"], "\\/": ["v"], d00d: ["dude"], n00b: ["newbie"], "\\/\\/": ["w"], 8: ["b", "ate"], "|_|": ["u"], "|-|": ["h"], "Я": ["r"], j00: ["you"], joo: ["you"], vv: ["w"], tomoz: ["tomorrow"], "|<": ["k"], "[)": ["d"], "|)": ["d"], "<3": ["love"], "><": ["x"], 10100111001: ["leet"], 2: ["to", "too"], ur: ["your", "you're"], u: ["you"], x: ["ks", "cks"], z: ["s"], 1: ["i", "l"], "!": ["i"], c: ["see", "sea"], b: ["be", "bee"], "&": ["and", "anned", "ant"], 7: ["and", "anned", "ant", "t"] }; et = { eno: "!", nevele: "!!", 1: "!", "!": "!" }

ゴルフをしていない:

            tokens={
            '$':['s'],'(':['c'],'5':['s'],'@':['a'],'4':['a','for'],'3':['e'],'+':['t'],'#':['h'],'teh':['the'],"'d":['ed'],'pwnd':['pwned'],
            'pwnt':['pwned'],'k':['ok'],'kk':['ok'],'0':['o'],'y':['why'],'txt':['text'],'dafuq':['what the f**k'],
            '/\\':['a'],'^':['a'],'\\/':['v'],'d00d':['dude'],'n00b':['newbie'],
            '\\/\\/':['w'],'8':['b','ate'],'|_|':['u'],'|-|':['h'],'Я':['r'],'j00':['you'],
            'joo':['you'],'vv':['w'],'tomoz':['tomorrow'],'|<':['k'],'[)':['d'],'|)':['d'],'<3':['love'],
            '><':['x'],'10100111001':['leet'],'2':['to','too'],'ur':["your","you're"],
            'u':['you'],'x':['ks','cks'],'z':['s'],'1':['i','l'],'!':['i'],'c':['see','sea'],
            'b':['be','bee'],'&':['and','anned','ant'],'7':['and','anned','ant','t']}
            var excTokens = {'eno':'!','nevele':'!!','1':'!','!':'!'}

            function IsInDict(word)
            {
                return (W[word]);
            }

            function translate(input) {
                var words = input.split(" ");
                var result = "";
                for (var i in words) {
                    var exclamations = "";
                    function parseExclamations(s, prev, exclamationFound) {
                        var matchFound = false;
                        for (var j = 1; j <= s.length; j++) {
                            var hasExclamation = (s.substring(0, j) === "!") || exclamationFound;
                            var currentToken = excTokens[s.substring(0, j)];
                            var remaining = s.substring(j);
                            if (currentToken) {
                                matchFound = true;
                                if (remaining.length === 0) {
                                    if (hasExclamation) {
                                        exclamations = prev + currentToken;
                                        words[i] = "";//word only had exclamations in it so dont parse the rest of it
                                    }
                                }
                                else
                                    parseExclamations(remaining, prev + currentToken, hasExclamation);
                            }
                        }
                        if (exclamationFound && !matchFound && prev) {
                            exclamations = prev;
                            words[i] = s.split("").reverse().join("");//reverse back again
                        }
                    }
                    var reverseWord = words[i].split("").reverse().join("");
                    parseExclamations(reverseWord, "", false);

                    var matches = []
                    function parse(s, prev) {
                        for (var j = 1; j <= s.length; j++) {
                            var currentTokenArray = tokens[s.substring(0, j)];
                            var remaining = s.substring(j);
                            if (currentTokenArray) {
                                matchFound = true;
                                if (remaining.length === 0)
                                    for (var k in currentTokenArray) {
                                        matches.push(prev + currentTokenArray[k]);
                                    }
                                else
                                    for (var k in currentTokenArray)
                                        parse(remaining, prev + currentTokenArray[k]);
                            }
                        }

                        if (s.length > 1)
                            parse(s.substring(1), prev + s.substring(0, 1));
                        else {
                            matches.push(prev + s);
                        }
                    }

                    var match = "";
                    if (words[i] !== "") {
                        parse(words[i].toLowerCase(), "");

                        //check the dictionary
                        if (matches.length === 1)
                            match = matches[0];
                        else {
                            var shortlist = [];
                            for (var j in matches) {
                                //check dictionary. allow for a full stop at the end of the word
                                var isInDict = IsInDict(matches[j].slice(-1) === "." ? matches[j].substring(0, matches[j].length - 1) : matches[j]);
                                if (isInDict) {
                                    shortlist.push(matches[j]);
                                }
                            }

                            if (shortlist.length > 0)
                                match = shortlist[0];
                            else
                                match = matches[0];
                        }
                        if (result === "") {
                            match = cap(match);
                        }
                        if (result.slice(-1) === ".") {
                            match = cap(match);
                        }
                    }
                    result += " " + match;

                    if (exclamations !== "")
                        result += exclamations;
                }

                return result.trim();
            }

            function cap(string) {
                return string.charAt(0).toUpperCase() + string.slice(1);
            }

試験結果:

  • |-| 3 15 $ | _ |(#@ n00b ====>彼はそんな初心者です
  • @ 1 // 4Y5 p0 $ + ur n3VV qu35710nz 1n teh $&80x ====>新しい質問は常にサンドボックスに投稿してください
  • !!! 1 !! 1 ====> !!!!!!!
  • !!!1!====> !!!!!
  • !eleven ====> !!!
  • teh !!! 1 !! 1 ====> The !!!!!!!
  • !!!!!! ====> !!!!!
  • teh!eleven ====> The !!!
  • !!! 1 !! 1 ====> !!!!!!!
  • qu35710nz!1!====>質問!!!
  • +357 +357。735+ ====>テストテスト。テスト
  • &31!73#4(KER $ WR0 + 3 83773R L!K3 +#!5 7#@ N 2D @ Y ====>そして、エリートハッカーは今日よりもこのように書いた

ノート:

辞書は、すべての単語を含むWと呼ばれるオブジェクトを備えた別個のJavaScriptファイルです。これには、関連するテストを実行するために必要な単語が含まれています。


あなたが閉鎖コンパイラによってこれを実行する場合は、34にあなたのスコアをもたらすだけで1640文字です
AMK

このファイルは何をしますか?dl.dropboxusercontent.com/u/141246873/leettranslator/…ウェブから辞書を取得するだけですか?(つまりは、プログラムが使用して実行することができW.js、それが削除された場合)

@professorfishは、辞書(最大10文字の単語)を含む外部js libです。デモで「実際の辞書」オプションが選択されている場合にのみ使用されます。これは、より良い辞書を使用したデモ用であり、公式の回答の一部ではありません。
ルダン14年

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 14年

6

拡張BrainFuck:0.6757

{a[-])&d}{c(-(-}{d)$t(-}:r:i:t$t,(-$i+$r+)$i($t 6+(-$i 5--)+$i 3+(--&c-(--
(3-(5-&c&c&c-&c--5-((-&d)$r.&d|"A"&a|"B"&a|"T"&a|"S"&a|"A"&a|"E"&a|"TO"&a
|"L"&a|"O"&a|"T"&a|"C"&a|"AND"&a|"S"&a|"H"&a|"I"(-))$i(-)$r(-)$t,(-$i+$r+))

したがって、これは15個の翻訳 "$(5 @ 437 +#0821!&"、ボーナスなし、222バイト(不要な改行は含まれません)を持っています。15* 10/222 = 0.6757

使用法:

%> beef ebf.bf < leet.ebf > leet.bf
%> echo '& 31337 #4(KER$ WR0+3 83773R L!K3 +#!5 7#@N 2D@Y' | beef  leet.bf
AND ELEET HACKERS WROTE BETTER LIKE THIS THAN TODAY
%>

EBFは実際にはゴルフ用に作られていませんが、rle機能、マクロ、および印刷文字列機能により、BrainFuckよりも圧縮が多少簡単になります。最終的にコンパイルされたBrainFuckバイナリは次のようになります。

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

1
コンパイルBFコードが正常に動作するようだ、それはBFプログラムのためにかなり短い見えます

@professorfishを使用する~"OTLHEAND"と、354を使用するたびに0からオブジェクトコードを作成する代わりに、107バイトのオブジェクトコードに対してすべての文字を1回作成できますが、私の答えは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);}}

以下の変換を行います

+357 +357. 735+
test test. test
|-|3 15 $|_|(# @ n00b
he is such a newbie
$#!+
shit
\/\/ 1 |< 1 P 3 [) 1 A
w i k i P e d i A
@1\/\/4Y5 p0$+ ur n3VV qu35710nz 1n teh $&80x
aiwaYs post ur new questionz in the sandbox
& 31337 #4(KER$ WR0+3 83773R L!K3 +#!5 7#@N 2D@Y
and eieet hacKERs WRote betteR LiKe this thaN toDaY

スコアの計算は難しい

  • (リートアイテム+ボーナス)* 10 /(コード長)
  • コード長= 1165リート
  • リートアイテム= 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
ケナー14年

0

C#スコア45 * 10/2556 = 0.176

プログラムは、ほとんどすべての大文字と小文字を出力できます。私は英語の単語リストを使用していないので、辞書にある最初のキーが使用されます。たとえば、\ / \ /はvavになります。charが単語の最初の文字である場合、ToUpperが適用されます。

using System;
using System.Collections.Generic;
class L
{
Dictionary<string, string> D;        
public L() 
{ 
D = new Dictionary<string, string>();
M();
}
public void M()
{
D.Add("$", "s,S");
D.Add("(", "c,C");
D.Add("5", "s,S");
D.Add("@", "a,A");
D.Add("4", "a,A,for");
D.Add("3", "e,E");
D.Add("7", "t,T,and,anned,ant");
D.Add("+", "t,T");
D.Add("#", "h,H");
D.Add("teh", "the");
D.Add("'d", "ed");
D.Add("pwnd", "pwned");
D.Add("pwnt", "pwned");
D.Add("k", "OK");
D.Add("K", "OK");
D.Add("kk", "OK");
D.Add("0", "o,O");
D.Add("y", "why");
D.Add("Y", "why");
D.Add("txt", "text");
D.Add("dafuq", "what the f**k");
D.Add("\\/\\/", "w,W");
D.Add("/\\", "a,A");
D.Add("^", "a,A");
D.Add("\\/", "v,V");
D.Add("d00d", "dude");
D.Add("n00b", "newbie");       
D.Add("8", "b,B,ate,8");
D.Add("|_|", "u,U");
D.Add("|-|", "h,H");
D.Add("j00", "you");
//Я      -> r,R
D.Add("joo", "you");
D.Add("vv", "w,W");
D.Add("VV", "w,W");
D.Add("tomoz", "tomorrow");
D.Add("|<", "k,K");
D.Add("[)", "d,D");
D.Add("|)", "d,D");
D.Add("<3", "love");
D.Add("><", "x,X");
D.Add("2", "to,too");
//10100111001       -> leet (binary representation of 1337)
D.Add("ur", "your,you're");
D.Add("UR", "your,you're");
D.Add("u", "you");
D.Add("U", "you");
D.Add("x", "ks,cks");
D.Add("X", "ks,cks");
D.Add("z", "s,S");
D.Add("Z", "s,S");
D.Add("1", "i,I,l,L");
D.Add("!", "i,I,!");
D.Add("c", "see,C,sea");
D.Add("C", "see,C,sea");
D.Add("b", "be,B,bee");
D.Add("B", "be,B,bee");
//[accented letter] -> [non-accented form] (score 1 per accented letter supported)
D.Add("&", "and,anned,ant");
}

int P(string K, out List<string> V)
{
V = new List<string>();
string v,comma=",";
if(D.TryGetValue(K,out v))
{
string[] vv = v.Split(comma.ToCharArray());
foreach(string s in vv)
{
V.Add(s);
}
}
return V.Count;
}

public string E(string X)
{
string e ="";
string S = " ",t,k="";
string[] W = X.Split(S.ToCharArray());
int n = 0,x=0,m=0;
List<string> V=new List<string>();
bool F = false;
foreach(string s in W)
{
n = s.Length;
F = false;
for (int i = 0; i < n; i++)
{
m = 0;
for (int j = 1; j < n - i+1; j++)
{
k = s.Substring(i, j);
x = P(k, out V);
if (x > 0)
{
t = V[0];
if (t.Length == 1 && i == 0)
t = t.ToUpper();
e += t;
m = t.Length;
F = true;
break;
}
}
if (m > 0) i += (m - 1);
}
e += S;
}
return e;
}
static void Main(string[] a)
{
string t = Console.ReadLine();
L x = new L();
t = x.E(t);
Console.WriteLine(t);
Console.ReadLine();
}
}

テスト出力は次のとおりです。

$ -> S 
( -> C 
5 -> S 
@ -> A 
4 -> A 
3 -> E 
7 -> T 
+ -> T 
# -> H 
teh -> the 
'd -> ed 
pwnd -> pwned 
pwnt -> pwned 
k -> OK 
K -> OK 
0 -> O 
y -> why 
Y -> why 
4 -> A 
txt -> text 
dafuq -> what the f**k 
/\ -> A 
^ -> A 
\/ -> V 
d00d -> dude 
n00b -> newbie 
\/\/ -> Vav 
8 -> B 
|_| -> U 
|-| -> H 
j00 -> you 
joo -> you 
vv -> W 
VV -> W 
tomoz -> tomorrow 
|< -> K 
[) -> D 
|) -> D 
<3 -> love 
>< -> X 
2 -> to 
ur -> you 
UR -> you 
u -> you 
U -> you 
8 -> B 
x -> ks 
X -> ks 
z -> S 
Z -> S 
1 -> I 
! -> I 
c -> see 
C -> see 
b -> be 
B -> be 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.