แปลซอร์สโค้ดภาษาอังกฤษของคุณเป็นภาษาต่างประเทศ [ปิด]


66

ฉันสังเกตเห็นว่ามีภาษาคอมพิวเตอร์ที่ไม่เหมาะสมสัดส่วนตามภาษาอังกฤษ ฉันเสนอให้แก้ไขด้วยการแปลภาษาคอมพิวเตอร์ที่มีอยู่เป็นภาษาต่างประเทศ!

  • เลือกภาษาคอมพิวเตอร์ที่ใช้คำหลัก / ฟังก์ชั่นภาษาอังกฤษ
  • เลือกภาษาธรรมชาติ * นอกเหนือจากภาษาอังกฤษ
  • เขียนโปรแกรมที่แปลซอร์สโค้ดของตัวเองหรือโปรแกรมอื่น ๆ ที่เขียนโดยใช้ชุดย่อยของคำหลัก / ฟังก์ชั่นเดียวกันเป็นภาษาอื่น
  • โพสต์ซอร์สโค้ดและเอาท์พุท (รหัสแปล)

เริ่มโพสต์ของคุณด้วยสิ่งที่ชอบ:

เบสิค, ฝรั่งเศส

หรือ

ภาษาเบสิก - ภาษาฝรั่งเศส

คุณไม่ต้องแปลชื่อภาษาถ้าคุณไม่ต้องการมันเป็นเรื่องสนุก!

คุณไม่จำเป็นต้องแปลคำหลัก / ฟังก์ชั่นทั้งหมดในภาษาที่คุณเลือกเพียงแค่คำที่คุณใช้จริงในซอร์สโค้ดของคุณ ตัวอย่างเช่น PHP มีหลายพันดังนั้นคุณไม่จำเป็นต้องแปลทั้งหมด! นอกจากนี้หากคุณใช้ความคิดเห็นใด ๆ โปรดทำอย่างดีที่สุดเพื่อแปลความหมายด้วย! หลังจากที่โปรแกรมของคุณเสร็จสิ้นแล้วไม่ควรมีคำภาษาอังกฤษที่รู้จักยกเว้นว่าเหมาะสมสำหรับภาษาต่างประเทศ ควรแปลคำในสายอักขระด้วย (หมายถึงโปรแกรมที่แปลของคุณจะไม่ทำงานบนซอร์สโค้ดภาษาอังกฤษอีกต่อไปแม้ว่าจะสามารถรันได้!) หวังว่าโปรแกรมของคุณจะทำให้รู้สึกถึงโปรแกรมเมอร์ที่พูดภาษาอื่น ๆ !

ตัวอย่างเช่นif () {} elseif () {} else {}อาจกลายเป็นsi () {} sinonsi () {} sinon {}ภาษาฝรั่งเศส! หากคุณได้รับการแปลของ Perl elsifเป็นภาษาฝรั่งเศสบางทีคุณอาจจะลดลงที่สองnวิธีที่สองจะลดลงในภาษาอังกฤษ:e sinosiในภาษาฝรั่งเศสอื่น ๆมีแนวโน้มที่จะเป็นคนละแต่ทางเลือกที่Sinon ( หรืออื่น ๆ , มิฉะนั้น ) รู้สึกดีขึ้นกับฉัน!

มีความคิดสร้างสรรค์! พยายามจับความรู้สึกของทั้งคอมพิวเตอร์และภาษาธรรมชาติ! ภาษาอย่าง Brainfuck, CJam และอื่น ๆ ที่ไม่มีโทเค็นภาษาอังกฤษไม่สามารถใช้ได้ ภาษาอย่าง BASIC หรือ COBOL นั้นเหมาะสมกว่ามาก ใช้ชื่อตัวแปรที่มีความหมายและแปลมันด้วยเว้นแต่ว่าภาษาของคุณจะไม่สนับสนุนชื่อตัวแปรที่สามารถเป็นคำภาษาอังกฤษได้

คุณสามารถโพสต์คำตอบได้หลายคำตอบหนึ่งคำสำหรับการรวมกันของคอมพิวเตอร์ / ภาษาธรรมชาติ คุณไม่สามารถใช้ห้องสมุดหรือเครื่องมือภายนอกในการแปล! รหัสของคุณควรทำการแปลเองไม่ควรเรียกอย่างอื่นที่แปล! นี่ไม่ใช่ Code Golf! หากโปรแกรมของคุณรับข้อมูลใด ๆ จะต้องเป็นซอร์สโค้ดของตัวเองเท่านั้นหากอ่านจากแผ่นดิสก์ไฟล์นั้นจะต้องเป็นไฟล์ต้นฉบับเท่านั้นเป็นต้น

* สำหรับจุดประสงค์ของการท้าทายนี้ฉันจะพิจารณาภาษาเอสเปรันโตโลฟาบันโวลาปัคอินเตอร์ลิงกัวและอื่น ๆ เป็นภาษาธรรมชาติ คุณไม่สามารถประดิษฐ์ภาษาของคุณเองสำหรับความท้าทายนี้!

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

ตัวอย่างเช่น:

function translate() {
  ...
}
print(translate());

อาจกลายเป็น

fonction traduire() {
  ...
}
imprimer(traduire());

หากอินพุตถูกเปลี่ยนเป็น

print(42);
function translate() {
  ...
}
print(translate());
print(42);

ผลผลิตแล้วควรจะเป็น

imprimer(42);
fonction traduire() {
  ...
}
imprimer(traduire());
imprimer(42);

4
"print" จะกลายเป็น "imprimer" (เหมือนใน "printer") ไม่ใช่ "empreinte" (ดังใน "footprint") :)
Quentin

4
@Quentin ฉันไม่เคยอ้างว่ามันดีฝรั่งเศส!
CJ Dennis

