แปลเป็นภาษาอังกฤษ


23

ความท้าทายของคุณคือการเขียนโปรแกรมเพื่อแปล (ภาษาอังกฤษ) leetspeak / lolspeak / txtspk เป็นภาษาอังกฤษทั่วไป โปรแกรมของคุณควรอ่านจากอินพุตมาตรฐานและเอาต์พุตไปยังเอาต์พุตมาตรฐานยกเว้นว่าภาษาของคุณไม่รองรับสิ่งเหล่านี้

คุณสามารถใช้ไฟล์ที่มีรายการคำในภาษาอังกฤษโดยคั่นด้วยบรรทัดใหม่ มันควรจะถูกเรียกWและจะอยู่ในไดเรกทอรีเดียวกับโปรแกรมของคุณ (บนระบบ GNU / Linux และอื่น ๆ คุณสามารถสร้างWลิงก์ได้/usr/share/dict/words) รายการไม่จำเป็นต้องเป็นตัวพิมพ์เล็กทั้งหมดคุณสามารถใช้มันเพื่อกำหนดว่าคำควรมีตัวพิมพ์ใหญ่หรือไม่

นี้จะขึ้นอยู่กับคำถามที่ตอนนี้ถูกลบโพสต์โดย Nikos เมตรซึ่งสามารถพบได้ที่นี่ สิ่งนี้ไม่ซ้ำกันเนื่องจากคำถามเดิมนี้ถูกปิดและไม่ได้รับคำตอบใด ๆ เนื่องจากไม่มีเกณฑ์การชนะและผู้ใช้ไม่ต้องการใส่

เกณฑ์การให้คะแนน

การให้คะแนนค่อนข้างซับซ้อน!

คะแนนของคุณคือ

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

คะแนนสูงสุดชนะ

โปรแกรมของคุณไม่จำเป็นต้องสมบูรณ์แบบและอาจจะไม่สมบูรณ์แบบ แต่ยิ่งแม่นยำก็ยิ่งได้รับโบนัสมากเท่านั้น!

เนื่องจาก$สามารถหมายถึงทั้งสองsและSคุณจะได้รับโบนัส 5 คะแนนต่อรายการ leet สำหรับการตัดสินใจว่าควรมีตัวพิมพ์ใหญ่หรือไม่ (เช่นอักษรตัวใหญ่ตอนเริ่มประโยค)

คุณจะได้รับโบนัสเพิ่มอีก 5 คะแนนต่อรายการ leet สำหรับการใช้คำนามที่เหมาะสม (คำที่มีตัวพิมพ์ใหญ่เสมอ) - วิธีการทำงานนี้คือคุณจะต้องมองผ่านรายการคำให้ทำผลลัพธ์เป็นตัวพิมพ์ใหญ่หากมีตัวพิมพ์ใหญ่อยู่ใน รายการและหากมีทั้งสองรุ่นเพียงแค่เดา

หากตัวละครมีสองความหมาย (เช่น1สามารถหมายถึงLหรือI) คุณจะได้รับ 20 คะแนนต่อรายการ leet สำหรับการเลือกเฉพาะการแปลของรายการที่ทำให้คำภาษาอังกฤษจริง - ใช้รายการคำสำหรับนี้ หากการแปลมากกว่าหนึ่งรายการของ leet ทำให้คำภาษาอังกฤษจริงคุณสามารถเลือกหนึ่งในการแปลที่ถูกต้องและยังคงได้รับโบนัส

รายชื่อ Leet

เหล่านี้เป็นรายการ leet ที่คุณอาจใช้ คุณไม่จำเป็นต้องปรับใช้ทั้งหมด แต่ยิ่งเพิ่มคะแนนยิ่งได้รับ

คุณไม่สามารถให้คะแนนคะแนนโดยการแปลรายการหรือตัวละครเป็นของตัวเอง กฎนี้แทนที่ความผิดพลาดใด ๆ ที่ฉันอาจทำในรายการ

มันดึงดูดให้ทำง่ายๆหรือtr s/.../.../gความท้าทายที่แท้จริงคือการกำหนดความหมายหลายอย่างที่สามารถทำได้และไม่ถูกต้องโดยใช้คำศัพท์

รายการ Leet (แต่ละรายการเพิ่ม 1 leet itemsในสูตร)