13
ฉันคิดว่ามันไม่ดีพอที่ Excel มีภาษาพื้นเมืองรองรับ .. :( ทำให้การดีบักสูตรยากขึ้นมาก
Mave

1
@Quentin ตอนนี้ฉันสงสัยว่าคำกริยาภาษาฝรั่งเศสควรใช้ความจำเป็นแทน infinitive หรือไม่ ปัญหาเดียวคือภาษาฝรั่งเศสของฉันไม่ดีพอสำหรับเรื่องนั้น!
CJ Dennis

3
@CDDennis ใน pseudocode ฝรั่งเศสฉันเคยเห็น infinitive แต่ฉันสามารถให้มือถ้าจำเป็น: p
Quentin

คำตอบ:


67

Python, Koine Greek - Πύθων

ภาษาโปรแกรมโปรดของฉันเป็นภาษาต่างประเทศที่ฉันโปรดปราน - สมบูรณ์แบบ! และมันไม่ได้เจ็บที่ชื่อที่มีอยู่แล้วในภาษากรีก

โปรแกรมแปลภาษาใน Python 3 (ขอบคุณพระเจ้าสำหรับการสนับสนุน Unicode ดั้งเดิม):

with open(__file__, encoding="utf-8") as f:
    code = f.read()

replacements = [
    ("print", "γραψάτω"),
    ("input", "λαβέτω"),
    ("read", "ἀναγνώτω"),
    ("open", "ἀνεῳξάτω"),
    ("file", "βιβλίον"),
    ("import", "εἰσενεγκάτω"),
    ("encoding", "τύπος"),
    ("code", "λόγοι"),
    ("replacements", "νεόλογοι"),
    ("location", "τόπος"),
    ("old", "παλαιόν"),
    ("new", "νέον"),
    ("find", "εὑρέτω"),
    ("replace", "ἀλλαξάτω"),
    ("for", "ἕκαστον"),
    ("while", "ἐν τῷ"),
    ("elif", "εἰ δὲ"),
    ("if", "εἰ"),
    ("else", "εἰ δὲ μή"),
    ("is not", "οὐκ ἔστιν"),
    ("is", "ἔστιν"),
    ("not in", "οὐκ ἐν"),
    ("in", "ἐν"),
    ("and", "καὶ"),
    ("or", "ἢ"),
    ("not", "οὐ"),
    ("with", "μετὰ"),
    ("as", "ὡς"),
    ("re", "ῥλ"),
    ("sys", "σύς"),
    (":", "·"),
    ("ph", "φ"),
    ("th", "θ"),
    ("ch", "χ"),
    ("ps", "ψ"),
    ("a", "α"),
    ("b", "β"),
    ("c", "κ"),
    ("d", "δ"),
    ("e", "ε"),
    ("f", "φ"),
    ("g", "γ"),
    ("h", ""),
    ("i", "ι"),
    ("j", "ι"),
    ("k", "κ"),
    ("l", "λ"),
    ("m", "μ"),
    ("n", "ν"),
    ("o", "ο"),
    ("p", "π"),
    ("r", "ρ"),
    ("s ", "ς "),
    ("s.", "ς."),
    ("s,", "ς,"),
    ("s·", "ς·"),
    ("s", "σ"),
    ("t", "τ"),
    ("u", "ου"),
    ("v", "ου"),
    ("w", "ου"),
    ("x", "ξ"),
    ("y", "υ"),
    ("z", "ζ")
    ]

for old, new in replacements:
    if old == "for":
        location = 0
        while old in code[location:]:
            location = code.find(old, location)
            if code[location+3] != '"':
                location = code.find("in", location)
                code = code[:location] + "ἐκ" + code[location+2:]
            else:
                location += 1
    code = code.replace(old, new)

print(code)

ผลลัพธ์ของการรันโค้ดบนตัวมันเอง (ด้วยรายการการแปลขนาดใหญ่ทำซ้ำ):

μετὰ ἀνεῳξάτω(__βιβλίον__, τύπος="ουτφ-8") ὡς φ·
    λόγοι = φ.ἀναγνώτω()

νεόλογοι = [
    ("γραψάτω", "γραψάτω"),
    ("λαβέτω", "λαβέτω"),
    ("ἀναγνώτω", "ἀναγνώτω"),
    ...
    ]

ἕκαστον παλαιόν, νέον ἐκ νεόλογοι·
    εἰ παλαιόν == "ἕκαστον"·
        τόπος = 0
        ἐν τῷ παλαιόν ἐν λόγοι[τόπος·]·
            τόπος = λόγοι.εὑρέτω(παλαιόν, τόπος)
            εἰ λόγοι[τόπος+3] != '"'·
                τόπος = λόγοι.εὑρέτω("ἐν", τόπος)
                λόγοι = λόγοι[·τόπος] + "ἐκ" + λόγοι[τόπος+2·]
            εἰ δὲ μή·
                τόπος += 1
    λόγοι = λόγοι.ἀλλαξάτω(παλαιόν, νέον)

γραψάτω(λόγοι)

Koine Greek มีอายุ 2,000 ปีสนุกกับการแปลศัพท์การเขียนโปรแกรม นี่คือรายการโปรดของฉัน:

  • βιβλίον = "เลื่อน" ( file)
  • γραψάτω = "เขียน" ( print)
  • λαβέτω = "take" ( input)
  • εἰσενεγκάτω = "นำเข้า" ( import)
  • ςος = "รูปแบบพิมพ์ " ( encoding)
  • λόγοι / νεόλογοι = "คำว่า" / "คำศัพท์ใหม่" ( code/ replacements)
  • ἕκαστον ... ἐκ = "ละ ... จาก" ( for ... in)
  • εἰ ... εἰδὲ ... εἰδὲμή = "ถ้า ... แต่ถ้า ... แต่ถ้าไม่ใช่" ( if ... elif ... else)
  • means τῷแท้จริงหมายถึง "ใน" แต่ในบริบทบางอย่างมันอาจเป็นสำนวนสำหรับ "เมื่อในขณะที่"
  • "นิพจน์ทั่วไป" กลายเป็นῥήμαλογικόν , "เหตุผล / การพูดอย่างสมเหตุสมผล"; ดังนั้นตัวย่อreคือῥλ

ส่วนใหญ่ของคำยังสามารถพบได้โดยการค้นหาในวิกิพีเดีย

คุณสมบัติเด่นอื่น ๆ :

  • การเขียนโปรแกรมภาษาอังกฤษใช้คำกริยาพวงของความจำเป็น ( print, read, replace) ฉันสงสัยว่าชาวกรีกโบราณจะรู้สึกโง่เล็กน้อยที่พูดกับคอมพิวเตอร์แบบนี้ดังนั้นฉันจึงทำให้พวกเขามีความจำเป็นบุคคลที่สามทั้งหมด: "มันต้องพิมพ์" "มันต้องอ่าน" "มันจะต้องอ่านแทน"
  • เครื่องหมายวรรคตอนกรีกแตกต่างจากภาษาอังกฤษเล็กน้อย ฉันไม่ได้ลงน้ำมากเกินไปเพราะฉันไม่แน่ใจว่าจะแทนที่วงเล็บสี่เหลี่ยมและขีดล่างด้วยได้อย่างไร แต่ฉันสลับโคโลนสำหรับano teleiaหรือ "high period" ( ·)
  • สำหรับคำที่ไม่อยู่ในรายการฉันแน่ใจว่าได้ถอดอักษรตัวพิมพ์เล็กทั้งหมดด้วย การติดต่อแบบหนึ่งต่อหนึ่งไม่ตรงเสมอไป ตัวอย่างเช่นutfกลายเป็น - ουτφซึ่งฟังดูเหมือน "ootf" หากคุณพยายามออกเสียง

สิ่งนี้ยังทำให้มีหลายสิ่งหลายอย่างที่ต้องการไวยากรณ์ไวยกรณ์ ภาษากรีกเป็นภาษาที่มีความผันแปรสูงกว่าภาษาอังกฤษและรหัสของฉันไม่ได้ซับซ้อนพอที่จะทำให้ตัวพิมพ์และตัวเลขทั้งหมดถูกต้อง ยกตัวอย่างเช่นἕκαστονπαλαιόν, νέονἐκνεόλογοιควรจะอ่านἐκνεολόγ ωνกับวัตถุของคำบุพบทในกรณีสัมพันธการก แต่ฉันไม่ได้เกี่ยวกับการที่จะนำที่เวลามากเป็นแบบนี้! รูปลักษณ์เป็นภาษากรีกอย่างเพียงพอ (อย่างน้อยกับดวงตาที่ไม่ผ่านการฝึกฝน) และช่วงเวลาที่สูงช่วยเพิ่มความรู้สึกที่ดี สรุปแล้วฉันพอใจกับผลลัพธ์ที่ได้


4
ดูเหมือนว่ากรีกสำหรับฉัน! ฉันไม่เข้าใจภาษากรีก แต่ดูเหมือนคุณจะมีปัญหาในการใช้ไวยากรณ์ถูกต้องทำได้ดีมาก! คุณคิดจะรวมสองสามบรรทัดจากรายการแปลของคุณหรือไม่
CJ Dennis

νεόλογοι = [...]ฉันยังคงเห็นเท่านั้น คุณช่วยเติมสองสามบรรทัดได้ไหม? ไม่จำเป็นสำหรับรายการทั้งหมด!
CJ Dennis

จริงมันไม่ได้น่าสนใจมากนัก แต่มันก็เป็นตัวบ่งชี้ผลลัพธ์ทั้งหมด!
CJ Dennis

การแปลไม่ควรปล่อยให้ค่าคงที่สตริงอยู่ตามลำพังและแปลคำหลักเท่านั้น (และอาจเป็นชื่อตัวแปร)
kasperd

@kasperd Au contraireWords in strings should be translated too :
DLosc

65

ไก่จีน - 鸡

ไก่ใช้ยากกว่าที่คิด

ไม่มีการขึ้นบรรทัดใหม่ แต่สุดท้ายchickenคือการทำเครื่องหมายจุดจบของโปรแกรมนี้ซึ่งสามารถแทนที่ด้วยบรรทัดว่าง

ฉันใช้ล่ามนี้ซึ่งพิมพ์บรรทัดใหม่พิเศษและไม่สามารถระงับได้ ดังนั้นเอาต์พุตมีหนึ่งบรรทัดมากกว่าต้นฉบับและสามารถทำให้โปรแกรมไก่แตกได้ ฉันหวังว่าสิ่งนี้จะไม่ทำให้ใช้งานไม่ได้

มันใช้เทคนิคบางอย่างเช่นการรับสตริงว่างจากดัชนี -1 ของอินพุตและตรวจจับ EOF โดยเปรียบเทียบกับสตริงว่าง ฉันยังใช้compareคำสั่งเพื่อทิ้งรายการที่ไม่ได้ใช้ในสแต็กโดยไม่สนใจเกี่ยวกับประเภท พวกเขาอาจไม่ทำงานในล่ามอื่น ๆ และจะพิมพ์สตริงเป็น UTF-8 ไบต์โดยที่ล่ามอื่น ๆ อาจรองรับการพิมพ์อักขระ Unicode โดยตรง

chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken
chicken chicken chicken chicken chicken chicken
chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken

chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken

chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken
chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken

chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken

chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken
chicken chicken chicken chicken chicken chicken
chicken
chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken

chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken

chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken


chicken

ใช้คำสั่งนี้เพื่อเรียกใช้รหัสนี้:

bin/chicken "`<file`" <file

ในกรณีที่แปลกพอแรกfileสำหรับการป้อนข้อมูลและที่สองคือสำหรับรหัส

ผลลัพธ์ (ภาษาจีนไม่ได้ใช้ช่องว่างระหว่างคำ):

鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡
鸡鸡鸡鸡鸡鸡
鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡

鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡

鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡
鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡

鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡

鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡
鸡鸡鸡鸡鸡鸡
鸡
鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡

鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡

鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡鸡
鸡鸡鸡鸡鸡鸡


鸡

โปรแกรมนี้แทนที่hด้วยปล่อยให้บรรทัดใหม่ไม่ได้รับผลกระทบและไม่สนใจสิ่งอื่นใด

และอย่างที่คุณเห็นมันสามารถแปลโปรแกรมไก่ที่ถูกต้องได้ทุกโปรแกรม


3
คุณรู้ว่าสิ่งนี้ทำให้ฉันคิดว่า
DLosc

5
อืม! ไก่แบบจีน! ฉันคิดว่าเอาต์พุตเข้าใจง่ายกว่าโปรแกรมดั้งเดิม! มีใครอีกบ้างที่รู้สึกอยากกลับบ้านไหม?
CJ Dennis

2
การทำงานที่ดี, จิมมี่
Alex A.

18
@AlexA เปลี่ยนชื่อผู้ใช้ของฉันแล้ว
jimmy23013

6

36

C ++, ละติน - C Plus Plus

ใช่นั่นคือการแปลที่แท้จริงของชื่อภาษา พวกเขาไม่มีเครื่องหมายบวก แต่พวกเขาให้คำบวกกับเรา

#include <iostream>
#include <fstream>

using namespace std;

static const char *reposita[][2] = {
    // Miscellanea
    {"iostream",    "flumineie"},       // flumine inducto/educto
    {"ofstream",    "fluminele"},       // flumine limae educto
    {"ifstream",    "flumineli"},       // flumine limae inducto
    {"fstream",     "fluminel"},        // flumine limae
    {"std",         "cmn"},             // commune
    {"string",      "chorda"},
    {"empty",       "vacuum"},
    {"size_t",      "t·amplitudinis"},  // typus amplitudinis
    {"find",        "inveni"},
    {"npos",        "posn"},            // positio nulla
    {"replace",     "repone"},
    {"main",        "primor"},
    {"getline",     "sumelinea"},

    // Verba gravia
    {"alignas",             "ordinasicut"},
    {"alignof",             "ordinatio"},
    {"asm",                 "cns"},             // construere
    {"auto",                "modic"},           // modicum
    {"bool",                "bic"},             // bicolore
    {"break",               "erumpe"},
    {"case",                "res"},
    {"catch",               "capta"},
    {"char16_t",            "t·littxvi"},       // typus litterae
    {"char32_t",            "t·littxxxii"},
    {"wchar_t",             "t·littv"},         // typus litterae vadae
    {"char",                "litt"},            // littera
    {"class",               "genus"},
    {"constexpr",           "dictconst"},       // dictum constante
    {"const_cast",          "funde·const"},     // funde constanter
    {"continue",            "procede"},
    {"decltype",            "typusdecl"},       // typus declaratus
    {"default",             "ultima"},
    {"delete",              "abole"},
    {"for",                 "cum"},
    {"if",                  "si"},
    {"struct",              "aedif"},           // aedificium
    {"double",              "biforme"},
    {"do",                  "fac"},
    {"dynamic_cast",        "funde·impigre"},
    {"else",                "alter"},
    {"explicit",            "directum"},
    {"export",              "expone"},
    {"false",               "falsum"},
    {"float",               "nante"},
    {"friend",              "amicus"},
    {"goto",                "iad"},
    {"inline",              "inlinea"},
    {"long",                "longum"},
    {"mutable",             "mutabilis"},
    {"namespace",           "plaganominis"},
    {"new",                 "novum"},
    {"noexcept",            "sineexim"},        // sine eximibus
    {"nullptr",             "sgnnullum"},       // signum nullum
    {"private",             "privata"},
    {"protected",           "protecta"},
    {"public",              "publica"},
    {"register",            "arca"},
    {"reinterpret_cast",    "funde·revertendo"},
    {"return",              "redde"},
    {"short",               "breve"},
    {"unsigned",            "sine·signo"},
    {"signed",              "signo"},
    {"sizeof",              "amplitudo"},
    {"static_assert",       "autuma·stant"},    // autuma stantiter
    {"static_cast",         "funde·stant"},     // funde stantiter
    {"static",              "stante"},
    {"switch",              "furca"},
    {"template",            "exemplar"},
    {"this",                "hoc"},
    {"thread_local",        "ligamen·loci"},
    {"throw",               "iaci"},
    {"true",                "verum"},
    {"try",                 "tempta"},
    {"typedef",             "typumdes"},        // typum designa
    {"typeid",              "signumtypi"},
    {"typename",            "nomentypi"},
    {"union",               "iugum"},
    {"using",               "utente"},
    {"virtual",             "virtuale"},
    {"void",                "inane"},
    {"volatile",            "volatilis"},
    {"while",               "dum"},

    // Numeri
    {"0",   "nihil"},
    {"1",   "i"},
    {"2",   "ii"},

    // Miscellanea
    {"length",      "longitudo"}
};

static void omnesRepone(string& chorda, const string& de, const string& ad) {
    if (de.empty()) {
        return;
    }
    size_t index = 0;
    while ((index = chorda.find(de, index)) != string::npos) {
        chorda.replace(index, de.length(), ad);
        index += ad.length();
    }
}

int main(int narg, const char * varg[]) {

    ifstream limaArchetypa(varg[1]);
    ofstream limaTransferenda(varg[2]);

    int elementa = sizeof(reposita) / sizeof(reposita[0]);
    string linea;
    while (getline(limaArchetypa, linea)) {
        for (int index = 0; index < elementa; ++index) {
            omnesRepone(linea, reposita[index][0], reposita[index][1]);
        }
        limaTransferenda << linea << "\n";
    }
    return 0;
}

หมายเหตุ:

  • รับอินพุตและไฟล์เอาต์พุตบนบรรทัดรับคำสั่ง
  • แปลคำหลักทั้งหมด
  • ฉันไม่ได้เขียนตัวแยกวิเคราะห์ตัวเลขโรมันแบบเต็ม แต่ฉันคิดว่ามันน่าจะดีที่อย่างน้อยแปลตัวเลขที่มีอยู่ในแหล่งที่มา ( nihil , i , and ii )
  • ฉันไม่ได้ลงไปตามถนนของสัญลักษณ์การแปลที่ใช้ใน C ++ ซึ่งดูเหมือนเวิร์มกระป๋องขนาดใหญ่
  • คำหลักconst, enum, intและoperatorไม่เปลี่ยน ตอนนี้พวกเขายืนConstante , enumeratum , integrumและผู้ประกอบการ
  • ฉันไม่คิดว่าชาวโรมันจะเข้ามา_เป็นตัวแบ่งคำดังนั้นผมจึงใช้interpuncts
  • การแปลนั้นโง่มากและไม่มีประสิทธิภาพละเลยขอบเขตของคำ ฯลฯ

เอาท์พุท:

#include <flumineie>
#include <fluminel>

utente plaganominis cmn;

stante const litt *reposita[][ii] = {
    // (redacta)
};

stante inane omnesRepone(chorda& chorda, const chorda& de, const chorda& ad) {
    si (de.vacuum()) {
        redde;
    }
    t·amplitudinis index = nihil;
    dum ((index = chorda.inveni(de, index)) != chorda::posn) {
        chorda.repone(index, de.longitudo(), ad);
        index += ad.longitudo();
    }
}

int primor(int narg, const litt * varg[]) {

    flumineli limaArchetypa(varg[i]);
    fluminele limaTransferenda(varg[ii]);

    int elementa = amplitudo(reposita) / amplitudo(reposita[nihil]);
    chorda linea;
    dum (sumelinea(limaArchetypa, linea)) {
        cum (int index = nihil; index < elementa; ++index) {
            omnesRepone(linea, reposita[index][nihil], reposita[index][i]);
        }
        limaTransferenda << linea << "\n";
    }
    redde nihil;
}

ไม่ควรแปล "string" เป็น "catena" เหมือนภาษา Romance หรือไม่?
200_success

ขึ้นอยู่กับว่าคุณรู้สึกอย่างไร
ลุค

6
หรือว่าโรแมนติกคุณรู้สึกอย่างไร
Alex A.

1
ฉันคิดว่าคุณพลาด "ว่างเปล่า"
Pakk

1
ขอบคุณ ฉันหยิบหนังสือเล่มหนึ่งออกมาจาก @ Vioz-used และใช้ 'inane' เป็นโมฆะเพื่อที่ฉันจะได้ใช้ 'สูญญากาศ' เพื่อว่างเปล่า
ลุค

25

JavaScript (NodeJS) - ภาษาฮิบรู

วิธีการเข้ารหัสของฉันค่อนข้างคล้ายกับโปรแกรม Python ของ DLosc : มันอ่านซอร์สโค้ดมีรายชื่อโทเค็นและรัน find-and-replace

var file_system = require('fs');
file_system.readFile(__filename, function(error,code){
    if (error) {throw error;}
    code = code.toString();
    var words = {
        'var': 'מש׳',
        'file_system': 'מערכת_קבצים',
        'require': 'דרוש',
        'fs': 'מ״ק',
        'readFile': 'קראקובץ',
        'filename': 'שםקובץ',
        'function': 'תפקיד',
        'error': 'שבוש',
        'code': 'צופן',
        'if': 'אם',
        'throw': 'זרוק',
        'toString': 'למחרוזת',
        'words': 'מילים',
        'word': 'מילה',
        'for': 'לכל',
        'in ': 'ב',
        'replace': 'החלף',
        'RegExp': 'ביטס״ד',
        'console': 'מסוף',
        'log': 'רשום',
        'new (.+)\\(': '$1 חדש(',
        'g': 'ע׳',
        '\'': '',
        ';': '׃'
    }, word;

    for (word in words) {
        code = code.replace(new RegExp(word,'g'), words[word]);
    }
    console.log(code);
});

สิ่งนี้ให้ผลลัพธ์ต่อไปนี้:

מש׳ מערכת_קבצים = דרוש(מ״ק)׃
מערכת_קבצים.קראקובץ(__שםקובץ, תפקיד(שבוש,צופן){
    אם (שבוש) {זרוק שבוש׃}
    צופן = צופן.למחרוזת()׃
    מש׳ מילים = {
        מש׳: מש׳,
        מערכת_קבצים: מערכת_קבצים,
        דרוש: דרוש,
        מ״ק: מ״ק,
        קראקובץ: קראקובץ,
        שםקובץ: שםקובץ,
        תפקיד: תפקיד,
        שבוש: שבוש,
        צופן: צופן,
        אם: אם,
        זרוק: זרוק,
        למחרוזת: למחרוזת,
        מילים: מילים,
        מילה: מילה,
        לכל: לכל,
        ב: ב,
        החלף: החלף,
        ביטס״ד: ביטס״ד,
        מסוף: מסוף,
        רשום: רשום,
        (.+)\\(: $1 חדש חדש(,
        ע׳: ע׳,
        \: ,
        ׃: ׃
    }, מילה׃

    לכל (מילה במילים) {
        צופן = צופן.החלף(ביטס״ד חדש(מילה,ע׳), מילים[מילה])׃
    }
    מסוף.רשום(צופן)׃
})׃

น่าเสียดายที่ SE ดูเหมือนจะไม่ชอบข้อความ RTL ฉันพยายามล้อมบล็อกโค้ดด้านบนด้วยตนเอง<pre dir="rtl">แต่มันเพิ่งถูกถอด :( รหัสควรจะเป็นแบบนี้: (screenshot of gedit)

แสดงรหัสอย่างถูกต้องด้วยการจัดรูปแบบ RTL

บางสิ่งที่ควรทราบเกี่ยวกับข้อความภาษาฮิบรู:

  • วิธีการฮิบรูสำหรับตัวย่อ (ซึ่งใช้หลายครั้งในรหัสนี้) คือการใช้เครื่องหมายคำพูดเดียวที่ส่วนท้ายสำหรับการย่อคำเดียวและเครื่องหมายคำพูดคู่ก่อนอักษรตัวสุดท้ายหากเป็นหลายคำ สำหรับคำเดียวเรามีvarซึ่งฉันแปลว่าמש'ย่อมาจาก "משתנה" (ตัวแปร) fsคำย่อของ "ระบบไฟล์" ได้รับการแปลเป็นמ"קอักษรตัวแรกของ "מערכתקבצים" ที่เห็นด้านบน
  • ฮิบรูไม่มีอักษรตัวพิมพ์ใหญ่ / เล็ก ตัวอักษรสองสามตัวมีรูปแบบปกติ / สุดท้าย (כמנפצและךםןףץ, ตามลำดับ) แต่นั่นคือมัน ดังนั้นในคำที่ตอบโต้กับผู้ใช้ได้เช่น "readFile" และ "ชื่อไฟล์" ฉันยังผสมภาษาฮีบรูไว้ด้วยกัน "קראקובץ" และ "שםקוב despite" แม้ตัวที่สองจะลงท้ายด้วยตัวอักษรสุดท้ายที่อยู่ตรงกลางคำ
  • toStringดังกล่าวข้างต้นไม่ได้นำไปใช้กับ ในภาษาฮิบรูคำบุพบทเป็นตัวอักษรตัวเดียวซึ่งได้รับการต่อท้ายคำว่า ดังนั้นถ้า "string" คือ "מחרוזת", "to string" คือ "למחרוזת" นั่นเป็นเหตุผลว่าทำไมในfor..inบล็อกที่inโทเค็นรวมถึงพื้นที่เพื่อที่จะได้รับที่แนบมากับคำถัดไป ( word in wordsเป็นמילה במילים)
  • ฉันไม่สามารถทำซ้ำสิ่งนี้จากคอมพิวเตอร์ของฉันได้ แต่เมื่อฉันไปที่translate.google.comจาก iPad ของฉันและใส่regexเข้าไปฉันให้ביטויסדירซึ่งแปลว่า "สั่งแสดงออก" ว้าว! ฉันย่อมันลงไปที่ביטס"דตามที่เจเอสRegExpเป็น
  • การgตั้งค่าสถานะ regex ที่ฉันแปลเป็นע 'ซึ่งย่อมาจากעולמי, global
  • หมายเหตุ: รูปแบบ regex newซับซ้อนสำหรับการเปลี่ยน นั่นเป็นเพราะในภาษาฮิบรูคำคุณศัพท์ (เช่น "ใหม่" - "חדש") มาจากคำนาม (เช่น regex) ดังนั้นแทนที่จะnew RegExp()เป็น "RegExp [นั่นคือ] new ()`
  • ฉันลบเครื่องหมายคำพูดเนื่องจากไม่มีในภาษาฮิบรูคลาสสิก แน่นอนว่ามันทำให้ไวยากรณ์ยากขึ้นมาก! ฉันยังไม่แน่ใจว่ามันเป็นการตัดสินใจที่ดีหรือไม่
  • ดูเหมือนว่าฉันกำลังแทนที่เครื่องหมายอัฒภาคทั้งหมดด้วยโคลอน จริงๆแล้วมันคือU + 05C3 SOF PASUQซึ่งเป็นเครื่องหมายวรรคตอนที่จบลงในข้อพระคัมภีร์

รหัสนี้แน่นอนไม่แปลทุกโปรแกรม JS ที่ถูกต้อง ในความเป็นจริงมันอาจแปลเพียงแค่นี้ แต่ก็ดีพอสำหรับความท้าทายนี้ ;)

อย่างไรก็ตามถ้าคุณสนใจภาษาฮิบรูให้ทำตามข้อเสนอของฮีบรู (และลงคะแนนคำถามด้วยคะแนน <10)! (ที่มา: stackexchange.com )
ข้อเสนอไซต์แลกเปลี่ยนถาม - ตอบ: ภาษาฮีบรู


9
น่าจะหายไปกับ PHP เพราะมันครอบคลุมอยู่แล้วT_PAAMAYIM_NEKUDOTAYIM !
wchargin

2
บรรทัดสุดท้ายของแหล่งที่มาของ RTL ดูเหมือนว่าคนที่หน้าเศร้าด้วยเครา :)
Matt Lyons

(สำหรับเรื่องใดคนหนึ่งว่าด้วยเหตุผลบางอย่างผมไม่ได้แจ้งให้ทราบว่าในแหล่ง LTR)
แมตต์ลียง

@MattLyons คุณอาจไม่ได้สังเกตเห็นในภาษาอังกฤษเพราะมันไม่ได้ดูเหมือนมาก
Scimonster

1
מהקורה @proudhaskeller
sagiksp

22

Perl, PigLatin - erlPay

ก่อนอื่นโปรแกรมจริงสั้นมากดังนั้นเพื่อแสดงให้เห็นว่ามันทำงานอย่างไรกับส่วนของข้อความที่ยาวขึ้นฉันรวมบางบทกวี Perl ไว้เป็นตัวอย่างเพิ่มเติมของอินพุต / เอาท์พุต เนื่องจากบทกวีรวมอยู่หลังบรรทัดENDจึงไม่ได้ดำเนินการจริง

อัลกอริทึมที่แท้จริงนั้นตรงไปตรงมา:

  • แยกอินพุตเป็นโทเค็นบนขอบเขตของคำ
  • สำหรับคำที่มีตัวอักษรอย่างน้อยสองตัวแปลเป็น Pig Latin
    • ค้นหาพยัญชนะนำในคำ
    • ย้ายพวกเขาไปยังจุดสิ้นสุดและใส่คำต่อท้าย 'ay' ที่พวกเขา
  • พิมพ์ทุกอย่าง การป้อนข้อมูลที่ไม่ใช่อัลฟ่า (และอักขระเดี่ยว) จะไม่ถูกแปล

#!/usr/bin/perl

while (<>) {
    print map { 
        s/^([bcdfghjklmnpqrstvwxyz]*)([a-z]+)/$2$1ay/i if /[a-z][a-z]/i; $_ 
    } split(/\b/);
}
__END__
# listen (a perl poem)
# Sharon Hopkins
# rev. June 19, 1995
# Found in the "Perl Poetry" section of the Camel book
APPEAL:

listen(please, please);

open yourself, wide;
    join (you, me),
connect (us, together),

tell me.

do something if distressed;

    @dawn, dance;
    @evening, sing;
    read (books, $poems, stories) until peaceful;
    study if able;

    write me if-you-please;

sort your feelings, reset goals, seek (friends, family, anyone);

    do*not*die (like this)
    if sin abounds;

keys (hidden), open (locks, doors), tell secrets;
do not, I-beg-you, close them, yet.

        accept (yourself, changes),
        bind (grief, despair);

require truth, goodness if-you-will, each moment;

select (always), length (of-days)

เอาต์พุตจากการรันโปรแกรมด้วยตัวเอง:

#!/usray/inbay/erlpay

ilewhay (<>) {
    intpray apmay { 
        s/^([zbcdfghjklmnpqrstvwxyay]*)([a-z]+)/$2$1ay/i ifay /[a-z][a-z]/i; $_ 
    } itsplay(/\b/);
}
__END__
# istenlay (a erlpay oempay)
# aronShay opkinsHay
# evray. uneJay 19, 1995
# oundFay inay ethay "erlPay oetryPay" ectionsay ofay ethay amelCay ookbay
APPEALay:

istenlay(easeplay, easeplay);

openay ourselfyay, ideway;
    oinjay (ouyay, emay),
onnectcay (usay, ogethertay),

elltay emay.

oday omethingsay ifay istressedday;

    @awnday, anceday;
    @eveningay, ingsay;
    eadray (ooksbay, $oemspay, oriesstay) untilay eacefulpay;
    udystay ifay ableay;

    itewray emay ifay-ouyay-easeplay;

ortsay ouryay eelingsfay, esetray oalsgay, eeksay (iendsfray, amilyfay, anyoneay);

    oday*otnay*ieday (ikelay isthay)
    ifay insay aboundsay;

eyskay (iddenhay), openay (ockslay, oorsday), elltay ecretssay;
oday otnay, I-egbay-ouyay, oseclay emthay, etyay.

        acceptay (ourselfyay, angeschay),
        indbay (iefgray, espairday);

equireray uthtray, oodnessgay ifay-ouyay-illway, eachay omentmay;

electsay (alwaysay), engthlay (ofay-aysday)

2
Pig Latin ถือว่าเป็นเกมภาษาไม่ใช่ภาษาธรรมชาติ ดูหน้าหมูละตินวิกิพีเดีย
Alex A.

5
ฉันคิดว่าคุณสามารถเรียกมันได้ว่าถึงแม้ว่าฉันไม่แน่ใจว่าความท้าทายนี้จะเพิ่มขึ้นถึงระดับของ Federal RFP เท่าที่เกี่ยวข้องกับพิธีการ
Ralph Marshall

3
ชื่อภาษาที่แปลควรเป็นerlPayและฉันชอบถ้ามันออกมา__DENAY__ด้วย ไม่ควรopenayและacceptayเป็นenopayและceptacay?
CJ Dennis

1
ความท้าทายระบุว่า "ภาษาต่างประเทศ" Pig Latin ไม่นับ
mbomb007

6
ฉันเดาว่าฉันขอแนะนำให้คุณทำให้เบาขึ้นเกี่ยวกับการยอมรับของ PigLatin เป็นภาษาต่างประเทศ หากคุณไม่ชอบวิธีแก้ปัญหาของฉันอย่าลงคะแนนให้ ฉันเชื่อว่า CJ มีความสุขมากกับมันและเนื่องจากนี่เป็นเพียงการออกกำลังกายเล็ก ๆ น้อย ๆ ที่สนุกฉันจึงยึดติดกับข้อมูลของฉัน
Ralph Marshall

17

Visual Basic. Net, Persian

ฉันเลือกภาษา verbose ดังนั้นมันจะยากขึ้น กลายเป็นว่าฉันไม่ต้องเปลี่ยนไวยากรณ์ รูปแบบของรหัสเปอร์เซียเป็นเพียง verbose

Imports System.Collections.Generic
Module Translator

Sub Main()
    Dim translation As New Dictionary(Of String, String)
    With translation
        .Add("imports", "وارد‌کردن")
        .Add("system", "دستگاه")
        .Add("collections", "مجموعه")
        .Add("generic", "عمومی")
        .Add("module", "واحد")
        .Add("translator", "مترجم")
        .Add("sub", "زیرروال")
        .Add("main", "اصلی")
        .Add("dim", "بعد")
        .Add("translation", "ترجمه")
        .Add("new", "نو")
        .Add("dictionary", "دیکشنری")
        .Add("string", "رشته")
        .Add("with", "با")
        .Add("add", "افزودن")
        .Add("end", "پایان")
        .Add("file", "فایل")
        .Add("create", "درست‌کردن")
        .Add("readalltext", "خواندن‌کل‌متن")
        .Add("writealltext", "نوشتن‌کل‌متن")
        .Add("io", "ورودی‌خروجی")
        .Add("for", "برای")
        .Add("each", "هر")
        .Add("next", "بعدی")
        .Add("tolower", "به‌کوچک")
        .Add("key", "کلید")
        .Add("value", "مقدار")
        .Add("replace", "جایگزین‌کردن")
        .Add("code", "کد")
        .Add("dispose", "رها‌کردن")
        .Add("and", "و")
        .Add("andalso", "و‌همچنین")
        .Add("byte", "بیت")
        .Add("call", "صدا‌کردن")
        .Add("case", "صورت")
        .Add("catch", "گرفتن")
        .Add("object", "شئ")
        .Add("integer", "عدد")
        .Add("if", "اگر")
        .Add("then", "سپس")
        .Add("goto", "برو‌به")
        .Add("true", "درست")
        .Add("false", "نادرست")
        .Add("exit", "خارج‌شدن")
        .Add("loop", "حلقه")
        .Add("function", "تابع")
        .Add("nothing", "هیچی")
        .Add("else", "در‌غیر‌این‌صورت")
        .Add("try", "سعی‌کردن")
        .Add("or", "یا")
        .Add("orelse", "یا")
        .Add("as", "به‌عنوان")
        .Add("of", "از")
        .Add("in", "در")
    End With
    Dim code As String = System.IO.File.ReadAllText("Code.txt").ToLower()
    For Each k In translation
        code = code.Replace(k.Key, k.Value)
    Next
    System.IO.File.Create("Persian.txt").Dispose()
    System.IO.File.WriteAllText("Persian.txt", code)
End Sub

End Module

ผลลัพธ์ต้องใช้โปรแกรมแก้ไขข้อความจากขวาไปซ้าย ฉันไม่สามารถแสดงได้อย่างถูกต้องที่นี่ แต่ถ้าฉันต้องแสดงมันนี่มันคือ นี่คือภาพ:

รหัส

หมายเหตุ: อ่านจากไฟล์ชื่อ Persian.txt และส่งออกไปยัง code.txt ฉันไม่สามารถรับหน้าต่างคอนโซลให้เขียนหรืออ่านภาษาเปอร์เซียได้โดยที่ไม่ต้องกลายเป็นเครื่องหมายคำถาม (เช่นคำสี่ตัวอักษรจะเปลี่ยนเป็น ????)

หมายเหตุ: หากคุณเชื่อมต่อคำในภาษาเปอร์เซียมันจะเกือบอ่านไม่ได้เพราะตัวอักษรเชื่อมต่อกันและได้รับรูปแบบที่แตกต่างกัน ดังนั้นฉันต้องแยกพวกมันออกด้วยช่องว่างซึ่งส่งผลให้มีช่องว่าง คำเช่น Imports กลายเป็นواردکردنซึ่งเป็นคำสองคำ


ในโพสต์ภาษาฮิบรูของฉันฉันมีภาพหน้าจอที่แสดงอย่างถูกต้องในโปรแกรมแก้ไขที่สนับสนุน RTL
Scimonster

@Scimonster ความคิดที่ดี ฉันจะทำมันทันที ขอบคุณ
JNV

2
คุณสามารถมี "درستکردن" โดยไม่ต้องเว้นวรรคโดยไม่ทำให้มันกลายเป็น "درستکردن" โดยใช้อักขระ Unicode ที่มีความกว้างไม่เป็นศูนย์ (U + 200C): "درست‌کردن" - นี่จะบังคับตัวอักษรให้อยู่เคียงข้างกัน ไม่มีช่องว่างโดยไม่ต้องเข้าร่วมด้วยกัน - แม้ว่าผลลัพธ์ที่ออกมาจะดูดีหรือไม่นั้นขึ้นอยู่กับแบบอักษร
psmears

@psmears คุณพูดถูก ฉันลืมไปแล้ว ขอบคุณ!
JNV

14

Java, ภาษาเยอรมัน - Java

โปรแกรมนี้ตรงไปตรงมาจริงๆ
มันแค่อ่านไฟล์ที่ได้รับเป็นอาร์กิวเมนต์แรกและแทนที่คำภาษาอังกฤษทั้งหมดที่เกิดขึ้นด้วยการแปลภาษาเยอรมันที่เกี่ยวข้อง

ฉันใช้นิพจน์ทั่วไปกับสองกลุ่ม ( ([^a-zA-Z\\d:])*) เพื่อจับคู่แต่ละรายการที่มีการเติม / ตามด้วยอักขระที่ไม่ใช่ตัวอักษรและตัวเลข วิธีนี้แก้ไขปัญหาด้วยการแปลที่ทับซ้อนกัน (eng. List-> ger Listeแต่หลังจากนั้นListeจะกลายเป็นListee) การใช้$1/ $2เพิ่มตัวอักษรเหล่านั้นย้อนกลับและปล่อยให้เรามีซอร์สโค้ดแปล

อัปเดต 1:

ใช้ตัวย่อเช่นea, nbeaฯลฯ ที่จะปฏิบัติตามหลักการตั้งชื่อของ Java ในเยอรมัน

อัปเดต 2:

ตอนนี้ใช้องค์ประกอบที่สามในอาร์เรย์เพื่อแยกหลังจากการแทนที่ครั้งแรก นี่เป็นสิ่งจำเป็นสำหรับวิธีการปฏิเสธ / การผันคำกริยาของฉัน class/ Klasseเป็นผู้หญิงในภาษาเยอรมันและvoid/ nichtsเป็นคนเป็นกลางดังนั้นฉันเพิ่งข้ามการแทนที่และแทนที่ในภายหลัง การแก้ไขอีกอย่างคือการnewแปลของหันไปneueเพราะฉันใช้มันStringเท่านั้นซึ่งเป็นเพศหญิง

อัปเดต 3:

จัดการกับการใช้อักษรตัวพิมพ์ใหญ่อย่างถูกต้องโดยการเพิ่มนิพจน์ปกติ

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.util.regex.Pattern;

    public class Main {

        public static void main(String[] args) throws IOException {
            String[][] array = new String[][]{
                    {"import", "importiere", ""},
                    {"public", "öffentliche", "break"},
                    {"public", "öffentliches", ""},
                    {"class", "klasse", ""},
                    {"Main", "Haupt", ""},
                    {"main", "haupt", ""},
                    {"static", "statisches", ""},
                    {"void", "nichts", ""},
                    {"String", "Zeichenkette", ""},
                    {"args", "argumente", ""},
                    {"throws", "wirft", ""},
                    {"IOException", "EAAusnahme", ""},
                    {"FileSystems", "Dateisysteme", ""},
                    {"new", "neue", ""},
                    {"Files", "Dateien", ""},
                    {"readAllBytes", "leseAlleBytes", ""},
                    {"getDefault", "holeStandard", ""},
                    {"getPath", "holePfad", ""},
                    {"array", "ansammlung", ""},
                    {"replaceFirst", "ersetzeErstes", ""},
                    {"find", "finde", ""},
                    {"out", "ausgabe", ""},
                    {"println", "druckeZeile", ""},
                    {"pattern", "muster", ""},
                    {"Pattern", "Muster", ""},
                    {"compile", "zusammenstellen", ""},
                    {"matcher", "abgleicher", ""},
                    {"util", "werkzeug", ""},
                    {"regex", "regaus", ""},
                    {"while", "solange", ""},
                    {"nio", "nbea", ""},
                    {"io", "ea", ""},
                    {"for", "für", ""},
                    {"if", "wenn", ""},
                    {"equals", "gleicht", ""},
                    {"break", "unterbrechen", ""}

            };
            String str = new String(Files.readAllBytes(FileSystems.getDefault().getPath(args[0])));
            for (String[] s : array) {
                Pattern pattern = Pattern.compile("(^|[^a-zA-Z\\d]+)" + s[0] + "([^a-zA-Z\\d]+)");
                while(pattern.matcher(str).find(0)) {
                    str = pattern.matcher(str).replaceFirst("$1" + s[1] + "$2");
                    if(s[2].equals("break")) {
                        break;
                    }
                }
            }
            System.out.println(str);
        }
    }

ผลลัพธ์นี้ต่อไปนี้เพื่อSystem.out:

importiere java.ea.EAAusnahme;
importiere java.nbea.file.Dateisysteme;
importiere java.nbea.file.Dateien;
importiere java.werkzeug.regaus.Muster;

    öffentliche klasse Haupt {

        öffentliches statisches nichts haupt(Zeichenkette[] argumente) wirft EAAusnahme {
            Zeichenkette[][] ansammlung = neue Zeichenkette[][]{
                    {"importiere", "importiere", ""},
                    {"öffentliches", "öffentliche", "unterbrechen"},
                    {"öffentliches", "öffentliches", ""},
                    {"klasse", "klasse", ""},
                    {"Haupt", "Haupt", ""},
                    {"haupt", "haupt", ""},
                    {"statisches", "statisches", ""},
                    {"nichts", "nichts", ""},
                    {"Zeichenkette", "Zeichenkette", ""},
                    {"argumente", "argumente", ""},
                    {"wirft", "wirft", ""},
                    {"EAAusnahme", "EAAusnahme", ""},
                    {"Dateisysteme", "Dateisysteme", ""},
                    {"neue", "neue", ""},
                    {"Dateien", "Dateien", ""},
                    {"leseAlleBytes", "leseAlleBytes", ""},
                    {"holeStandard", "holeStandard", ""},
                    {"holePfad", "holePfad", ""},
                    {"ansammlung", "ansammlung", ""},
                    {"ersetzeErstes", "ersetzeErstes", ""},
                    {"finde", "finde", ""},
                    {"ausgabe", "ausgabe", ""},
                    {"druckeZeile", "druckeZeile", ""},
                    {"muster", "muster", ""},
                    {"Muster", "Muster", ""},
                    {"zusammenstellen", "zusammenstellen", ""},
                    {"abgleicher", "abgleicher", ""},
                    {"werkzeug", "werkzeug", ""},
                    {"regaus", "regaus", ""},
                    {"solange", "solange", ""},
                    {"nbea", "nbea", ""},
                    {"ea", "ea", ""},
                    {"für", "für", ""},
                    {"wenn", "wenn", ""},
                    {"gleicht", "gleicht", ""},
                    {"unterbrechen", "unterbrechen", ""}

            };
            Zeichenkette str = neue Zeichenkette(Dateien.leseAlleBytes(Dateisysteme.holeStandard().holePfad(argumente[0])));
            für (Zeichenkette[] s : ansammlung) {
                Muster muster = Muster.zusammenstellen("(^|[^a-zA-Z\\d]+)" + s[0] + "([^a-zA-Z\\d]+)");
                solange(muster.abgleicher(str).finde(0)) {
                    str = muster.abgleicher(str).ersetzeErstes("$1" + s[1] + "$2");
                    wenn(s[2].gleicht("unterbrechen")) {
                        unterbrechen;
                    }
                }
            }
            System.ausgabe.druckeZeile(str);
        }
    }

หากคุณมีการปรับปรุงเกี่ยวกับรหัสหรือการแปลโปรดแจ้งให้เราทราบและฉันจะดูว่าฉันสามารถนำไปใช้งานได้หรือไม่


/, 󠀠 และ-อาจจะไม่ดีในตัวบ่งชี้
วิ

6
ฉันรักการติดต่อระหว่างสองภาษา - ทั้งสองใช้คำประสมแบบมโหฬารสำหรับทุกสิ่ง ;) แต่ฉันสงสัยว่าชาวเยอรมันจะยังคงตัวย่อEingabe/Ausgabeอย่างใด - บางทีEinaus?
DLosc

1
@DLosc I / O (อินพุต / เอาต์พุต) มักจะย่อด้วย E / A (Eingabe / Ausgabe) Einausจะเป็นไปได้ด้วยฉันคิดว่า แต่มันก็ไม่ถูกต้อง Rein/Rausดูเหมือนจะเป็นไปได้เช่นกัน แต่อีกครั้งเพียงแค่ไม่รู้สึกว่าเป็นการแปลที่ดี
GiantTree

@Vi คุณหมายถึงเป็นตัวอักษรในสตริงที่จะแทนที่ (ด้านซ้าย)? สิ่งเหล่านี้ไม่จำเป็นเนื่องจาก Java ไม่อนุญาตให้ตัวอักษรดังกล่าวเป็นส่วนหนึ่งของชื่อ / ตัวระบุ ฉันคิดว่าคุณหมายถึงเพราะฉันกำลังตรวจสอบสายทั้งหมดซ้ำแล้วซ้ำอีกและคุณอาจคิดว่าE/Aหรือคล้ายกันอาจทำให้เกิดปัญหา แต่พวกเขาไม่ได้ตีความว่าเป็นการแสดงออกปกติพวกเขาจะจับคู่เท่านั้นและทำให้การแสดงออกปกติไม่ได้รับผลกระทบ (ฉันอาจจะผิด แต่นี่คือสิ่งที่ฉันมีประสบการณ์กับการแสดงออกปกติ)
GiantTree

@GiantTree ฉันหมายถึงรหัสจะยากที่จะแยกวิเคราะห์สำหรับคอมไพเลอร์ Java สมมติฐานเยอรมัน
วิ

14

Julia, Tatar - Julia

นี้ใช้ภาษาละตินตามตัวอักษรZamanälifทางการ Idel อูราลตาตาร์ก่อตั้งขึ้นในปี 2001 แต่ในปี 2002 รัสเซียฟาดลงมาตาตาร์สถานของการเคลื่อนไหวที่จะทำให้Zamanälifอักษรอย่างเป็นทางการสำหรับภาษาตาตาร์, ความผิดทางอาญาการใช้งานอย่างเป็นทางการใด ๆ ตัวอักษรอื่นที่ไม่ใช่ Cyrillic

ในศตวรรษที่ผ่านมามี 5 ตัวอักษรสำหรับภาษาตาตาร์:

  • İskeimlâแตกต่างจากอักษรอาหรับยุค 1870-1920
  • Yañaimlâตัวแปรภาษาอาหรับอีกยุค 1920 และยุค 30
  • Jaᶇalifตัวแปรของอักษรละตินยุค 30
  • ซีริลลิกโจเซฟสตาลินได้รับคำสั่งให้เปลี่ยนใจเลื่อมใสปี 1940- ปัจจุบัน
  • Zamanälif, ไม่เป็นทางการ, 2001- ปัจจุบัน

ฉันเลือกใช้Zamanälifเพราะฉันคิดว่าคุณปู่ของฉันจะผิดหวังหากฉันใช้ Cyrillic ภาษาแรกของเขาคือตาตาร์และเมื่อเขาเกิดในช่วงทศวรรษที่ 1920 เขาเรียนรู้ที่จะอ่านและเขียนด้วยตัวอักษร iske imlâ

ภาษาอังกฤษ:

function translate(source)
    words = Dict([("function", "funktsiya"),
                  ("if",gär"),
                  ("else", "başkaça"),
                  ("elif", "başägär"),
                  ("end", "axır"),
                  ("for", "saen"),
                  ("print", "bastırırga"),
                  ("english", "ingliz"),
                  ("tatar", "tatarça"),
                  ("translate", "tärcemä"),
                  ("words", "süzlär"),
                  ("replace", "alıştıru"),
                  ("Dict", "Süzlek"),
                  ("keys", "açkıçlär"),
                  ("get", "alırga"),
                  ("readall", "ukırgaböten"),
                  ("source", "çıganak")])

    tatar = readall(source)

    for english = keys(words)
        tatar = replace(tatar, english, get(words, english, ""))
    end

    tatar
end

print(translate("tatar.jl"))

ตาตาร์:

funktsiya tärcemä(çıganak)
    süzlär = Süzlek([("funktsiya", "funktsiya"),
                  (gär",gär"),
                  ("başkaça", "başkaça"),
                  ("başägär", "başägär"),
                  ("axır", "axır"),
                  ("saen", "saen"),
                  ("bastırırga", "bastırırga"),
                  ("ingliz", "ingliz"),
                  ("tatarça", "tatarça"),
                  ("tärcemä", "tärcemä"),
                  ("süzlär", "süzlär"),
                  ("alıştıru", "alıştıru"),
                  ("Süzlek", "Süzlek"),
                  ("açkıçlär", "açkıçlär"),
                  ("alırga", "alırga"),
                  ("ukırgaböten", "ukırgaböten"),
                  ("çıganak", "çıganak")])

    tatarça = ukırgaböten(çıganak)

    saen ingliz = açkıçlär(süzlär)
        tatarça = alıştıru(tatarça, ingliz, alırga(süzlär, ingliz, ""))
    axır

    tatarça
axır

bastırırga(tärcemä("~/tatarça.jl"))

ฉันใช้เวลาสองสามเสรีภาพในการแปลให้สะอาดขึ้นเล็กน้อย ตัวอย่างเช่นforกลายเป็นsaenซึ่งแปลว่า "แต่ละรายการ" มากขึ้นอย่างแท้จริง ฉันยังไม่ย่อSüzlekซึ่งหมายถึง "พจนานุกรม" ukırgabötenการแปลของฉันสำหรับreadallคือukırga(อ่าน) + böten(ทั้งหมด / ทุกคน) başägärการแปลของฉันสำหรับelseifคือbaş(ตัวย่อของbaşkaçaความหมาย "อื่น / มิฉะนั้น") + ägär(ถ้า)

หากใครก็ตามใน PPCG รู้จักตาตาร์คุณน่าจะรู้มากกว่าฉัน ข้อเสนอแนะใด ๆ ยินดีต้อนรับ


13

Rust , เบลารุส (Ржа)

โปรแกรม:

#![feature(non_ascii_idents)]

use std::io::stdin;
use std::io::Read;

static ЗАМЕНЫ: &'static [(&'static str, &'static str)] =  &[
    ("match", "супастаўленьне"),
    (" if ", " калі "),
    ("else", "інакш"),
    (" as ", " як "),
    ("panic!", "паніка!"),
    ("assert!", "праверыць!"),
    ("box ", "пак "),
    ("break", "перапыніць"),
    ("continue", "працягнуць"),
    ("fn ", "фн "),
    ("extern", "знешняе"),
    (" for ", " кожная "),
    (" in ", " ў "),
    ("impl ", " увасобіць "),
    ("let ", "хай "),
    ("loop ", "цыкл "),
    ("once", "аднойчы"),
    ("pub ", "адкр"),
    ("return", "выйсці"),
    ("super", "бацькоўскі_модуль"),
    ("unsafe ", "непяспечнае "),
    (" where", " дзе"),
    ("while", "пакуль"),
    ("use ", "вык "),
    ("mod ", "модуль "),
    ("trait ", "рыса "),
    ("struct ", "структура "),
    ("enum ", "пералік"),
    ("type ", "тып "),
    ("move ", "перанесьці"),
    ("mut ", "зьмян "),
    ("ref ", "спасыл "),
    ("static ", "статычнае "),
    ("const ", "нязменнае "),
    ("crate ", "скрыня "),
    ("Copy", "МожнаКапіяваць"),
    ("Send", "МожнаПерадаваць"),
    ("Sized", "МаеПамер"),
    ("Sync", "БяспечнаНаПатокі"),
    ("Drop", "МаеЗавяршальнік"),
    ("FnMut", "ЯкЗьмяняемаяФункцыя"),
    ("FnOnce", "ЯкАднаразоваяФункцыя"),
    ("Fn", "ЯкФункцыя"),
    ("macro_rules!", "новы_макрас!"),
    ("alignof", "выраўненьеяку"),
    ("become", "стала"),
    ("do ", "рабі"),
    ("offsetof", "пазіцыяяку"),
    ("priv", "прыватнае"),
    ("pure", "чыстае"),
    ("sizeof", "памер_ад"),
    ("typeof", "тып_ад"),
    ("unsized", "безпамеравы"),
    ("yield", "вырабіць"),
    ("abstract", "абстрактны"),
    ("virtual", "віртуальны"),
    ("final", "канчатковае"),
    ("override", "перавызначыць"),
    ("macro", "макрас"),
    ("Box", "Каробка"),
    ("ToOwned", "МожнаНабыцьУладара"),
    ("Clone", "МожнаКланаваць"),
    ("PartialOrd", "МаеЧастковыПарадак"),
    ("PartialEq", "ЧастковаПараўнальны"),
    ("Eq", "Параўнальны"),
    ("Ord", "МаеПарадак"),
    ("AsRef", "МожнаЯкСпасылку"),
    ("AsMut", "МожнаЯкЗьмяняемые"),
    ("Into", "МожнаУ"),
    ("From", "МожнаЗ"),
    ("Default", "МаеЗначеньнеПаЗмаўчаньні"),
    ("Extend", "Пашырыць"),
    ("IntoIterator", "МожнаУПаўторнік"),
    ("DoubleEndedIterator", "ДвубаковыПаўторнік"),
    ("ExactSizeIterator", "ПаўторнікЗДакладнымПамерам"),
    ("Iterator", "Паўторнік"),
    ("Option", "Недакладна"),
    ("Some", "Ёсць"),
    ("None", "Нічога"),
    ("Result", "Вынік"),
    ("Ok", "Ок"),
    ("Err", "Збой"),
    ("SliceConcatExt", "АбянднальнікЛустаў"),
    ("ToString", "УРадок"),
    ("String", "Радок"),
    ("Vec", "Вэктар"),
    ("vec!", "вэкрар!"),
    ("self", "сам"),
    ("true", "так"),
    ("false", "не"),
    ("feature", "магчымасьць"),

    ("main", "галоўная"),
    ("replace", "замяніць"),
    ("iter","пераліч"),
    ("print!","друк!"),
    ("println!","друкрад!"),
    ("stdin","звыч_уваход"),
    ("stdout","звыч_выхад"),
    ("stderr","звыч_павед"),
    ("Read", "Чытальнік"),
    ("Write", "Пісальнік"),
    ("read_to_string", "чытаць_у_радок"),
    ("to_string", "у_радок"),
    ("std", "стд"),
    ("io", "ув"),
    ("non_ascii_idents", "ідентыфікатары_з_юнікоду"),

    ("str", "радок"),
];


fn main() {
    let mut зьмест : String = "".to_string();
    match stdin().read_to_string(&mut зьмест) {
        Ok(_) => (),
        Err(памылка) => panic!(памылка),
    }
    for замена in ЗАМЕНЫ.iter() {
        зьмест = зьмест.replace(замена.0, замена.1);
    }
    println!("{}", зьмест);
}

เอาท์พุท:

#![магчымасьць(ідентыфікатары_з_юнікоду)]

вык стд::ув::звыч_уваход;
вык стд::ув::Чытальнік;

статычнае ЗАМЕНЫ: &'статычнае [(&'статычнае радок, &'статычнае радок)] =  &[
    ("супастаўленьне", "супастаўленьне"),
    (" калі ", " калі "),
    ("інакш", "інакш"),
    (" як ", " як "),
    ("паніка!", "паніка!"),
    ("праверыць!", "праверыць!"),
    ("пак ", "пак "),
    ("перапыніць", "перапыніць"),
    ("працягнуць", "працягнуць"),
    ("фн ", "фн "),
    ("знешняе", "знешняе"),
    (" кожная ", " кожная "),
    (" ў ", " ў "),
    (" увасобіць ", " увасобіць "),
    ("хай ", "хай "),
    ("цыкл ", "цыкл "),
    ("аднойчы", "аднойчы"),
    ("адкр", "адкр"),
    ("выйсці", "выйсці"),
    ("бацькоўскі_модуль", "бацькоўскі_модуль"),
    ("непяспечнае ", "непяспечнае "),
    (" дзе", " дзе"),
    ("пакуль", "пакуль"),
    ("вык ", "вык "),
    ("модуль ", "модуль "),
    ("рыса ", "рыса "),
    ("структура ", "структура "),
    ("пералік", "пералік"),
    ("тып ", "тып "),
    ("перанесьці", "перанесьці"),
    ("зьмян ", "зьмян "),
    ("спасыл ", "спасыл "),
    ("статычнае ", "статычнае "),
    ("нязменнае ", "нязменнае "),
    ("скрыня ", "скрыня "),
    ("МожнаКапіяваць", "МожнаКапіяваць"),
    ("МожнаПерадаваць", "МожнаПерадаваць"),
    ("МаеПамер", "МаеПамер"),
    ("БяспечнаНаПатокі", "БяспечнаНаПатокі"),
    ("МаеЗавяршальнік", "МаеЗавяршальнік"),
    ("ЯкЗьмяняемаяФункцыя", "ЯкЗьмяняемаяФункцыя"),
    ("ЯкАднаразоваяФункцыя", "ЯкАднаразоваяФункцыя"),
    ("ЯкФункцыя", "ЯкФункцыя"),
    ("новы_макрас!", "новы_макрас!"),
    ("выраўненьеяку", "выраўненьеяку"),
    ("стала", "стала"),
    ("рабі", "рабі"),
    ("пазіцыяяку", "пазіцыяяку"),
    ("прыватнае", "прыватнае"),
    ("чыстае", "чыстае"),
    ("памер_ад", "памер_ад"),
    ("тып_ад", "тып_ад"),
    ("безпамеравы", "безпамеравы"),
    ("вырабіць", "вырабіць"),
    ("абстрактны", "абстрактны"),
    ("віртуальны", "віртуальны"),
    ("канчатковае", "канчатковае"),
    ("перавызначыць", "перавызначыць"),
    ("макрас", "макрас"),
    ("Каробка", "Каробка"),
    ("МожнаНабыцьУладара", "МожнаНабыцьУладара"),
    ("МожнаКланаваць", "МожнаКланаваць"),
    ("МаеЧастковыПарадак", "МаеЧастковыПарадак"),
    ("ЧастковаПараўнальны", "ЧастковаПараўнальны"),
    ("Параўнальны", "Параўнальны"),
    ("МаеПарадак", "МаеПарадак"),
    ("МожнаЯкСпасылку", "МожнаЯкСпасылку"),
    ("МожнаЯкЗьмяняемые", "МожнаЯкЗьмяняемые"),
    ("МожнаУ", "МожнаУ"),
    ("МожнаЗ", "МожнаЗ"),
    ("МаеЗначеньнеПаЗмаўчаньні", "МаеЗначеньнеПаЗмаўчаньні"),
    ("Пашырыць", "Пашырыць"),
    ("МожнаУПаўторнік", "МожнаУПаўторнік"),
    ("ДвубаковыПаўторнік", "ДвубаковыПаўторнік"),
    ("ПаўторнікЗДакладнымПамерам", "ПаўторнікЗДакладнымПамерам"),
    ("Паўторнік", "Паўторнік"),
    ("Недакладна", "Недакладна"),
    ("Ёсць", "Ёсць"),
    ("Нічога", "Нічога"),
    ("Вынік", "Вынік"),
    ("Ок", "Ок"),
    ("Збой", "Збой"),
    ("АбянднальнікЛустаў", "АбянднальнікЛустаў"),
    ("УРадок", "УРадок"),
    ("Радок", "Радок"),
    ("Вэктар", "Вэктар"),
    ("вэкрар!", "вэкрар!"),
    ("сам", "сам"),
    ("так", "так"),
    ("не", "не"),
    ("магчымасьць", "магчымасьць"),

    ("галоўная", "галоўная"),
    ("замяніць", "замяніць"),
    ("пераліч","пераліч"),
    ("друк!","друк!"),
    ("друкрад!","друкрад!"),
    ("звыч_уваход","звыч_уваход"),
    ("звыч_выхад","звыч_выхад"),
    ("звыч_павед","звыч_павед"),
    ("Чытальнік", "Чытальнік"),
    ("Пісальнік", "Пісальнік"),
    ("чытаць_у_радок", "чытаць_у_радок"),
    ("у_радок", "у_радок"),
    ("стд", "стд"),
    ("ув", "ув"),
    ("ідентыфікатары_з_юнікоду", "ідентыфікатары_з_юнікоду"),

    ("радок", "радок"),
];


фн галоўная() {
    хай зьмян зьмест : Радок = "".у_радок();
    супастаўленьне звыч_уваход().чытаць_у_радок(&зьмян зьмест) {
        Ок(_) => (),
        Збой(памылка) => паніка!(памылка),
    }
    кожная замена ў ЗАМЕНЫ.пераліч() {
        зьмест = зьмест.замяніць(замена.0, замена.1);
    }
    друкрад!("{}", зьмест);
}

ไม่ได้󠀠󠀠󠀠󠀠󠀠󠀠󠀠󠀠󠀠󠀠󠀠󠀠󠀠󠀠󠀠󠀠󠀠󠀠󠀠󠀠
วี

รัสเซียและ C ++?
GamrCorps

@IliLee, ไม่คำแนะนำ: การเดาครั้งแรกนั้นใกล้กว่านี้แล้ว
วิ

@IonLee: ภาษาธรรมชาติคือเบลารุส
Alex A.

1
สนิมและเบลารุส
ProgramFOX

12

DogeScript , Spanish - El Código del Perro

DogeScript ถูกตีความเป็น JavaScript ดังนั้น JS ที่ถูกต้องใด ๆ คือ DogeScript ที่ถูกต้อง การแปลที่ฉันให้ไว้ที่นี่ครอบคลุมข้อมูลจำเพาะของคำหลักทั้งหมด(รวมทั้งคำอื่น ๆ ที่ครอบคลุมคำที่ใช้ในโปรแกรม)