$ -> s, S
(-> c, C
5 -> s, S
@ -> a, A
4 -> a, A
3 -> e, E
7 -> t, T
+ -> t, T
# -> h, H
teh -> the
'd -> ed
pwnd -> pwned
pwnt -> pwned
k, K -> ตกลง
kk -> ตกลง
0 [ศูนย์] -> o, O
y, Y -> ทำไม
4 -> สำหรับ
txt -> ข้อความ
dafuq -> อะไรคือ f ** k
/ \, ^ -> a, A
\ / -> v, V
d00d -> เพื่อน
n00b -> มือใหม่
\ / \ / -> w, W
8 -> b, B
| _ | -> u, U
| - | -> h, H
Я -> r, R
j00 -> คุณ
joo -> คุณ
vv, VV -> w, W
พรุ่งนี้ -> พรุ่งนี้
| <-> k, K
[), |) -> d, D
<3 -> ความรัก
> <-> x, X
10100111001 -> leet (การแทนเลขฐานสองของ 1337)
2 -> ถึงด้วย
ur, UR -> ของคุณคุณ (ไม่จำเป็นต้องแยกความแตกต่างระหว่างสองอย่างนี้อย่างถูกต้อง)
คุณ, U -> คุณ
8 -> -ate-, 8
x, X -> -ks -, - cks-
z, Z -> s, S
1 -> i, I, l, L
! -> ฉันฉัน!
c, C -> ดู, C, ทะเล
b, B -> เป็น, B, ผึ้ง
[ตัวอักษรที่เน้นเสียง] -> [แบบฟอร์มที่ไม่เน้นเสียง] (คะแนน 1 ต่อตัวอักษรเน้นเสียงที่รองรับ)
&, 7 -> และ, anned, ant (อาจใช้ระหว่างคำหนึ่งคำ)

ยาก "Leet": คะแนน 30 คะแนนสำหรับleet itemsแต่ละคะแนน