"ภาษาอังกฤษ"

 trained

   very speak is prompt()

very doge is {
    'console': 'consola',
    'doge': 'perro',
    'very': 'muy',
    'concern': 'preocupación',
    'word': 'palabra',
    'much': 'mucho',
    'trained': 'entrenado',
    'with': 'con',
    'doge': 'perro',
    'very': 'muy',
    'much': 'mucho',
    'with': 'con',
    'is': 'es',
    'trained': 'entrenado',
    'such': 'tan',
    'wow': 'guau',
    'plz': 'porFavor',
    'but': 'pero',
    'maybe': 'quizás',
    'rly': 'enserio',
    'many': 'muchos',
    'so': 'tanto',
    'not': 'no',
    'and': 'y',
    'or': 'o',
    'next': 'siguiente',
    'as': 'como',
    'more': 'más',
    'less': 'menos',
    'lots': 'montones',
    'few': 'pocos',
    'bigger': 'másGrande',
    'smaller': 'menor',
    'biggerish': 'unPocoMásGrande',
    'smallerish': 'unPocoMásPequeño',
    'prompt': 'preguntar',
    'in': 'en',
    'replace': 'reemplazar',
    'new': 'nuevo',
    'RegExp': 'ExpReg',
    'loge': 'registro',
    'dose': 'punta',
    'speak': 'habla'
}

much very word in doge
         very concern is new RegExp with word 'g'
 doge is speak dose replace with concern doge[word]
      wow

console dose loge with speak

สเปน:

 entrenado

   muy habla es preguntar()

muy perro es {...}

mucho muy palabra en perro
         muy preocupación es nuevo ExpReg con palabra 'g'
 perro es habla punta reemplazar con preocupación perro[palabra]
      guau

consola punta registro con habla

คุณอาจสังเกตเห็นว่าฉันใช้เสรีภาพในการแปล นี่เป็นบางส่วนเพราะภาษาสเปนของฉันค่อนข้างแย่และบางส่วนเนื่องจากความรู้เกี่ยวกับมส์ภาษาสเปนของฉันขาดไป

ป้อนคำอธิบายรูปภาพที่นี่


11

C #, ละติน - C Acutus

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace ToLatin
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, string> dx = new Dictionary<string, string>();
            dx.Add("using", "usura");
            dx.Add("System", "Ratio");
            dx.Add("Collections", "Comprensio");
            dx.Add("Text", "Scriptum");
            dx.Add("txt", "scrptm");
            dx.Add("output", "scribo");
            dx.Add("namespace", "nomenspatium");
            dx.Add("class", "classis");
            dx.Add("Program", "Libellus");
            dx.Add("static", "immotus");
            dx.Add("void", "inane");
            dx.Add("Main", "Paelagus");
            dx.Add("string", "chorda");
            dx.Add("args", "argumenta");
            dx.Add("Dictionary", "Lexicon");
            dx.Add("new", "novus");
            dx.Add("Add", "Adaugeo");
            dx.Add("IO", "LecticoScribo");
            dx.Add("abstract", "abstracto");
            dx.Add("break", "confractus");
            dx.Add("Math", "Mathematica");
            dx.Add("File", "Ordo");
            dx.Add("file", "ordo");
            dx.Add("foreach", "prosingulus");
            dx.Add("Read", "Lectico");
            dx.Add("Write", "Scribo");
            dx.Add("All", "Omnes");
            dx.Add("translation", "interpretatio");
            dx.Add("bool", "verumfalsus");
            dx.Add("true", "verum");
            dx.Add("false", "falsus");
            dx.Add("0", "nil");
            dx.Add("||", "aut");
            dx.Add("&&", "et");
            dx.Add("Key", "Clavis");
            dx.Add("Value", "Pretium");
            dx.Add("Replace", "Restituo");
            dx.Add("Generic", "Ordinarius");
            dx.Add("ToLatin", "AdLatinam");
            string file = File.ReadAllText(args[0]);
            foreach (var translation in dx )
            {
                file = file.Replace(translation.Key, translation.Value);
            }
            File.WriteAllText("output.txt", file);
        }
    }
}

อ่านไฟล์จาก args บรรทัดคำสั่งเขียนไปยัง output.txt

ตัวอย่าง:

usura Ratio;
usura Ratio.Comprensio.Ordinarius;
usura Ratio.Scriptum;
usura Ratio.LecticoScribo;

nomenspatium AdLatinam
{
    classis Libellus
    {
        immotus inane Paelagus(chorda[] argumenta)
        {
            Lexicon<chorda, chorda> dx = novus Lexicon<chorda, chorda>();
            dx.Adaugeo("usura", "usura");
            dx.Adaugeo("Ratio", "Ratio");
            dx.Adaugeo("Comprensio", "Comprensio");
            dx.Adaugeo("Scriptum", "Scriptum");
            dx.Adaugeo("scrptm", "scrptm");
            dx.Adaugeo("scribo", "scribo");
            dx.Adaugeo("nomenspatium", "nomenspatium");
            dx.Adaugeo("classis", "classisis");
            dx.Adaugeo("Libellus", "Libellus");
            dx.Adaugeo("immotus", "immotus");
            dx.Adaugeo("inane", "inane");
            dx.Adaugeo("Paelagus", "Paelagus");
            dx.Adaugeo("chorda", "chorda");
            dx.Adaugeo("argumenta", "argumenta");
            dx.Adaugeo("Lexicon", "Lexicon");
            dx.Adaugeo("novus", "novus");
            dx.Adaugeo("Adaugeo", "Adaugeo");
            dx.Adaugeo("LecticoScribo", "LecticoScribo");
            dx.Adaugeo("abstracto", "abstractoo");
            dx.Adaugeo("confractus", "confractus");
            dx.Adaugeo("Mathematica", "Mathematicaematica");
            dx.Adaugeo("Ordo", "Ordo");
            dx.Adaugeo("ordo", "ordo");
            dx.Adaugeo("prosingulus", "prosingulus");
            dx.Adaugeo("Lectico", "Lectico");
            dx.Adaugeo("Scribo", "Scribo");
            dx.Adaugeo("Omnes", "Omnes");
            dx.Adaugeo("interpretatio", "interpretatio");
            dx.Adaugeo("verumfalsus", "verumfalsus");
            dx.Adaugeo("verum", "verum");
            dx.Adaugeo("falsus", "falsus");
            dx.Adaugeo("nil", "nil");
            dx.Adaugeo("aut", "aut");
            dx.Adaugeo("et", "et");
            dx.Adaugeo("Clavis", "Clavis");
            dx.Adaugeo("Pretium", "Pretium");
            dx.Adaugeo("Restituo", "Restituo");
            dx.Adaugeo("Ordinarius", "Ordinarius");
            dx.Adaugeo("ToLatin", "AdLatinam");
            chorda ordo = Ordo.LecticoOmnesScriptum(argumenta[nil]);
            prosingulus (var interpretatio in dx )
            {
                ordo = ordo.Restituo(interpretatio.Clavis, interpretatio.Pretium);
            }
            Ordo.ScriboOmnesScriptum("scribo.scrptm", ordo);
        }
    }
}

Darn เพิ่งเห็น C ++ รุ่นละติน ..


s/ToLatin/AdLatinam/... เช่นกันไม่ควรargsเป็นargumenta(พหูพจน์ของเพศ)?
DLosc

@DLosc ฉันไม่รู้ว่ามันควรจะเป็นอะไรฉันไม่รู้ละติน แต่ฉันจะใช้คำพูดของคุณ
Kade

สิ่งที่ดีฉันกำลังเปรียบเทียบคำแปลของเราสำหรับคำทั่วไป "หรือ" ควรเป็น "aut"
ลุค

ทำไมเป็นSystem Ratioภาษาละติน ถ้าอย่างนั้นอัตราส่วนในภาษาละตินคืออะไร?
phuclv

@ LưuVĩnhPhúc ratio->ratione/proportio
Kade

8

ทับทิม, ญี่ปุ่น - AkaDama

ทับทิมในภาษาญี่ปุ่นเป็นrubii (ルビー) ซึ่งเป็นที่น่าเบื่อดังนั้นผมตั้งชื่อมันอย่างแท้จริงอัญมณีสีแดง

ในทับทิมตัวแปรและวิธีการไม่ได้ จำกัด อยู่ที่ ASCII ดังนั้นบางอย่างเช่น

def フロートの文字化(フロート)
     = フロート.to_s.split(?.)
    甲[0] = 整数の文字化(甲[0])
    甲[1] = 甲[1].chars.map{|乙|R数字行列[乙]}.join
    甲.join(?点)
end

เป็นทับทิมที่ถูกต้อง ฉันใช้สิ่งนี้ให้มากที่สุดเพื่อทำให้งงงวยสำหรับฐานทั้งหมดของคุณ

ฉันหวังว่ามันจะโอเคที่จะใช้อัญมณีในการแยกวิเคราะห์ทับทิม แต่มันก็ยังต้องการการปะติดลิง

คุณสามารถขยายการTRANS_TABLEเพื่อเพิ่มการแปลสำหรับวิธีการเพิ่มเติม ทุกอย่างที่ไม่ได้อยู่ในตารางคือ "แปล" เป็นภาษาญี่ปุ่นตามการออกเสียง (หรือเหมือนกับการสะกดคำ) ดังนั้นการกินจึงกลายเป็นえあと ("a-ah-toe")

แปลงจำนวนเต็มเป็นสัญกรณ์ที่ "ใช้ง่าย"

# encoding:utf-8

require 'parser/current'

# super hack, don't try this at home!!
class Array
    def freeze
        self
    end
end
class Hash
    def freeze
        self
    end
end
class Parser::AST::Node
    def freeze
        self
    end
end
require 'unparser'
class Parser::Source::Comment
    def freeze
        self
    end
end

# translation memory
R翻訳メモリー = {}

# keyword translation
R鍵文字 = {
    :BEGIN => [:K_PREEXE, :"コンパイル時に最初に登録"],
    :END => [:K_POSTEXE, :"コンパイル時に最後に登録"],
    :__ENCODING__ => [:K_ENCODING, :"__エンコーディング__"],
    :__END__ => [:K_EEND, :"__終__"],
    :__FILE__ => [:K_FILE, :"__ソースファイル名__"],
    :alias => [:K_ALIAS, :"別名"],
    :and => [:K_AND, :"且つ"],
    :begin => [:K_BEGIN, :"開始"],
    :break => [:K_BREAK, :"抜ける"],
    :case => [:K_CASE, :"条件分岐"],
    :class => [:K_CLASS, :"クラス"],
    :def => [:K_DEF, :"定義"],
    :define => [:K_DEFINE, :""],
    :defined? => [:K_DEFINED, :"若し定義されたら"],
    :do => [:K_DO, :"実行"],
    :else => [:K_ELSE, :"違えば"],
    :elsif => [:K_ELSIF, :"それとも"],
    :end => [:K_END, :"此処迄"],
    :ensure => [:K_ENSURE, :"必ず実行"],
    :false => [:K_FALSE, :"偽"],
    :for => [:K_FOR, :"変数"],
    :if => [:K_IF, :"若し"],
    :in => [:K_IN, :"の次の値ごとに"],
    :module => [:K_MODULE, :"モジュール"],
    :next => [:K_NEXT, :"次"],
    :nil => [:K_NIL, :"無"],
    :not => [:K_NOT, :"ノット"],
    :or => [:K_OR, :"又は"],
    :redo => [:K_REDO, :"遣り直す"],
    :rescue => [:K_RESCUE, :"救出"],
    :retry => [:K_RETRY, :"再び試みる"],
    :return => [:K_RETURN, :"戻る"],
    :self => [:K_SELF, :"自身"],
    :super => [:K_SUPER, :"スーパー"],
    :then => [:K_THEN, :"成らば"],
    :true => [:K_TRUE, :"真"],
    :undef => [:K_UNDEF, :"定義を取消す"],
    :unless => [:K_UNLESS, :"若し違えば"],
    :until => [:K_UNTIL, :"次の通りである限り"],
    :when => [:K_WHEN, :"場合"],
    :while => [:K_WHILE, :"次の通りで無い限り"],
    :yield => [:K_YIELD, :"ブロックを呼び出す"],
}

R数字行列 = {
"0" => "零",
"1" => "壹",
"2" => "貮",
"3" => "參",
"4" => "肆",
"5" => "伍",
"6" => "陸",
"7" => "漆",
"8" => "捌",
"9" => "玖",
}

R翻訳行列 = {
# Symbols
:+ => :+,
:- => :-,
:/ => :/,
:* => :*,
:** => :**,
:! => :!,
:^ => :^,
:& => :&,
:| => :|,
:~ => :~,
:> => :>,
:< => :<,
:<< => :<<,
:% => :%,
:"!=" => :"!=",
:"=~" => :"=~",
:"~=" => :"~=",
:">=" => :">=",
:"<=" => :"<=",
:"=" => :"=",
:"==" => :"==",
:"===" => :"===",
:"<=>" => :"<=>",
:"[]" => :"[]",
:"[]=" => :"[]=",
:"!~" => :"!~",
# Errors
:ArgumentError => :引数エラー,
:EncodingError => :文字コードエラー,
:FiberError => :ファイバーエラー,
:IOError => :入出エラー,
:IndexError => :添字エラー,
:LoadError => :読込エラー,
:LocalJumpError => :エラー,
:NameError => :未定義エラー,
:NoMemoryError => :メモリー不足エラー,
:NotImplementedError => :未実装エラー,
:RangeError => :範囲エラー,
:RegexpError => :正規表現エラー,
:RuntimeError => :実行時エラー,
:ScriptError => :スクリプトエラー,
:SecurityError => :セキュリティエラー,
:StandardError => :通常エラー,
:SyntaxError => :シンタクスエラー,
:ThreadError => :スレッドエラー,
:TypeError => :タイプエラー,
:ZeroDivisionError => :零除算エラー,
# Constants
:Array => :配列,
:BasicObject => :基本オブジェクト,
:Bignum => :多倍長整数,
:Class => :クラス,
:Complex => :複素数,
:Exception => :例外,
:FalseClass => :偽クラス,
:File => :ファイル,
:Fiber => :ファイバー,
:Fixnum => :固定長整数,
:Float => :浮動小数点数,
:Hash => :ハッシュ表,
:Integer => :整数,
:IO => :入出,
:Kernel => :中核,
:Marshal => :元帥,
:Math => :数学,
:Module => :モジュール,
:NilClass => :無クラス,
:Numeric => :数値,
:Object => :オブジェクト,
:Prime => :素数,
:Proc => :プロック,
:Process => :プロセス,
:Random => :乱数,
:Range => :範囲,
:Rational => :有理数,
:Regexp => :正規表現,
:Set => :集合,
:Socket => :ソケット,
:String => :文字列,
:Symbol => :シンボル,
:Time => :時刻,
:Thread => :スレッド,
:TrueClass => :真クラス,
# Kernel
:inspect => :検査,
:p => :表示,
:print => :書く,
:puts => :言う,
:require => :取り込む,
# Object
:freeze => :凍結,
# String
:gsub => :全文字列置換,
:gsub! => :全文字列置換せよ,
}


INT_TABLE = [
    [7, "倶胝"],
    [14, "阿庾多"],
    [28, "那由他"],
    [56, "頻波羅"],
    [112, "矜羯羅"],
    [224, "阿伽羅"],
    [448, "最勝"],
    [896, "摩婆羅"],
    [1792, "阿婆羅"],
    [3584, "多婆羅"],
    [7168, "界分"],
    [14336, "普摩"],
    [28672, "禰摩"],
    [57344, "阿婆鈐"],
    [114688, "弥伽婆"],
    [229376, "毘攞伽"],
    [458752, "毘伽婆"],
    [917504, "僧羯邏摩"],
    [1835008, "毘薩羅"],
    [3670016, "毘贍婆"],
    [7340032, "毘盛伽"],
    [14680064, "毘素陀"],
    [29360128, "毘婆訶"],
    [58720256, "毘薄底"],
    [117440512, "毘佉擔"],
    [234881024, "称量"],
    [469762048, "一持"],
    [939524096, "異路"],
    [1879048192, "顛倒"],
    [3758096384, "三末耶"],
    [7516192768, "毘睹羅"],
    [15032385536, "奚婆羅"],
    [30064771072, "伺察"],
    [60129542144, "周広"],
    [120259084288, "高出"],
    [240518168576, "最妙"],
    [481036337152, "泥羅婆"],
    [962072674304, "訶理婆"],
    [1924145348608, "一動"],
    [3848290697216, "訶理蒲"],
    [7696581394432, "訶理三"],
    [15393162788864, "奚魯伽"],
    [30786325577728, "達攞歩陀"],
    [61572651155456, "訶魯那"],
    [123145302310912, "摩魯陀"],
    [246290604621824, "懺慕陀"],
    [492581209243648, "瑿攞陀"],
    [985162418487296, "摩魯摩"],
    [1970324836974592, "調伏"],
    [3940649673949184, "離憍慢"],
    [7881299347898368, "不動"],
    [15762598695796736, "極量"],
    [31525197391593472, "阿麼怛羅"],
    [63050394783186944, "勃麼怛羅"],
    [126100789566373888, "伽麼怛羅"],
    [252201579132747776, "那麼怛羅"],
    [504403158265495552, "奚麼怛羅"],
    [1008806316530991104, "鞞麼怛羅"],
    [2017612633061982208, "鉢羅麼怛羅"],
    [4035225266123964416, "尸婆麼怛羅"],
    [8070450532247928832, "翳羅"],
    [16140901064495857664, "薜羅"],
    [32281802128991715328, "諦羅"],
    [64563604257983430656, "偈羅"],
    [129127208515966861312, "窣歩羅"],
    [258254417031933722624, "泥羅"],
    [516508834063867445248, "計羅"],
    [1033017668127734890496, "細羅"],
    [2066035336255469780992, "睥羅"],
    [4132070672510939561984, "謎羅"],
    [8264141345021879123968, "娑攞荼"],
    [16528282690043758247936, "謎魯陀"],
    [33056565380087516495872, "契魯陀"],
    [66113130760175032991744, "摩睹羅"],
    [132226261520350065983488, "娑母羅"],
    [264452523040700131966976, "阿野娑"],
    [528905046081400263933952, "迦麼羅"],
    [1057810092162800527867904, "摩伽婆"],
    [2115620184325601055735808, "阿怛羅"],
    [4231240368651202111471616, "醯魯耶"],
    [8462480737302404222943232, "薜魯婆"],
    [16924961474604808445886464, "羯羅波"],
    [33849922949209616891772928, "訶婆婆"],
    [67699845898419233783545856, "毘婆羅"],
    [135399691796838467567091712, "那婆羅"],
    [270799383593676935134183424, "摩攞羅"],
    [541598767187353870268366848, "娑婆羅"],
    [1083197534374707740536733696, "迷攞普"],
    [2166395068749415481073467392, "者麼羅"],
    [4332790137498830962146934784, "駄麼羅"],
    [8665580274997661924293869568, "鉢攞麼陀"],
    [17331160549995323848587739136, "毘迦摩"],
    [34662321099990647697175478272, "烏波跋多"],
    [69324642199981295394350956544, "演説"],
    [138649284399962590788701913088, "無尽"],
    [277298568799925181577403826176, "出生"],
    [554597137599850363154807652352, "無我"],
    [1109194275199700726309615304704, "阿畔多"],
    [2218388550399401452619230609408, "青蓮華"],
    [4436777100798802905238461218816, "鉢頭摩"],
    [8873554201597605810476922437632, "僧祇"],
    [17747108403195211620953844875264, "趣"],
    [35494216806390423241907689750528, "至"],
    [70988433612780846483815379501056, "阿僧祇"],
    [141976867225561692967630759002112, "阿僧祇転"],
    [283953734451123385935261518004224, "無量"],
    [567907468902246771870523036008448, "無量転"],
    [1135814937804493543741046072016896, "無辺"],
    [2271629875608987087482092144033792, "無辺転"],
    [4543259751217974174964184288067584, "無等"],
    [9086519502435948349928368576135168, "無等転"],
    [18173039004871896699856737152270336, "不可数"],
    [36346078009743793399713474304540672, "不可数転"],
    [72692156019487586799426948609081344, "不可称"],
    [145384312038975173598853897218162688, "不可称転"],
    [290768624077950347197707794436325376, "不可思"],
    [581537248155900694395415588872650752, "不可思転"],
    [1163074496311801388790831177745301504, "不可量"],
    [2326148992623602777581662355490603008, "不可量転"],
    [4652297985247205555163324710981206016, "不可説"],
    [9304595970494411110326649421962412032, "不可説転"],
    [18609191940988822220653298843924824064, "不可説不可説"],
    [37218383881977644441306597687849648128, "不可説不可説転"],
].reverse

Rしヴぁう = {
    :b => :u,
    :c => :u,
    :d => :o,
    :f => :u,
    :g => :u,
    :h => :u,
    :j => :u,
    :k => :u,
    :l => :u,
    :m => :u,
    :n => :u,
    :p => :u,
    :q => :u,
    :r => :u,
    :s => :u,
    :t => :o,
    :v => :u,
    :w => :u,
    :x => :u,
    :y => :u,
    :z => :u,
}

R = {
    :a  => :あ, :i  => :い, :u  => :う, :e  => :え, :o  => :お,
    :ba => :ば, :bi => :び, :bu => :ぶ, :be => :べ, :bo => :ぼ,
    :ca => :か, :ci => :き, :cu => :く, :ce => :け, :co => :こ,
    :da => :だ, :di => :どぃ, :du => :どぅ, :de => :で, :do => :ど,
    :fa => :ふぁ, :fi => :ふぃ, :fu => :ふ, :fe => :ふぇ, :fo => :ふぉ,
    :ga => :が, :gi => :ぎ, :gu => :ぐ, :ge => :げ, :go => :ご,
    :ha => :は, :hi => :ひ, :hu => :ふ, :he => :へ, :ho => :ほ,
    :ja => :じぁ, :ji => :じ, :ju => :じぅ, :je => :じぇ, :jo => :じぉ,
    :ka => :か, :ki => :き, :ku => :く, :ke => :け, :ko => :こ,
    :la => :ら, :li => :り, :lu => :る, :le => :れ, :lo => :ろ,
    :ma => :ま, :mi => :み, :mu => :む, :me => :め, :mo => :も,
    :na => :な, :ni => :に, :nu => :ぬ, :ne => :ね, :no => :の,
    :pa => :ぱ, :pi => :ぴ, :pu => :ぷ, :pe => :ぺ, :po => :ぽ,
    :qa => :か, :qi => :き, :qu => :く, :qe => :け, :qo => :こ,
    :ra => :ら, :ri => :り, :ru => :る, :re => :れ, :ro => :ろ,
    :sa => :さ, :si => :すぃ, :su => :す, :se => :せ, :so => :そ,
    :ta => :た, :ti => :てぃ, :tu => :とぅ, :te => :て, :to => :と,
    :va => :ヴぁ, :vi => :ヴぃ, :vu => :ヴぅ, :ve => :ヴぇ, :vo => :ヴぉ,
    :wa => :わ, :wi => :ゐ, :wu => :ゐぅ, :we => :ゑ, :wo => :を,
    :xa => :くさ, :xi => :くすぃ, :xu => :くす, :xe => :くせ, :xo => :くそ,
    :ya => :いぁ, :yi => :いぃ, :yu => :いぅ, :ye => :いぇ, :yo => :いぉ,
    :za => :ざ, :zi => :ずぃ, :zu => :ず, :ze => :ぜ, :zo => :ぞ,
}

R = {
:が => :ガ,:ぎ => :ギ,:ぐ => :グ,:げ => :ゲ,:ご => :ゴ,
:ざ => :ザ,:じ => :ジ,:ず => :ズ,:ぜ => :ゼ,:ぞ => :ゾ,
:だ => :ダ,:ぢ => :ヂ,:づ => :ヅ,:で => :デ,:ど => :ド,
:ば => :バ,:び => :ビ,:ぶ => :ブ,:べ => :ベ,:ぼ => :ボ,
:ぱ => :パ,:ぴ => :ピ,:ぷ => :プ,:ぺ => :ペ,:ぽ => :ポ,
:あ => :ア,:い => :イ,:う => :ウ,:え => :エ,:お => :オ,
:か => :カ,:き => :キ,:く => :ク,:け => :ケ,:こ => :コ,
:さ => :サ,:し => :シ,:す => :ス,:せ => :セ,:そ => :ソ,
:た => :タ,:ち => :チ,:つ => :ツ,:て => :テ,:と => :ト,
:な => :ナ,:に => :ニ,:ぬ => :ヌ,:ね => :ネ,:の => :ノ,
:は => :ハ,:ひ => :ヒ,:ふ => :フ,:へ => :ヘ,:ほ => :ホ,
:ま => :マ,:み => :ミ,:む => :ム,:め => :メ,:も => :モ,
:ら => :ラ,:り => :リ,:る => :ル,:れ => :レ,:ろ => :ロ,
:わ => :ワ,:を => :ヲ,:ゑ => :ヱ,:ゐ => :ヰ,:ヴ => :ヴ,
:ぁ => :ァ,:ぃ => :ィ,:ぅ => :ゥ,:ぇ => :ェ,:ぉ => :ォ,
:ゃ => :ャ,:ゅ => :ュ,:ょ => :ョ,
:や => :ヤ,:ゆ => :ユ,:よ => :ヨ,
:ん => :ン,:っ => :ッ,:ゎ => :ヮ,
}