!!! 1 !! 1-> !!!!!!! (แปล 1 ในลำดับ! เข้า!
!!! one! -> !!!!!
! eleven-> !!!

ตัวอย่าง

นี่คือตัวอย่างของสิ่งที่โปรแกรมที่ใช้อักขระ leet ด้านบนทั้งหมดและโบนัสบางอย่างอาจทำได้:

ตัวอย่างประโยค: |-|3 15 $|_|(# @ n00b=He is such a newbie

การเซ็นเซอร์ตาม Leet: $#!+=s**t

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

-xor ต่อท้าย: H4X0R=hacker

leet สุดขีดมากขึ้น: @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 พวกเขายังคงมีค่ามากกว่าคำพูด นั่นคือความตั้งใจของคุณหรือไม่
Martin Ender

@ m.buettner มันจะต่อสู้กับเพียงแค่ใช้หรือtr s/.../.../gเพียงแค่การแปลสิ่งต่าง ๆ เช่นนั้นจะเป็นการท้าทายที่น่าเบื่อดังนั้นเราจำเป็นต้องให้รางวัลการแปลที่ดีกว่าซึ่งใช้ wordlist

regexps แบบยาวจะได้รับอนุญาตหรือไม่ ฉันชอบที่จะดูว่ามันเป็นไปได้ (แม้ว่ายาก) ที่จะทำเช่นนี้แม้ในบริบทที่ตระหนักถึงใน regexps ส่วนใหญ่ (หรืออาจเป็นsedสคริปต์)
Isiah Meadows

เมื่อฉันพูดsedสคริปต์ฉันหมายถึงมากกว่าง่าย ๆs/.../.../gแต่ไฟล์ที่แยกวิเคราะห์และดำเนินการด้วยsedตัวเอง ในฐานะที่เป็นภาษาสั้นคือมันอาจจะเป็นภาษา golfable ดี ...
Isiah ทุ่งหญ้า

@impinball Regexes นั้นใช้ได้จริง แต่ฉันไม่รู้ว่าคุณจะเปิด wordlist และแยกมันด้วยภาษา regex เพียงอย่างเดียวได้อย่างไร sedสคริปต์ก็ดีและน่าสนใจมากพวกเขาทำได้ดีมากเนื่องจากไวยากรณ์การแทนที่สั้นคุณอาจสามารถอ่านได้จาก wordlist ไม่ว่าจะด้วย GNU Extensions หรือใช้sedเป็นส่วนหนึ่งของโปรแกรม Bash ที่มีขนาดใหญ่ขึ้น

คำตอบ:


11

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

การสาธิตออนไลน์:

ตัวเลือก "พจนานุกรมจริง" ไม่ทำงานในกล่องดรอป แต่จะทำงานได้ถ้าทำงานในเว็บเซิร์ฟเวอร์จริง ทดสอบในเซิร์ฟเวอร์การพัฒนาสตูดิโอเสมือนจริงและ Google chrome

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

คะแนน:

49 รายการ leet = 49

โบนัสตัวพิมพ์ใหญ่ = 5 * 49 = 245

โบนัสการค้นหาพจนานุกรม = 20 * 49 = 980

เครื่องหมายอัศเจรีย์ * 3 = 90 * 49 = 4410

(รายการ leet + โบนัส) * 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: "!", "!": "!" }

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

ผลการทดสอบ:

  • | - | 3 15 $ | _ | (# @ n00b ====> เขาเป็นมือใหม่
  • @ 1 // 4Y5 p0 $ + ur n3VV qu35710nz 1n teh $ & 80x ====> โพสต์คำถามใหม่ของคุณในกล่องทรายเสมอ
  • !!! 1 !! 1 ====> !!!!!!!
  • !!!หนึ่ง! ====> !!!!!
  • ! eleven ====> !!!
  • teh !!! 1 !! 1 ====> The !!!!!!!
  • Teh !!! หนึ่ง! ====> The !!!!!
  • สิบเอ็ด ====> The !!!
  • teh !!! 1 !! 1 ====> The !!!!!!!
  • qu35710nz! 1! ====> คำถาม !!!
  • +357 +357 735+ ====> ทดสอบการทดสอบ ทดสอบ
  • & 31! 73 # 4 (KER $ WR0 + 3 83773R L! K3 + #! 5 7 # @ N 2D @ Y ====> และแฮกเกอร์ชั้นยอดก็เขียนแบบนี้ดีกว่าวันนี้

หมายเหตุ:

พจนานุกรมเป็นไฟล์จาวาสคริปต์ที่แยกด้วยวัตถุที่เรียกว่า W ที่มีคำทั้งหมด นี่เป็นเพียงคำที่ฉันต้องการสำหรับการทดสอบที่เกี่ยวข้อง


หากคุณเรียกใช้ผ่านการปิดคอมไพเลอร์มันเป็นเพียง 1640 ตัวอักษรนำคะแนนของคุณถึง 34
AMK

ไฟล์นี้ทำอะไร? dl.dropboxusercontent.com/u/141246873/leettranslator/ ......เป็นเพียงการรับพจนานุกรมจากเว็บหรือไม่ (เช่นโปรแกรมสามารถทำงานโดยใช้W.jsถ้ามันถูกลบ)

@professorfish thats js lib ภายนอกพร้อมพจนานุกรมในนั้น (คำไม่เกินสิบตัวอักษร) มันจะใช้เฉพาะในกรณีที่เลือกตัวเลือก 'พจนานุกรมจริง' ในการสาธิต เป็นเพียงการสาธิตพร้อมพจนานุกรมที่ดีกว่าและไม่ใช่ส่วนหนึ่งของคำตอบอย่างเป็นทางการของฉัน
rdans

6

Haskell - คะแนน 1.421421421: (37 รายการ + (21 โบนัส (ตัวพิมพ์ใหญ่) * 5)) * 10 / (999 bytes)

นี่คือคำตอบสุดท้ายของฉัน

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-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, macros และ print string ทำให้มันบีบอัดได้ง่ายกว่า BrainFuck ปลาย BrainFuck ที่คอมไพล์แล้วจะมีลักษณะดังนี้:

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

1
รหัส BF ที่คอมไพล์แล้วดูเหมือนว่าจะทำงานได้ดีมันดูค่อนข้างสั้นสำหรับโปรแกรม BF

@professorfish ใช้~"OTLHEAND"ฉันจะทำให้ตัวอักษรทุกครั้งสำหรับ 107 ไบต์รหัสวัตถุแทนที่จะทำให้พวกเขาจาก 0 ในแต่ละครั้งใช้ 354 แต่คำตอบของฉันเป็นที่เหมาะสำหรับขนาดรหัส 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

การคำนวณคะแนนนั้นยุ่งยาก

  • (รายการ leet + โบนัส) * 10 / (ความยาวรหัส)
  • code length = 1165 leet
  • รายการ leet = 39 (ไม่ซ้ำกัน)
  • bonus = 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
Knerd

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.