def 鍵文字を登録
    R鍵文字.each_pair do |甲,乙|
        Unparser::Constants.const_set 乙[0], 乙[1].to_s
        Unparser::Emitter::REGISTRY[乙[1].to_sym] = Unparser::Emitter::REGISTRY[甲.to_sym]
    end
    Unparser::Emitter::Repetition::MAP[:while] = R鍵文字[:while][1].to_s
    Unparser::Emitter::Repetition::MAP[:until] = R鍵文字[:until][1].to_s
    Unparser::Emitter::FlowModifier::MAP[:return] = R鍵文字[:return][1].to_s
    Unparser::Emitter::FlowModifier::MAP[:next] = R鍵文字[:next][1].to_s
    Unparser::Emitter::FlowModifier::MAP[:break] = R鍵文字[:break][1].to_s
    Unparser::Emitter::FlowModifier::MAP[:or] = R鍵文字[:or][1].to_s
    Unparser::Emitter::FlowModifier::MAP[:and] = R鍵文字[:and][1].to_s
    Unparser::Emitter::FlowModifier::MAP[:BEGIN] = R鍵文字[:BEGIN][1].to_s
    Unparser::Emitter::FlowModifier::MAP[:END] = R鍵文字[:END][1].to_s
end

class Float
    def inspect
        フロートの文字化(self)
    end
end
class BigDecimal
    def inspect
        フロートの文字化(self.to_s('F'))
    end
end
class Integer
    def inspect
        整数の文字化(self)
    end
end
class Fixnum
    def inspect
        整数の文字化(self)
    end
end
class Bignum
    def inspect
        整数の文字化(self)
    end
end

def 整数の文字化(整数)
    数字 = 整数.to_s
    if 数字.size <= 7
        return 数字.chars.map{|甲|R数字行列[甲]}.join
    else
         = INT_TABLE.find{|甲|甲[0] < 数字.size}
        整数の文字化(数字[0...-乙[0]]) + 乙[1] +  整数の文字化(数字[(-乙[0])..-1])
    end
end
def フロートの文字化(フロート)
     = フロート.to_s.split(?.)
    甲[0] = 整数の文字化(甲[0])
    甲[1] = 甲[1].chars.map{|乙|R数字行列[乙]}.join
    甲.join(?点)
end

def 文字を翻訳(文字)
    平片 = :hira
    文字.scan(/([^aeiou])?(\1)?([yj])?([aeiou])?/i).map do |子音甲,子音乙,子音丙,母音|
        母音 = 母音.to_s
        if 子音甲.nil? && 母音.empty?
            nil
        else
            平片 = :kata if (子音甲||母音).downcase!=(子音甲||母音)
            子音甲,子音乙,子音丙,母音 = [子音甲,子音乙,子音丙,母音].map{|x| x ? x.downcase : x }
            if 母音.empty?
                母音 = Rしヴぁう[子音甲.to_sym].to_s
            end
            # hu => ひゅ, qu => きゅ
            if 母音=="u" && (子音甲=="h"||子音甲=="q")
                子音丙 = "y"
            end
            # ja,ju,jo => じゃ、じゅ,じょ
            if (母音=="a"||母音=="u"||母音=="o") && 子音甲 == "j"
                子音丙 = "y"
            end
            # 拗音
            if 子音丙
                if [:a,:u,:o].include?(母音)
                    子音丙 = case 母音
                    when :a ; :ゃ
                    when :u ; :ゅ
                    when :o ; :ょ
                    end
                    母音 = :i
                else
                    子音丙 = nil
                end
            end
            # basic syllable
            仮名 = R平[(子音甲.to_s+母音).to_sym].to_s
            # 促音
            if 子音乙
                if %w[ま         の].include?(子音乙)
                    仮名 = "ん" + 仮名
                else
                    仮名 = "っ" + 仮名
                end
            end
            # 拗音
            if 子音丙
                仮名 = 仮名 + 子音丙
            end
            # lowercase => hiragana, uppercase => katakana
            if 平片==:kata
                仮名 = 仮名.gsub(/./){|丁|R片[丁.to_sym]}.to_s
            end
            仮名
        end
    end.compact.join
end

def 文を翻訳(文)
    文.scan(/(([a-z]+|[0-9]+|[^a-z0-9]+))/i).map do |文字,_|
        if 文字.index(/[a-z]/i)
            文字を翻訳(文字)
        elsif 文字.index(/[0-9]/)
            整数の文字化(文字)
        else
            文字
        end
    end.compact.join
end

def 翻訳(文章=nil)
    if 文章.empty? || 文章.nil?
        文章
    else
        if  = R翻訳行列[文章.to_sym]
             
        elsif  = R翻訳メモリー[文章]
            
        else   
             = 文を翻訳(文章.to_s)        
            R翻訳メモリー[文章] = 
        end
    end
end

def ノード毎に(幹,&塊)
    if 幹.is_a? Parser::AST::Node
        子供 = 幹.children
        yield 幹.type,子供
        幹.children.each{|甲|ノード毎に(甲,&塊)}
        if  = R鍵文字[幹.type] 
            幹.instance_variable_set(:@type,甲[1]) if [:self,:true,:false,:nil].include?(幹.type)
        end
    end
end

def 幹を翻訳(幹)
    ノード毎に(幹) do |類,子|
        case 
        when :arg
            子[0] = 翻訳(子[0]).to_sym
        when :blockarg
            子[0] = 翻訳(子[0]).to_sym
        when :casgn
            子[1] = ('C_'+翻訳(子[1]).to_s).to_sym
        when :const
            子[1] = 翻訳(子[1]).to_sym
        when :def
            子[0] = 翻訳(子[0]).to_sym      
        when :int
        when :kwoptarg
            子[0] = 翻訳(子[0]).to_sym
        when :lvar
            子[0] = 翻訳(子[0]).to_sym
        when :lvasgn
            子[0] = 翻訳(子[0]).to_sym
        when :optarg
            子[0] = 翻訳(子[0]).to_sym
        when :restarg
            子[0] = 翻訳(子[0]).to_sym
        when :send
            子[1] = 翻訳(子[1]).to_sym
        when :str
            子[0] = 翻訳(子[0]).to_s
        when :sym
            子[0] = 翻訳(子[0]).to_sym
        end
    end
end

def ノートを翻訳(ノート)
    ノート.each do |子|
        テキスト = 子.text
        if テキスト[0] == '#'
            子.instance_variable_set(:@text,"#" + 翻訳(テキスト[1..-1]))
        else
            子.instance_variable_set(:@text,"=開始\n" + 翻訳(テキスト[6..-6]) + "\n=此処迄\n")
        end
    end
end

########
# main #
########

# register keywords
鍵文字を登録
# read input, translate, and print result
コード = STDIN.read
コード.encode(Encoding::UTF_8)
コード = "#encoding:utf-8\n" + コード
幹, ノート = Parser::CurrentRuby.parse_with_comments(コード)
幹を翻訳(幹)
ノートを翻訳(ノート)
STDOUT.write Unparser.unparse(幹,ノート)

ทำงานด้วยตัวเองไม่ใช้ตารางการแปล ฯลฯ :

#えぬこどぃぬぐ:うとふ-捌
# えぬこどぃぬぐ:うとふ-捌
取り込む("ぱるせる/くっれぬと")
# すぺる はくく, どぬ'と とる とひす あと ほめ!!
クラス 配列
  定義 凍結
    自身
  此処迄
此処迄
クラス ハッシュ表
  定義 凍結
    自身
  此処迄
此処迄
クラス パルセル::アスト::ノデ
  定義 凍結
    自身
  此処迄
此処迄
取り込む("うぬぱるせる")
クラス パルセル::ソウルケ::コッメヌト
  定義 凍結
    自身
  此処迄
此処迄
定義 鍵文字を登録
  ル鍵文字.えあくふ_ぱいる 実行 |甲, 乙|
    ウヌパルセル::コヌスタヌトス.こぬすと_せと(乙[零], 乙[壹].と_す)
    ウヌパルセル::エミッテル::レギストル[乙[壹].と_すむ] = ウヌパルセル::エミッテル::レギストル[甲.と_すむ]
  此処迄
  ウヌパルセル::エミッテル::レペティティオヌ::マプ[:ゐぅひれ] = ル鍵文字[:ゐぅひれ][壹].と_す
  ウヌパルセル::エミッテル::レペティティオヌ::マプ[:うぬてぃる] = ル鍵文字[:うぬてぃる][壹].と_す
  ウヌパルセル::エミッテル::フロヰゥモドィフィエル::マプ[:れとぅるぬ] = ル鍵文字[:れとぅるぬ][壹].と_す
  ウヌパルセル::エミッテル::フロヰゥモドィフィエル::マプ[:ねくすと] = ル鍵文字[:ねくすと][壹].と_す
  ウヌパルセル::エミッテル::フロヰゥモドィフィエル::マプ[:ぶれあく] = ル鍵文字[:ぶれあく][壹].と_す
  ウヌパルセル::エミッテル::フロヰゥモドィフィエル::マプ[:おる] = ル鍵文字[:おる][壹].と_す
  ウヌパルセル::エミッテル::フロヰゥモドィフィエル::マプ[:あぬど] = ル鍵文字[:あぬど][壹].と_す
  ウヌパルセル::エミッテル::フロヰゥモドィフィエル::マプ[:ベギヌ] = ル鍵文字[:ベギヌ][壹].と_す
  ウヌパルセル::エミッテル::フロヰゥモドィフィエル::マプ[:エヌド] = ル鍵文字[:エヌド][壹].と_す
此処迄
クラス 浮動小数点数
  定義 検査
    フロートの文字化(自身)
  此処迄
此処迄
クラス ビグデキマル
  定義 検査
    フロートの文字化(自身.と_す("フ"))
  此処迄
此処迄
クラス 整数
  定義 検査
    整数の文字化(自身)
  此処迄
此処迄
クラス 固定長整数
  定義 検査
    整数の文字化(自身)
  此処迄
此処迄
クラス 多倍長整数
  定義 検査
    整数の文字化(自身)
  此処迄
此処迄
定義 整数の文字化(整数)
  数字 = 整数.と_す
  若し (数字.すぃぜ <= 漆)
    戻る 数字.くはるす.まぷ 実行 |甲|
      ル数字行列[甲]
    此処迄.じぉいぬ
  違えば
    乙 = イヌト_タブレ.ふぃぬど 実行 |甲|
      甲[零] < 数字.すぃぜ
    此処迄
    (整数の文字化(数字[零...(-乙[零])]) + 乙[壹]) + 整数の文字化(数字[(-乙[零])..壹])
  此処迄
此処迄
定義 フロートの文字化(フロート)
  甲 = フロート.と_す.すぷりと(".")
  甲[零] = 整数の文字化(甲[零])
  甲[壹] = 甲[壹].くはるす.まぷ 実行 |乙|
    ル数字行列[乙]
  此処迄.じぉいぬ
  甲.じぉいぬ("点")
此処迄
定義 文字を翻訳(文字)
  平片 = :ひら
  文字.すかぬ(/([^あえいおう])?(\壹)?([いぅ])?([あえいおう])?/i).まぷ 実行 |子音甲, 子音乙, 子音丙, 母音|
    母音 = 母音.と_す
    若し (子音甲.にる? && 母音.えむぷと?)
      無
    違えば
      若し ((子音甲 || 母音).どゐぅぬかせ != (子音甲 || 母音))
        平片 = :かた
      此処迄
      子音甲, 子音乙, 子音丙, 母音 = [子音甲, 子音乙, 子音丙, 母音].まぷ 実行 |くす|
        若し くす
          くす.どゐぅぬかせ
        違えば
          くす
        此処迄
      此処迄
      若し 母音.えむぷと?
        母音 = ルしヴぁう[子音甲.と_すむ].と_す
      此処迄
      # ふ => ひゅ, く => きゅ
      若し ((母音 == "う") && ((子音甲 == "ふ") || (子音甲 == "く")))
        子音丙 = "いぅ"
      此処迄
      # じぁ,じぅ,じぉ => じゃ、じゅ,じょ
      若し ((((母音 == "あ") || (母音 == "う")) || (母音 == "お")) && (子音甲 == "じぅ"))
        子音丙 = "いぅ"
      此処迄
      # 拗音
      若し 子音丙
        若し [:あ, :う, :お].いぬくるで?(母音)
          子音丙 = 条件分岐 母音
          場合 :あ
            :ゃ
          場合 :う
            :ゅ
          場合 :お
            :ょ
          此処迄
          母音 = :い
        違えば
          子音丙 = 無
        此処迄
      此処迄
      # ばすぃく すっらぶれ
      仮名 = ル平[(子音甲.と_す + 母音).と_すむ].と_す
      # 促音
      若し 子音乙
        若し ["ま", "み", "む", "め", "も", "な", "に", "ぬ", "ね", "の"].いぬくるで?(子音乙)
          仮名 = ("ん" + 仮名)
        違えば
          仮名 = ("っ" + 仮名)
        此処迄
      此処迄
      # 拗音
      若し 子音丙
        仮名 = (仮名 + 子音丙)
      此処迄
      # ろゑるかせ => ひらがな, うっぺるかせ => かたかな
      若し (平片 == :かた)
        仮名 = 仮名.全文字列置換(/./) 実行 |丁|
          ル片[丁.と_すむ]
        此処迄.と_す
      此処迄
      仮名
    此処迄
  此処迄.こむぱくと.じぉいぬ
此処迄
定義 文を翻訳(文)
  文.すかぬ(/(([あ-ず]+|[零-玖]+|[^あ-ず零-玖]+))/i).まぷ 実行 |文字, _|
    若し 文字.いぬでくす(/[あ-ず]/i)
      文字を翻訳(文字)
    違えば
      若し 文字.いぬでくす(/[零-玖]/)
        整数の文字化(文字)
      違えば
        文字
      此処迄
    此処迄
  此処迄.こむぱくと.じぉいぬ
此処迄
定義 翻訳(文章 = 無)
  若し (文章.えむぷと? || 文章.にる?)
    文章
  違えば
    若し (甲 = ル翻訳行列[文章.と_すむ])
      甲
    違えば
      若し (甲 = ル翻訳メモリー[文章])
        甲
      違えば
        甲 = 文を翻訳(文章.と_す)
        ル翻訳メモリー[文章] = 甲
      此処迄
    此処迄
  此処迄
此処迄
定義 ノード毎に(幹, &塊)
  若し 幹.いす_あ?(パルセル::アスト::ノデ)
    子供 = 幹.くひるどれぬ
    ブロックを呼び出す(幹.とぺ, 子供)
    幹.くひるどれぬ.えあくふ 実行 |甲|
      ノード毎に(甲, &塊)
    此処迄
    若し (甲 = ル鍵文字[幹.とぺ])
      若し [:せるふ, :とるえ, :ふぁるせ, :にる].いぬくるで?(幹.とぺ)
        幹.いぬすたぬけ_ヴぁりあぶれ_せと(:@とぺ, 甲[壹])
      此処迄
    此処迄
  此処迄
此処迄
定義 幹を翻訳(幹)
  ノード毎に(幹) 実行 |類, 子|
    条件分岐 類
    場合 :あるぐ
      子[零] = 翻訳(子[零]).と_すむ
    場合 :ぶろくかるぐ
      子[零] = 翻訳(子[零]).と_すむ
    場合 :かすぐぬ
      子[壹] = ("ク_" + 翻訳(子[壹]).と_す).と_すむ
    場合 :こぬすと
      子[壹] = 翻訳(子[壹]).と_すむ
    場合 :でふ
      子[零] = 翻訳(子[零]).と_すむ
    場合 :いぬと
    場合 :くをぷたるぐ
      子[零] = 翻訳(子[零]).と_すむ
    場合 :るヴぁる
      子[零] = 翻訳(子[零]).と_すむ
    場合 :るヴぁすぐぬ
      子[零] = 翻訳(子[零]).と_すむ
    場合 :おぷたるぐ
      子[零] = 翻訳(子[零]).と_すむ
    場合 :れすたるぐ
      子[零] = 翻訳(子[零]).と_すむ
    場合 :せぬど
      子[壹] = 翻訳(子[壹]).と_すむ
    場合 :すとる
      子[零] = 翻訳(子[零]).と_す
    場合 :すむ
      子[零] = 翻訳(子[零]).と_すむ
    此処迄
  此処迄
此処迄
定義 ノートを翻訳(ノート)
  ノート.えあくふ 実行 |子|
    テキスト = 子.てくすと
    若し (テキスト[零] == "#")
      子.いぬすたぬけ_ヴぁりあぶれ_せと(:@てくすと, "#" + 翻訳(テキスト[壹..壹]))
    違えば
      子.いぬすたぬけ_ヴぁりあぶれ_せと(:@てくすと, ("=開始\n" + 翻訳(テキスト[陸..陸])) + "\n=此処迄\n")
    此処迄
  此処迄
此処迄
########
# まいぬ #
########
# れぎすてる けいぅをるどす
鍵文字を登録
# れあど いぬぷと, とらぬすらて, あぬど ぷりぬと れすると
コード = ストドィヌ.れあど
コード.えぬこで(エヌコドィヌグ::ウトフ_捌)
コード = ("#えぬこどぃぬぐ:うとふ-捌\n" + コード)
幹, ノート = パルセル::クッレヌトルブ.ぱるせ_ゐとふ_こっめぬとす(コード)
幹を翻訳(幹)
ノートを翻訳(ノート)
ストドウト.ゐぅりて(ウヌパルセル.うぬぱるせ(幹, ノート))

หรือ

# Output "I love Ruby"
say = "I love Ruby"
puts say

# Output "I *LOVE* RUBY"
say['love'] = "*love*"
puts say.upcase

# Output "I *love* Ruby"
# five times
5.times { puts say }

กลายเป็น

#えぬこどぃぬぐ:うとふ-捌
# オウトプト "イ ろヴぇ ルブ"
さいぅ = "イ ろヴぇ ルブ"
言う(さいぅ)
# オウトプト "イ *ロヴェ* ルブ"
さいぅ["ろヴぇ"] = "*ろヴぇ*"
言う(さいぅ.うぷかせ)
# オウトプト "イ *ろヴぇ* ルブ"
# ふぃヴぇ てぃめす
伍.てぃめす 実行
  言う(さいぅ)
此処迄

8
ดูเหมือนว่าผิดธรรมชาติมากในการประมาณภาษาอังกฤษโดยใช้ฮิรางานะมากกว่าคาตาคานะ (ไม่ว่าแมปจะหลวมแค่ไหน)
เตฟาน

8

HTML5 / Javascript เป็นภาษาฝรั่งเศส (HTML5 avec le Script au Caoua)

<script>
    var a = document.currentScript.outerHTML;
    การแจ้งเตือน (a.replace (/ var a / g, "la variable « a »")
    .replace (/ แจ้งเตือน \ (/ g "แจ้งเตือน (")
    .replace (/ = / g, "est")
    .replace (/ outerHTML / g "HTMLExtérieur")
    .replace (/ \. แทนที่ \ ((. +) \, (. +) \) / g, "avec $ 1 remplacé par $ 2")
    .replace (/ \ / \ * และ \ * \ // g, "et")
    .replace (/"(.+?)"/ กรัม "«$ 1»")
    /*and*/.replace(/currentScript/g,"scriptCourant ")
    );
</ script>

เอาท์พุท:

<script>
    la ตัวแปร« a » est document.scriptCourant.HTMLExtérieur;
    Alerter (ตัวแปร avec / la « a » / g remplacé par « la variable « a »»
     avec / alert \ (/ g remplacé par « alerter (»
     avec / est / g remplacé par « est »
     avec / HTMLExtérieur / g remplacé par «HTMLExtérieur»
     avec /\.replace\((.+)\,(.+)\)/g remplacé par « avec $ 1 remplacé par $ 2 »
     avec / \ / \ * and \ * \ // g remplacé par « et »
     avec / เปื้อน(.+?)///gremplacé par «« $ 1 »»
     et avec / scriptCourant / g remplacé par « scriptCourant »
    );
</ script>

1
ฉันชอบวิธีที่คุณทำใหม่ไวยากรณ์เป็นภาษาฝรั่งเศสมากขึ้น! แต่ชื่อภาษาฝรั่งเศสไม่ได้มีความหมายว่า " CoffeeScript " จริง ๆหรือ
DLosc

ใช่แล้ว แต่นั่นเป็นสิ่งที่ดีที่สุดที่ฉันสามารถนึกได้ในเวลานั้น คุณมีข้อเสนอแนะที่ดีกว่า
SuperJedi224

1
"HTML5 avec le Script au Café de Java" เป็นเฮฮา: D เรามีคำที่คล้ายกัน (ที่เกี่ยวข้อง?) สำหรับ "กาแฟ": caoua ("ka-wa")
Quentin

3
ฉันชอบการใช้ guillemets
TRiG

1
มันควรจะเป็นตัวแปรลาไม่le
Léoลำ

8

JavaScript, ฝรั่งเศส - CauoaScript

var input = prompt('Enter code');

var translations = {
  'alert': 'informe',
  'code': 'le code',
  'else': 'sinon',
  'Enter': 'Entrez',
  'if': 'si',
  'input': 'donnée',
  'function': 'fonction',
  'output': 'résultat',
  'prompt': 'soulève',
  'replace': 'remplace',
  'replacement': 'pièceDeReplacement',
  'return': 'remet',
  'translate': 'traduit',
  'translations': 'traductions',
  'typeof': 'typede',
  'undefined': 'indéterminé',
  'var': 'var',
  'w': 'm', // word
  'word': 'mot'
};

var output = input.replace(/(["'])(.*?[^\\])?\1/g, '« $2 »')
.replace(/\w+/g, function(word) {
  var replacement = translations[word];
  if (typeof replacement != 'undefined') {
    return replacement;
  } else {
    return word;
  }
});

alert(output);

ฉันรู้ว่ามีคำตอบ JavaScript + ภาษาฝรั่งเศสอยู่แล้ว แต่ของฉันใช้วิธีการแปลและการเข้ารหัสที่แตกต่างกัน

รหัสค่อนข้างตรงไปตรงมา: มันวนซ้ำทุกคำในรหัสที่ป้อนและแทนที่ด้วยคำภาษาฝรั่งเศสที่สอดคล้องกันจากtranslationsวัตถุ หากคำไม่ได้อยู่ในรายการก็จะไม่เปลี่ยนแปลง

ภาษาฝรั่งเศสใช้« Guillemets »แทนเครื่องหมายอัญประกาศดังนั้นจึงทำให้สตริงใช้สิ่งเหล่านั้นก่อน (ใช่มันใช้regu͘͜l̴͝a͘͜͠r͏͏̶̸͢e̵͜x̸͝pr̵͞͞e͘͘s̵ś̸̷i͝o̴ns̴͜ในการแยกวิเคราะห์สตริงดังนั้นมันจึงใช้งานไม่ได้อย่างสมบูรณ์) นี่คือผลลัพธ์เมื่อทำงานกับตัวเอง:

var donnée = soulève(« Entrez le code »);

var traductions = {
  « informe »: « informe »,
  « le code »: « le le code »,
  ...
  « mot »: « mot »
};

var résultat = donnée.remplace(/(["« ])(.*?[^\\])?\1/g,  »« $2 »')
.remplace(/\m+/g, fonction(mot) {
  var pièceDeReplacement = traductions[mot];
  si (typede pièceDeReplacement != « indéterminé ») {
    remet pièceDeReplacement;
  } sinon {
    remet mot;
  }
});

informe(résultat);

คุณสามารถใช้กองย่อยตัวอย่างด้านล่างเพื่อเรียกใช้รหัสได้อย่างง่ายดาย


3
Oui, tres bien
Alex A.

คุณควรเพิ่มช่องว่างหลังเครื่องหมายวรรคตอน - ดูดีกว่า XD
Conor O'Brien

7

Commodore 64 BASIC - บอสเนีย / โครเอเชีย / เซอร์เบีย

10 FOR I=40960 TO 49151:POKE I,PEEK(I):NEXT
20 DATA "KRAJ","ZA","OPET","PODACI","UZM#","UZMI","DIM","CITAJ","DE"
30 DATA "HAJD","TRCI","AKO","VRATI","IDIU","NAZAD","KOM","STOJ","NA"
40 DATA "CEKAJ","UCITAJ","SPASI","VIDI","DEF","GURNI","PIS#","PISI"
50 DATA "NAST","POPIS","BRIS","KOM","SIS","OTVORI","ZATVORI","UZMI"
60 DATA "NOV","TAB(","DO","FU","RAZ(","ONDA","NE","KORAK","+","-"
70 DATA "*","/","↑","I","ILI",">","=","<","ZN","C","ABS","KOR"
80 DATA "SLO","POZ","KOR","SLU","LOG","EKS","KOS","SIN","TAN","ATN"
90 DATA "VIRI","DUZ","NIZ$","VRI","ASK","KAR$","LEVO$","DESNO$","SRE$"
100 DATA "ID",""
110 D=41118
120 READ A$
130 IF A$="" THEN 210
140 L=LEN(A$)
150 IF L=1 THEN 190
160 FOR I=1 TO L-1
170 POKE D,ASC(MID$(A$,I,1)):D=D+1
180 NEXT
190 POKE D,ASC(MID$(A$,L,1))+128:D=D+1
200 GOTO 120
210 POKE 1, PEEK(1) AND 254

สิ่งนี้จะแทนที่คำหลักพื้นฐานด้วยคำที่แปลดังนั้นคุณ สามารถ จะต้องใช้พวกเขาเมื่อคุณเขียนรหัสใหม่

ภาษาบอสเนีย

มันทำงานอย่างไร?

FOR I=40960 TO 49151:POKE I,PEEK(I):NEXT

แม้ว่าจะปรากฏว่าบรรทัดนี้ไม่ได้ทำอะไรมากมาย แต่ในความเป็นจริงก็อปปี้ไบต์จาก BASIC ROM ถึง RAM ข้อมูลที่เขียนไปยังตำแหน่ง ROM จะถูกเก็บไว้ใน RAM ตามที่อยู่เดียวกัน

บรรทัดสุดท้ายในโปรแกรมสลับเป็นสำเนา RAM ของ BASIC:

POKE 1,PEEK(1) AND 254

หน่วยความจำ 41118-41373 มีรายการคำหลักพื้นฐานที่สงวนไว้ทั้งหมด อักขระ ASCII ของคำเหล่านี้ถูกจัดเก็บในลำดับเลขโทเค็น บิต # 7 ของตัวอักษรสุดท้ายของแต่ละคำถูกตั้งค่าเพื่อระบุจุดสิ้นสุดของคำ (ค่า ASCII + 128)

บรรทัดที่ 20-100 มีคำหลักที่แปล บรรทัดที่ 110-200 อ่านคำหลักในหน่วยความจำตามที่อธิบายไว้ข้างต้น


5
คุณอาจเป็นคนแรกที่โค้ดทำงานหลังจากการเปลี่ยนแปลง!
CJ Dennis

เมื่อผู้สร้าง C64 BASIC ทำงานให้เสร็จเขาก็ยืนขึ้นและประกาศว่า "ฉันอยากได้วันที่ผู้คนสามารถเขียนโปรแกรม C64 ในบอสเนีย" (ความอับอายที่เขาไม่ได้มีวิสัยทัศน์ดังกล่าวเกี่ยวกับ> 640K ของ RAM)
มาร์ค K แวนส์

แต่การแปลนั้นทำไว้ใน RAM และการรีบูตเครื่องจะทำให้ RAM ถูกลบใช่ไหม
แมว

5

PHP - โปรตุเกส (pt-PT / semi pt-BR)

สิ่งนี้กลายเป็นเรื่องที่ค่อนข้างซับซ้อนและเป็นยักษ์!

<?

    echo preg_replace_callback(
        '@\b([\wâêçãáú]+)\b|(?:[\$\>]|[=\.]=|=\>?|&&)@i',
        function($match){

            $word = $match[0];

            if($word == '_')
            {
                return '_';
            }

            $list = array(
                'echo' => 'ecoar',
                'match' => 'equivalência',
                'array' => 'conjunto',
                'file' => 'ficheiro',
                'replace' => 'substitui',
                'callback' => 'executável',
                'function' => 'função',
                'list' => 'lista',
                'if' => 'se',
                'else' => 'senão',
                'word' => 'palavra',
                'piece' => 'pedaço',
                'pieces' => 'pedaços',
                'explode' => 'explosão',
                'implode' => 'implosão',
                'count' => 'conta',
                'tmp' => 'temporário',
                'k' => 'chave',
                'get' => 'busca',
                'contents' => 'conteúdos',
                'preg' => 'expressão_regular',
                'as' => 'como',
                'return' => 'retorna',
                'use' => 'utiliza',
                'strtoupper' => 'corda_para_maiúscula',
                'strtolower' => 'corda_para_minúscula',
                'unset' => 'remover_definição',
                'isset' => 'está_definido',
                'str' => 'corda',
                '$' => '€',
                '.=' => '.=',
                '=>' => 'recebe',
                '==' => 'igual',
                '=' => 'atribuí',
                '>' => 'maior_que',
                '&&' => 'e'
            );

            if($word[0] == '_' && $word[1] == '_')
            {
                return preg_replace_callback(
                    '@([A-Z]+)@',
                    function($word) use (&$list){
                        return strtoupper($list[strtolower($word[1])]);
                    },
                    $word
                );
            }
            else
            {
                $word = explode('_', $word);
                $pieces = count($word);
                if( $pieces > 1 )
                {
                    $tmp = $word[0];
                    $word[0] = $word[1];
                    $word[1] = $tmp;
                    unset($tmp);
                }

                foreach($word as $k => $piece)
                {
                    $word[$k] = isset($list[$piece])?$list[$piece]:$piece;
                    if( $k == 0 && $pieces > 1 )
                    {
                        $word[$k] .= 'r';
                    }
                }

                return implode('_', $word);
            }
        },
        file_get_contents(__FILE__)
    );

จำไว้ว่ารหัสนี้ทำเพื่อให้ตรงกับตัวเอง! มันอาจทำงานบางส่วนกับรหัสอื่น ๆ


เอาต์พุตแปลแล้ว:

<?

    ecoar substituir_expressão_regular_executável(
        '@\b([\wâêçãáú]+)\b|(?:[\€\maior_que]|[atribuí\.]atribuí|atribuí\maior_que?|e)@i',
        função(€equivalência){

            €palavra atribuí €equivalência[0];

            se(€palavra igual '_')
            {
                retorna '_';
            }

            €lista atribuí conjunto(
                'ecoar' recebe 'ecoar',
                'equivalência' recebe 'equivalência',
                'conjunto' recebe 'conjunto',
                'ficheiro' recebe 'ficheiro',
                'substitui' recebe 'substitui',
                'executável' recebe 'executável',
                'função' recebe 'função',
                'lista' recebe 'lista',
                'se' recebe 'se',
                'senão' recebe 'senão',
                'palavra' recebe 'palavra',
                'pedaço' recebe 'pedaço',
                'pedaços' recebe 'pedaços',
                'explosão' recebe 'explosão',
                'implosão' recebe 'implosão',
                'conta' recebe 'conta',
                'temporário' recebe 'temporário',
                'chave' recebe 'chave',
                'busca' recebe 'busca',
                'conteúdos' recebe 'conteúdos',
                'expressão_regular' recebe 'regularr_expressão',
                'como' recebe 'como',
                'retorna' recebe 'retorna',
                'utiliza' recebe 'utiliza',
                'corda_para_maiúscula' recebe 'parar_corda_maiúscula',
                'corda_para_minúscula' recebe 'parar_corda_minúscula',
                'remover_definição' recebe 'definiçãor_remover',
                'está_definido' recebe 'definidor_está',
                'corda' recebe 'corda',
                '€' recebe '€',
                '.=' recebe '.=',
                'recebe' recebe 'recebe',
                'igual' recebe 'igual',
                'atribuí' recebe 'atribuí',
                'maior_que' recebe 'quer_maior',
                'e' recebe 'e'
            );

            se(€palavra[0] igual '_' e €palavra[1] igual '_')
            {
                retorna substituir_expressão_regular_executável(
                    '@([A-Z]+)@',
                    função(€palavra) utiliza (&€lista){
                        retorna corda_para_maiúscula(€lista[corda_para_minúscula(€palavra[1])]);
                    },
                    €palavra
                );
            }
            senão
            {
                €palavra atribuí explosão('_', €palavra);
                €pedaços atribuí conta(€palavra);
                se( €pedaços maior_que 1 )
                {
                    €temporário atribuí €palavra[0];
                    €palavra[0] atribuí €palavra[1];
                    €palavra[1] atribuí €temporário;
                    remover_definição(€temporário);
                }

                foreach(€palavra como €chave recebe €pedaço)
                {
                    €palavra[€chave] atribuí está_definido(€lista[€pedaço])?€lista[€pedaço]:€pedaço;
                    se( €chave igual 0 e €pedaços maior_que 1 )
                    {
                        €palavra[€chave] .= 'r';
                    }
                }

                retorna implosão('_', €palavra);
            }
        },
        buscar_ficheiro_conteúdos(__FICHEIRO__)
    );

ฉันพยายามเคารพหลักไวยากรณ์มากที่สุด

ตัวอย่างถูกต้องในบรรทัดแรก:

echo preg_replace_callback

เสียงก้องคือการกระทำและการกระทำเป็นคำกริยา rคำกริยาทั้งหมดในปลายโปรตุเกสด้วย
การแปลที่echoไม่มีบริบทจะเป็นecoในขณะที่อยู่ในบริบทจะต้องเป็นecoar(การทำเสียงสะท้อน)

นอกจากนี้ฟังก์ชั่นpreg_replace_callbackยังมีสิ่งที่เป็นเอกลักษณ์
การกระทำจะต้องเป็นคำแรก
แปลตามตัวอักษรมันจะเป็นexpressão_regular_substitui_executávelซึ่งแปลอย่างน่ากลัว! (หมายความว่าreplace the callback using a regular expression)
ดังนั้นต้องใช้ความระมัดระวังเป็นพิเศษและสลับคำที่หนึ่งและสองดังนั้นมันจึงsubstituir_expressão_regular_executávelเป็นสิ่งที่ดีกว่าเล็กน้อย

ฟังก์ชั่นอื่น ๆ เช่นcountถูกทิ้งไว้โดยไม่rทำให้คำสั่งระเบิด (เช่นถ้าคุณเป็นคนเจ้าระเบียบ)

คำบางคำเปิดออกแปลก ...
stringวิธีแต่ถ้าผมแปลได้อย่างถูกต้องก็จะเป็นcordacadeia contínua/ininterrupta de caracteres

เพิ่มในทุกสิ่งที่ฉันได้ก็แปลสัญลักษณ์บางอย่างและผู้ประกอบการ ( $, =, =>)
ขอบคุณ@DLoscสำหรับความคิดของการแปลลงใน$


2
คุณสามารถใช้สัญลักษณ์ทางการเงินโปรตุเกสแทน$คล้ายกับสิ่งที่ภาษานี้ได้
DLosc

@Losc ขอบคุณมากสำหรับความคิด ฉันไปข้างหน้าและแปลโอเปอเรเตอร์และสัญลักษณ์อื่น ๆ ด้วย
Ismael Miguel

4

Fondamentale Visuale .RETE - Visual Basic .NET แปลเป็นภาษาอิตาลี

โปรแกรมนี้ง่ายมาก (มุ่งเป้าไปที่การแปลเอง)

บางจุด:

  • I / O: นี่คือโมดูลที่มีฟังก์ชั่นที่ชัดเจนที่จะเรียก

  • ไวยากรณ์ส่วนใหญ่ถูกต้อง (รู้สึกเป็นธรรมชาติ)

  • ตำแหน่งคำศัพท์ภาษาอังกฤษและอิตาลีแตกต่างกันดังนั้นฉันจึงไม่สามารถเขียนฟังก์ชั่นบางอย่างเพื่อแก้ไขปัญหานั้นและคู่การแปลแบบคงที่ที่ต้องการได้

  • ฉันได้ผันคำกริยาที่จำเป็นให้กับบุคคลที่ 2 เช่นเดียวกับในการแปลภาษาอิตาลีตามตัวอักษรพวกเขาจะฟังดูและรู้สึกผิด (ผิดเหมือนกับ windows 8+ ที่พูดในคนที่ 1d)

  • คู่การแปลนั้นสับสนดังนั้นคนอังกฤษก็ไม่ได้แปลเช่นกัน ดังนั้นหากมีล่ามโปรแกรมแปลจะทำงานได้ ฉันเหลือเพียงบางส่วน"+"เพื่อหลีกเลี่ยงการ overtranslation (คำภาษาอังกฤษจำนวนมากที่มีอยู่ในคนอิตาเลียนดังนั้นมันจะจบลงด้วยการแปลอิตาลีเป็นอิตาลีด้วยซ้ำของคำต่อท้าย)

โมดูลภาษาอิตาลี

    โทเค็นสลัวเป็นรายการใหม่ (ของ Tuple (ของสตริงสตริง))

    ย่อย AddPair (a As String, b As String)
        โทเค็นเพิ่ม (Tuple.Create (a, b))
    ส่วนท้าย

    ย่อย init ()
        AddPair ("อิตาลี", "อิตาลี" + "ไม่"): AddPair ("โมดูล", "Modulo")
        AddPair ("ขาด", "ไม่ใช่ฮา"): AddPair ("AddPair", "AggiungiCoppia")
        AddPair ("อิตาเลียน", "l'italiano")
        AddPair ("ถัดไป", "Appresso"): AddPair ("โทเค็น", "Frammenti")
        AddPair ("init", "iniz"): AddPair ("As", "Come")
        AddPair ("Tuple", "Coppia"): AddPair ("สำหรับแต่ละคน", "Per Ogni")
        AddPair ("ของ", "Di"): AddPair ("เท่านั้น", "e basta")
        AddPair ("Sub", "Proc"): AddPair ("ดังนั้นฉันจะเพิ่ม", "quindi aggiungerò")
        AddPair ("Function", "Funzione"): AddPair ("Dim", "Def")
        AddPair ("a", "una"): AddPair ("support", "il s" + "upporto")
        AddPair ("ใช้ประเภท", "ฉัน tipi utilizzati")
        REM ภาษาอิตาลีขาดแบบฟอร์มเพศ - indipendent สำหรับคำคุณศัพท์
        REM ดังนั้นฉันจะเพิ่มการสนับสนุนสำหรับประเภทที่ใช้เท่านั้น
        AddPair ("รายการใหม่", "una Nuova Lista")
        AddPair ("สร้าง", "Crea"): AddPair ("End", "Fine")
        AddPair ("REM", "RIC"): AddPair ("สำหรับ", "ต่อ")
        AddPair ("รูปแบบเพศ - indipendent", "รูปแบบ indipendente dal genere")
        AddPair ("String", "Sequenza"): AddPair ("adjectives", "gli aggettivi")
        AddPair ("TranslateToItalian", "TraduciInItaliano")
    ส่วนท้าย

    ฟังก์ชัน TranslateToItalian (o As String) As String
        Dim dim As String = o: init ()
        สำหรับแต่ละ t Tuple (ของสตริง, สตริง) ในโทเค็น
            ret = ret.Replace (t.Item1, t.Item2)
        ต่อไป
        ย้อนกลับไป
    ฟังก์ชั่นสิ้นสุด

สิ้นสุดโมดูล

อิตาเลี่ยนไปเลย!

ผลที่ได้จากตัวมันเอง:

Modulo Italiano

    Def Frammenti Come una Nuova Lista (Di Coppia (Di Sequenza, Sequenza))

    Proc AggiungiCoppia (ซีเคอะมา, ซีเควนเซ่)
        Frammenti.Add (Coppia.Crea (a, b))
    Fine Proc

    Proc iniz ()
        AggiungiCoppia ("Italiano", "Italia" + "no"): AggiungiCoppia ("Modulo", "Modulo")
        AggiungiCoppia ("non ha", "non ha"): AggiungiCoppia ("AggiungiCoppia", "AggiungiCoppia")
        AggiungiCoppia ("l'italiano", "l'italiano")
        AggiungiCoppia ("Appresso", "Appresso"): AggiungiCoppia ("Frammenti", "Frammenti")
        AggiungiCoppia ("iniz", "iniz"): AggiungiCoppia ("มา", "มา")
        AggiungiCoppia ("Coppia", "Coppia"): AggiungiCoppia ("ต่อ Ogni", "Per Ogni")
        AggiungiCoppia ("Di", "Di"): AggiungiCoppia ("e basta", "e basta")
        AggiungiCoppia ("Proc", "Proc"): AggiungiCoppia ("quindi aggiungerò", "quindi aggiungerò")
        AggiungiCoppia ("Funzione", "Funzione"): AggiungiCoppia ("Def", "Def")
        AggiungiCoppia ("una", "una"): AggiungiCoppia ("il supporto", "il s" + "upporto")
        AggiungiCoppia ("ฉัน tipi utilizzati", "ฉัน tipi utilizzati")
        RIC l'italiano non ha una forma indipendente dal genere ต่อ gli aggettivi
        RIC เป็นผู้ให้ความช่วยเหลือและการสนับสนุนที่เป็นประโยชน์แก่คุณ
        AggiungiCoppia ("una Nuova Lista", "una Nuova Lista")
        AggiungiCoppia ("Crea", "Crea"): AggiungiCoppia ("ดี", "ดี")
        AggiungiCoppia ("RIC", "RIC"): AggiungiCoppia ("ต่อ", "ต่อ")
        AggiungiCoppia ("สมมติฐาน indipendente dal genere", "สมมติฐาน indipendente dal genere")
        AggiungiCoppia ("Sequenza", "Sequenza"): AggiungiCoppia ("gli aggettivi", "gli aggettivi")
        AggiungiCoppia ("TraduciInItaliano", "TraduciInItaliano")
    Fine Proc

    Funzione TraduciInItaliano (o Come Sequenza) Come Sequenza
        Def Ret Come Sequenza = o: iniz ()
        Per Ogni t Come Coppia (Di Sequenza, Sequenza) ใน Frammenti
            ret = ret.Replace (t.Item1, t.Item2)
        Appresso
        ย้อนกลับไป
    Fine Funzione

ไฟน์โมดูโล่

ขอบคุณสำหรับคำตอบ! เพียงแค่ไม่กี่จุด: "Mod" + "ule"คุณควรจะแปลข้อความภาษาอังกฤษในการแสดงความคิดเห็นเกินไปและฉันยังสามารถดูคำภาษาอังกฤษจำนวนมากในรูปแบบของ ลองเล็งไปที่วิญญาณของการท้าทายมากกว่าตัวอักษร
CJ Dennis

@CDDennis ฉันคงที่!
beppe9000

3

C, สเปน - C

อินพุต / เอาต์พุตผ่าน STDIN / STDOUT (ใช้./c-spanish < c-spanish.c)

หากextra = 0มีการเปลี่ยนแปลงextra = 1เป็นผลลัพธ์ของโปรแกรมนี้เป็นหลัก quine ร่วมกัน มิฉะนั้นเอาต์พุตจะเป็นโปรแกรม C ที่คอมไพล์catได้

จำเป็นต้องเพิ่มช่องว่างในแหล่งที่มา (เนื่องจากจะถูกแทนที่ด้วยอักขระในเวอร์ชันภาษาสเปน)

#define B(_, __) __ ## _
#define C(_, __) B(_,__)
#define char C(C(r, ha), c)
#define gets  C(ets, g)
#define if C(f, i)
#define int C(C(ed, n), s##ig)
#define is ==
#define main      C(C(n, ai), m)
#define puts C(C(s, t), C(u, p))
#define void C(id, C(o, v))
#define    while(x) C(r, C(o, f))(;x;)

int x, y, extra = 0;
void count (char *sheep);
void try_replace        (char *cake  , char *bacon , char *sheep);
void translate(char *sheep){
    char *array [] = {
        "array ", "matriz",         "bacon ", "tocino",
        "cake  ", "pastel",         "char", "car ",
        "count ", "cuenta",         "gets ", "traec",
        "if", "si",                 "int ", "ent ",
        "is", "es",                 "main     ", "principal",
        "peace", "paz  ",           "puts", "ponc",
        "sheep", "oveja",           "translate", "traduce  ",
        "truth ", "verdad",         "try_replace        ", "trata_de_reemplazar",
        "void", "nada",             "war   ", "guerra",
        "   while", "mientras",
    };
    int war    = 19, peace = -1;
       while(!(--war    is peace)){
        count (sheep);
        int truth  = x, cake   = 0;
           while(!(cake   is truth )){
            try_replace        (&sheep[cake  ], array [2 * war   ], array [1 + 2 * war   ]);
            if(extra && !y)
                try_replace        (&sheep[cake  ], array [1 + 2 * war   ], array [2 * war   ]);
            ++cake  ;
        }
    }
}

int main     (){
    char bacon [9999];
       while(gets (bacon )){
        translate(bacon );
        puts(bacon );
    }
}

void count (char *sheep){
    x = 0;
       while(*sheep++ && ++x);
}
void try_replace        (char *cake  , char *bacon , char *sheep){
    y = 0;
    char *truth  = bacon ;
       while(*cake   && *truth  && *sheep && *cake   is *truth )
        ++cake  , ++truth , ++sheep;
    if(!*truth ){
           while(!(bacon  is truth )) *--cake   = *(--truth , --sheep);
           y = 1;
    }
}

คำแปล:

array               -> matriz
bacon               -> tocino
cake                -> pastel
char                -> car (short for carácter)
count               -> cuenta
gets                -> traec (TRAE la Cadena)
if                  -> si
int                 -> ent (short for entero)
is                  -> es
main                -> principal
peace               -> paz
puts                -> ponc (PON la Cadena)
sheep               -> oveja
translate           -> traduce
truth               -> verdad
try_replace         -> trata_de_reemplazar
void                -> nada
war                 -> guerra
while               -> mientras

เอาท์พุต

ด้วยextra = 0:

#define B(_, __) __ ## _
#define C(_, __) B(_,__)
#define car  C(C(r, ha), c)
#define traec C(ets, g)
#define si C(f, i)
#define ent C(C(ed, n), s##ig)
#define es ==
#define principal C(C(n, ai), m)
#define ponc C(C(s, t), C(u, p))
#define nada C(id, C(o, v))
#define mientras(x) C(r, C(o, f))(;x;)

ent x, y, extra = 0;
nada cuenta(car  *oveja);
nada trata_de_reemplazar(car  *pastel, car  *tocino, car  *oveja);
nada traduce  (car  *oveja){
    car  *matriz[] = {
        "matriz", "matriz",         "tocino", "tocino",
        "pastel", "pastel",         "car ", "car ",
        "cuenta", "cuenta",         "traec", "traec",
        "si", "si",                 "ent ", "ent ",
        "es", "es",                 "principal", "principal",
        "paz  ", "paz  ",           "ponc", "ponc",
        "oveja", "oveja",           "traduce  ", "traduce  ",
        "verdad", "verdad",         "trata_de_reemplazar", "trata_de_reemplazar",
        "nada", "nada",             "guerra", "guerra",
        "mientras", "mientras",
    };
    ent guerra = 19, paz   = -1;
    mientras(!(--guerra es paz  )){
        cuenta(oveja);
        ent verdad = x, pastel = 0;
        mientras(!(pastel es verdad)){
            trata_de_reemplazar(&oveja[pastel], matriz[2 * guerra], matriz[1 + 2 * guerra]);
            si(extra && !y)
                trata_de_reemplazar(&oveja[pastel], matriz[1 + 2 * guerra], matriz[2 * guerra]);
            ++pastel;
        }
    }
}

ent principal(){
    car  tocino[9999];
    mientras(traec(tocino)){
        traduce  (tocino);
        ponc(tocino);
    }
}

nada cuenta(car  *oveja){
    x = 0;
    mientras(*oveja++ && ++x);
}
nada trata_de_reemplazar(car  *pastel, car  *tocino, car  *oveja){
    y = 0;
    car  *verdad = tocino;
    mientras(*pastel && *verdad && *oveja && *pastel es *verdad)
        ++pastel, ++verdad, ++oveja;
    si(!*verdad){
        mientras(!(tocino es verdad)) *--pastel = *(--verdad, --oveja);
           y = 1;
    }
}

ด้วยextra = 1:

#define B(_, __) __ ## _
#define C(_, __) B(_,__)
#define car  C(C(r, ha), c)
#define traec C(ets, g)
#define si C(f, i)
#define ent C(C(ed, n), s##ig)
#define es ==
#define principal C(C(n, ai), m)
#define ponc C(C(s, t), C(u, p))
#define nada C(id, C(o, v))
#define mientras(x) C(r, C(o, f))(;x;)

ent x, y, extra = 1;
nada cuenta(car  *oveja);
nada trata_de_reemplazar(car  *pastel, car  *tocino, car  *oveja);
nada traduce  (car  *oveja){
    car  *matriz[] = {
        "matriz", "array ",         "tocino", "bacon ",
        "pastel", "cake  ",         "car ", "char",
        "cuenta", "count ",         "traec", "gets ",
        "si", "if",                 "ent ", "int ",
        "es", "is",                 "principal", "main     ",
        "paz  ", "peace",           "ponc", "puts",
        "oveja", "sheep",           "traduce  ", "translate",
        "verdad", "truth ",         "trata_de_reemplazar", "try_replace        ",
        "nada", "void",             "guerra", "war   ",
        "mientras", "   while",
    };
    ent guerra = 19, paz   = -1;
    mientras(!(--guerra es paz  )){
        cuenta(oveja);
        ent verdad = x, pastel = 0;
        mientras(!(pastel es verdad)){
            trata_de_reemplazar(&oveja[pastel], matriz[2 * guerra], matriz[1 + 2 * guerra]);
            si(extra && !y)
                trata_de_reemplazar(&oveja[pastel], matriz[1 + 2 * guerra], matriz[2 * guerra]);
            ++pastel;
        }
    }
}

ent principal(){
    car  tocino[9999];
    mientras(traec(tocino)){
        traduce  (tocino);
        ponc(tocino);
    }
}

nada cuenta(car  *oveja){
    x = 0;
    mientras(*oveja++ && ++x);
}
nada trata_de_reemplazar(car  *pastel, car  *tocino, car  *oveja){
    y = 0;
    car  *verdad = tocino;
    mientras(*pastel && *verdad && *oveja && *pastel es *verdad)
        ++pastel, ++verdad, ++oveja;
    si(!*verdad){
        mientras(!(tocino es verdad)) *--pastel = *(--verdad, --oveja);
           y = 1;
    }
}

เป็นdefineคำภาษาสเปน? โปรดจำไว้ว่ารหัสของคุณไม่จำเป็นต้องทำงานในภาษาต้นฉบับหลังจากแปลแล้วเฉพาะในล่าม / ผู้เขียนที่แปลตามสมมุติฐานเท่านั้น
CJ Dennis

3
@CJDennis defineเป็นคำในภาษาสเปน (คำสั่งที่สองสำหรับคนdefinir)
es1024

3

Ruby, คาตาลัน - Rubí

มันเป็นรหัสสั้น ๆ ในทับทิมดังนั้นมันจึงไม่ใช่ตัวแทน แต่ฉันได้รับรายละเอียดเพิ่มเติมในชื่อฟังก์ชันเพื่อแสดงอีกเล็กน้อย แบบฝึกหัดนี้ทำให้ฉันจำได้ว่าเรียนในมหาวิทยาลัยมากเกินไปซึ่งเราใช้ pseudocode ที่คล้ายกันกับ "โปรแกรม"

words = {
    while: "mentre",
    words: "paraules",
    end: "fi",
    nil: "res",
    gets: "obtingues_cadena",
    line: "línia",
    each: "per_cada_una",
    do: "fes",
    original: "original",
    replacement: "intercanvi",
    gsub: "substitueix_globalment",
    puts: "posa_cadena"
}

while (line = gets) != nil
    words.each do |original,replacement|
        line.gsub! original.to_s,replacement
    end
    puts line
end

นำไปใช้กับตัวเองกลายเป็น:

paraules = {
    # Eliminat per simplificar codi
}

mentre (línia = obtingues_cadena) != res
    paraules.per_cada_una fes |original,intercanvi|
        línia.substitueix_globalment! original.to_s,intercanvi
    fi
    posa_cadena línia
fi

1
ฉันพนันได้เลยว่าฉันเดาว่าอะไรEliminat per simplificar codi!
CJ Dennis

ฉันแน่ใจว่าคุณยังสามารถ!
rorlork

3

Python 3, Lojban

ที่ฉันต้องการเรียงลำดับสถานที่ sumti ฉันใส่คำในวงเล็บเช่น (te tcidu fe)

รหัส:

dictionary = [
    ('basti fa', 'with'),
    ('ro', 'for'),
    ("vidnyja'o", 'print'),
    ('nenri', 'in'),
    ('lujvo', 'word'),
    ('jbovlaste', 'dictionary'),
    ('basygau', 'replace'),
    ('(te tcidu fe)', 'read'),
    ('datnyvei','file'),
    ('vlamei', 'text'),
    ('kargau', 'open'),
    ('la .lojban.', 'lojban'),
    ('no', '0'),
    ('pa', '1'),
    ('as', ''),
    ('with', 'basti fa'),
    ('for', 'ro'),
    ('print', "vidnyja'o"),
    ('in', 'nenri'),
    ('word', 'lujvo'),
    ('dictionary', 'jbovlaste'),
    ('replace', 'basygau'),
    ('read', '(te tcidu fe)'),
    ('file', 'datnyvei'),
    ('text', 'vlamei'),
    ('open', 'kargau'),
    ('lojban', 'la .lojban.'),
    ('0', 'no'),
    ('1', 'pa')
]

with open('lojban.py', 'r') as file:
    text = file.read()

for word in dictionary:
    text = text.replace(word[0], word[1])

print(text)

และเอาท์พุท:

jbovlaste = [
    ('basti fa', 'basti fa'),
    ('ro', 'ro'),
    ("vidnyja'o", 'vidnyja'o'),
    ('nenri', 'nenri'),
    ('lujvo', 'lujvo'),
    ('jbovlaste', 'jbovlaste'),
    ('basygau', 'basygau'),
    ('(te tcidu fe)', '(te tcidu fe)'),
    ('datnyvei','datnyvei'),
    ('vlamei', 'vlamei'),
    ('kargau', 'kargau'),
    ('la .lojban.', 'la .lojban.'),
    ('no', 'no'),
    ('pa', 'pa'),
    ('', ''),
    ('basti fa', 'basti fa'),
    ('ro', 'ro'),
    ('vidnyja'o', "vidnyja'o"),
    ('nenri', 'nenri'),
    ('lujvo', 'lujvo'),
    ('jbovlaste', 'jbovlaste'),
    ('basygau', 'basygau'),
    ('(te tcidu fe)', '(te tcidu fe)'),
    ('datnyvei', 'datnyvei'),
    ('vlamei', 'vlamei'),
    ('kargau', 'kargau'),
    ('la .lojban.', 'la .lojban.'),
    ('no', 'no'),
    ('pa', 'pa')
]

basti fa kargau('la .lojban..py', 'r')  datnyvei:
    vlamei = datnyvei.(te tcidu fe)()

ro lujvo nenri jbovlaste:
    vlamei = vlamei.basygau(lujvo[no], lujvo[pa])

vidnyja'o(vlamei)

read(te tcidu fe)กลายเป็นเพียง มันควรจะทำอย่างอื่นหรือไม่?
CJ Dennis

@CJDennis No แม้ว่าฉันคิดว่าฉันสามารถใช้ขีดเส้นใต้แทนการเว้นวรรคและใส่เครื่องหมายวงเล็บลงไปได้
Tuomas Laakkonen

ตกลง. จากความคิดเห็นด้านบนรหัสฉันคิดว่ามันควรจะจัดเรียงบางสิ่งบางอย่าง!
CJ Dennis

1

Javascript ES6, ภาษา, Ĝavoskripto

f=_=>f.toString().replace(/toString/g,'konvertiLaĉi').replace(/replace/g,'anstataŭigi');f()

ฉันใช้เสรีภาพกับ camelcasing และถ้อยคำ (ฉันแปล 'แปลงเป็นสตริง' แทนที่จะเป็น 'เป็นสตริง') ฉันจะทำให้สิ่งต่าง ๆ ซับซ้อนในภายหลังเมื่อฉันมีเวลามากขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.