แปลอังกฤษเป็นคอร์ปัส


14

คอร์ปัสเป็นฝ่ายสวมบทบาทจากวิดีโอเกมยอดนิยมWarframeที่มีภาษาที่น่าสนใจบ้าง

ในขณะที่กลุ่มอื่น ๆ ในเกมเช่น Grineer มีตรรกะบางอย่างอยู่เบื้องหลังภาษาของพวกเขา Corpus เป็นเพียงการทดแทนการสูญเสียของภาษาอังกฤษ

คำคอร์ปัสทั้งหมดเหมือนกันกับคำในภาษาอังกฤษยกเว้นการจับคู่ตามตัวอักษรดังต่อไปนี้:

การทำแผนที่ภาษาอังกฤษเป็น Corpus

สิ่งนี้ทำให้เกิดปัญหากับการออกเสียงเมื่อ:

yesกลายyey
sayเป็นyay
yayกลายyay
sassyเป็นyayyy
caseกลายเป็นyaye

นี่คือการแมปข้อความแบบข้อความ:

a -> a
b -> t
c -> y
d -> p
e -> e
f -> t
g -> j
h -> k
i -> i
j -> t
k -> k
l -> p
m -> s
n -> t
o -> o
p -> k
q -> r
r -> t
s -> y
t -> p
u -> u
v -> t
w -> j
x -> k
y -> y
z -> b

ความท้าทาย

รับข้อความโดยใช้ตัวอักษรภาษาอังกฤษเอาท์พุทแปล Corpus

ตัวอย่างเช่นข้อความHello, World!กลายเป็นKeppo, Jotpp!ใน Corpus

กฎระเบียบ

  • ข้อมูลที่ป้อนจะประกอบด้วยอักขระที่พิมพ์ได้ ASCII เท่านั้น
  • ข้อความที่ป้อนอาจมีช่องว่างและเครื่องหมายวรรคตอนซึ่งจะต้องเก็บรักษาไว้
  • ต้องใช้อักษรตัวพิมพ์ใหญ่เป็นตัวพิมพ์ใหญ่
  • นี่คือดังนั้นโดยธรรมชาติแล้วไบต์ที่น้อยที่สุดก็ชนะ!

การทดสอบ

กรณีทดสอบถูกคั่นด้วย<===========>โดยมีบรรทัดว่างระหว่างอินพุตและเอาต์พุตที่คาดไว้

Hello, World!

Keppo, Jotpp!
<===========>
Yes

Yey
<===========>
TestcaSe

PeypyaYe
<===========>
Programming Puzzles and Code Golf

Ktojtassitj Kubbpey atp Yope Jopt
<===========>
This text has a
newline in it

Pkiy pekp kay a
tejpite it ip
<===========>
Corpus language best language

Yotkuy patjuaje teyp patjuaje
<===========>
Strip the flesh! Salt the wounds!

Yptik pke tpeyk! Yapp pke joutpy!
<===========>
"Install Warframe" they said, "It'll be fun" they said

"Itypapp Jatttase" pkey yaip, "Ip'pp te tut" pkey yaip
<===========>
What the **** did you just ****ing say about me, you little *****?
I'll have you know I graduated top of my class in the Navy Seals,
and I've been involved in numerous secret raids on Al-Quaeda,
and I have over 300 confirmed kills.

Jkap pke **** pip you tuyp ****itj yay atoup se, you pipppe *****?
I'pp kate you ktoj I jtapuapep pok ot sy ypayy it pke Taty Yeapy,
atp I'te teet ittoptep it tusetouy yeytep taipy ot Ap-Ruaepa,
atp I kate otet 300 yottitsep kippy.

โบนัส

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


@Shaggy แน่นอนว่าน่าจะคิดอย่างนั้น
Skidsdev

4
@RobertS มันยังไม่ให้โบนัสคะแนนของคุณ ( x * 1 == x) มันเป็นการกระตุ้นที่ลิ้นไม่สามารถตีความได้หลายคำ
Skidsdev

1
เอาต์พุตสามารถเป็นอาร์เรย์ของอักขระได้หรือไม่?
ElPedro

@Skidsdev "การแปล" สามารถออกเสียงได้ ไม่ว่าจะเป็นเสียงของมนุษย์ที่บันทึกไว้หรือโดยใช้โปรแกรมโดยการเรียนรู้ด้วยเครื่องและ / หรือเทคโนโลยีการแปลงข้อความเป็นเสียงพูด
guest271314

1
และเกิดเป็นภาษาฟินแลนด์!
sergiol

คำตอบ:




4

ถ่าน 42 ไบต์

≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

≔                       Assign
 ”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”  Compressed string `ATYPETJKITKPSTOKRTYPUTJKYB` 
                     η  To variable

 θ                      Input string
⭆                       Map over characters and join
  ⎇                     If
    β                   Lowercase alphabet
   №                    Contains
      ι                 Current character
     ↧                  Lowercased
                        (Then)
        ⎇               If
          β             Lowercase alphabet
         №              Contains
           ι            Current character
                        (Then)
             η          Variable
            ↧           Lowercased
                        (Else)
              η         Variable
       §                Indexed by
               ⌕        Index of
                  ι     Current character
                 ↧      Lowercased
                β       In lowercase alphabet
                        (Else)
                   ι    Current character
                        Implicitly print

4

T-SQL, 107 ไบต์

SELECT TRANSLATE(v,'bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ',
                   'typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB')FROM t

การแบ่งบรรทัดและการเยื้องใช้สำหรับการอ่านเท่านั้น

ใช้ฟังก์ชัน SQL 2017 TRANSLATEสำหรับการเปลี่ยนอักขระ

น่าเสียดายที่ต้องใส่ (เกือบ) ตัวอักษรทั้งหมดในนั้นสองครั้งเพื่อรักษาปลอก มีวิธีการที่อาจจะดีกว่าอาจจะเป็นสิ่งที่จับเป็นเสื้อ 's เป็นกลุ่ม แต่ตอนนี้ทำงานให้ฉัน

การป้อนข้อมูลผ่านทางตารางที่มีอยู่ก่อนทีกับคอลัมน์ varchar วี , ต่อกฎ IO ของเรา

ในกรณีนี้ตารางจะต้องสร้างขึ้นโดยใช้การเปรียบเทียบขนาดตัวพิมพ์เล็ก -ใหญ่โดยรันบนเซิร์ฟเวอร์ที่คำนึงCOLLATEถึงขนาดตัวพิมพ์ใหญ่หรือโดยใช้คำสำคัญ (ไม่นับรวมกับจำนวนอักขระ):

CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)

3

JavaScript (Node.js) , 100 ไบต์

s=>s.replace(/[a-z]/gi,c=>(C='_atypetjkitkpstokrtyputjkyb'[Buffer(c)[0]&31],c>{}?C:C.toUpperCase()))

ลองออนไลน์!

s =>                                  // s = input string
  s.replace(                          // replace in s ...
    /[a-z]/gi,                        // ... all letters, no matter the case
    c => (                            // for each letter c:
      C =                             //   pick a replacement letter C
        '_atypetjkitkpstokrtyputjkyb' //   from a 1-indexed lookup string
        [Buffer(c)[0] & 31],          //   using the 5 lowest bits of the ASCII code of c
      c > {} ?                        //   if the original letter was in lower case:
        C                             //     use the replacement letter as-is
      :                               //   else:
        C.toUpperCase()               //     convert it to upper case
    )                                 // 
  )                                   // end of replace()

3

R , 79 ไบต์

function(x)chartr("b-zB-Z",paste0(y<-"typetjkitkpstokrtyputjkyb",toupper(y)),x)

ลองออนไลน์!

มีขนาดสั้นกว่า 3 ไบต์เท่านั้นโดยพิมพ์ทั้งสตริงตัวพิมพ์เล็ก - ใหญ่และตัวพิมพ์ใหญ่เข้าด้วยกัน ...

R , 79 ไบต์

function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]

ลองออนไลน์!

รหัสนักเล่นนับไบต์เดียวกัน




2

J , 78 61 ไบต์

-17 ไบต์ขอบคุณ FrownyFrog!

rplc(u:,98 66+/i.25);"0(,toupper)@'typetjkitkpstokrtyputjkyb'

ลองออนไลน์!



@ FrownyFrog ขอบคุณ! ใน J804 ของฉันฉันไม่สามารถใช้ค่าคงที่ทางด้านขวา ฉันจำเป็นต้องอัพเกรด :) ทางออกของฉันน่าเกลียด แต่อย่างไรก็ตาม ....
เลน Ivanov

2

C # (Visual C # Interactive Compiler) , 151 83 ไบต์

n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)

ลองออนไลน์!

บันทึกขนาดใหญ่ถึง 68 ไบต์ต้องขอบคุณ Pietu1998!


คุณสามารถลดขนาดนี้ได้ถึง83 ไบต์โดยการลบช่วงรวมSelects และใช้ตัวดำเนินการ bitwise สำหรับปลอก
PurkkaKoodari

ขอบคุณ! เคล็ดลับดี ๆ กับผู้ประกอบการที่ฉลาดหน่อย!
ศูนย์รวมแห่งความไม่รู้

2

K (ngn / k) , 87 63 61 60 59 ไบต์

f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}

ลองออนไลน์!

{ } ฟังก์ชั่นที่มีข้อโต้แย้ง x

_ เพื่อตัวพิมพ์เล็ก

a: มอบหมายให้ a

!128 รายการ 0 1 2 ... 127

@[!128; ;:; ค่า ดัชนี]แก้ไขโดยการแทนที่องค์ประกอบที่ดัชนีด้วยค่าที่กำหนด

98+!25 รายการ 98 99 100 ... 122ที่เป็นรหัส ASCII สำหรับ"bcd ...z"

การวางเคียงกันคือการจัดทำดัชนีดังนั้นเราจึงใช้ a (แปลงโดยปริยายเป็นจำนวนเต็ม) เป็นดัชนีในรายการที่แก้ไข

x-a-ลบออกจากaนั้นลบแบบฟอร์มx ; นี้คืนค่าตัวบน / ตัวพิมพ์เล็กเหมือนในสายอักขระเดิม

`c$ แปลงเป็นอักขระ


1

เรติน่า 0.8.2 , 59 ไบต์

[a-z]
 $&
T`l`L
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
T`L `l_` .

ลองออนไลน์! ลิงก์มีกรณีทดสอบ คำอธิบาย:

[a-z]
 $&

คำนำหน้าอักขระที่ไม่ใช่ ASCII สำหรับตัวอักษรแต่ละตัว (ฉันพยายามใช้พื้นที่ที่ไม่แตก แต่ Firefox อาจเปลี่ยนกลับเป็นพื้นที่ปกติหลังจากคัดลอกและวาง)

T`l`L

พิมพ์ใหญ่ของตัวอักษรทั้งหมด

T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB

แปลงตัวอักษรเป็น Corpus

T`L `l_` .

อักษรตัวเล็กตามหลังอักขระที่ไม่ใช่ ASCII และลบอักขระที่ไม่ใช่ ASCII

โซลูชันของNaïveคือ 63 ไบต์:

T`lL`aty\petjkitk\pst\okrty\putjkybATYP\ETJKITKPST\OKRTYPUTJKYB

ลองออนไลน์! ลิงก์มีกรณีทดสอบ


1

Python 2 , 115 ไบต์

lambda i:i.translate(''.join(a))
a=map(chr,range(256))
b='typetjkitkpstokrtyputjkyb'
a[66:91]=b.upper();a[98:123]=b

ลองออนไลน์!

ดัดแปลงมาจากคำตอบของ @ ElPedro นี้สร้างทดแทนสำหรับอักขระ ASCII ทุกคนในอาร์เรย์และจากนั้นใช้astr.translate

สามารถถูกนำไปที่113 ไบต์หากส่งคืนอาร์เรย์ของตัวอักษรเป็นที่ยอมรับ:

lambda i:[a[ord(x)]for x in i]
a=map(chr,range(256))
b='typetjkitkpstokrtyputjkyb'
a[66:91]=b.upper();a[98:123]=b

ลองออนไลน์!


เอาความคิดในเวลากลางคืนนี้ไปคิดออกว่ามันเป็นอย่างไร มันเป็นวันที่ยาวนาน! ทางออกที่ดี
ElPedro

1

เยลลี่ 29 ไบต์

“qḍỊYl4ḃ©ƭṄxḳ½Dy’ṃⱮØA,Øa¤⁺żẎy

ลองออนไลน์!


จำเป็นต้องใช้ตัวอักษรแผนที่เพื่อ“ØṖ¦Mṗẏʋ@¥;}/’ṃⱮØCŒH¤⁺żẎyประหยัด 4. ​​(ไม่สามารถกำจัด 'y' ด้วยØYเนื่องจากอยู่ด้านขวาของแผนที่)
Jonathan Allan

1

Japt , 37 ไบต์

;®i`…ypetjkŠkp¡okrtyp©jkyb`pu)gCpu bZ

ลองออนไลน์!

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

คำอธิบาย:

;                                        #Set C to the lowercase alphabet
 ®                                       #For each character Z of the input:
                                   bZ    # Find its index in:
                               C         #  The lowercase alphabet
                                pu       #  Plus the uppercase alphabet
                                         #  (-1 if it is not a letter)
                              g          # And get the character at that index in:
   `…ypetjkŠkp¡okrtyp©jkyb`              #  Get the lowercase Corpus alphabet
                           pu)           #  Plus the uppercase Corpus alphabet
  i                                      #  Add Z at the end (index -1)

0

Python 2 , 138 132 ไบต์

def f(i,a='bcdfghjlmnpqrstvwxz',b='typtjktpstkrtyptjkb'):a+=a.upper();b+=b.upper();return''.join((x,b[a.find(x)])[x in a]for x in i)

ลองออนไลน์!

สั้นกว่าจริงด้วยฟังก์ชันที่ตั้งชื่อกว่าแลมบ์ดา

แลมบ์ดารุ่น138ไบต์

lambda i,a='bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ',b='typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB':''.join((x,b[a.find(x)])[x in a]for x in i)

ลองออนไลน์!

131 125ถ้าเราได้รับอนุญาตให้ส่งกลับอาร์เรย์ของตัวละครและมีjoinฟังก์ชั่นนอก

def f(i,a='bcdfghjlmnpqrstvwxz',b='typtjktpstkrtyptjkb'):a+=a.upper();b+=b.upper();return[(x,b[a.find(x)])[x in a]for x in i]

ลองออนไลน์!


1
คุณยังสามารถใช้แลมบ์ดาได้หากคุณสร้างaและbตัวแปรระดับโลก
Black Owl Kai

@BlackOwlKai - ขอบคุณ เล่นกับความคิดนั้น แต่มันก็สายไปแล้ว อาจจะพรุ่งนี้ :)
ElPedro

รับได้ถึง120/113 ตัวอักษร (TIO โดยไม่ต้อง testcases อื่นลิงค์จะยาวเกินไปสำหรับความคิดเห็น)
Black Owl Kai

เอาชนะฉันและแตกต่างกันมากพอที่คุณจะโพสต์เป็นคำตอบของคุณเอง ฉันจะ
โหวต

อย่าลังเลที่จะขโมยกรณีทดสอบของฉันเช่นกัน พวกเขาใช้เวลาในการพิมพ์นานกว่ารหัส ...
ElPedro

0

PHP , 100 ไบต์

รหัส

<?=strtr($argv[0],($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),($v=typtjktkpstkrtyptjkyb).$f($v));

ลองออนไลน์!

คำอธิบาย

# using the provided character mapping given on the question, as an array
strtr($argv[0],                                  # strtr for the string replacement
($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),  # Taking onthe the keys for the first string
($v=typtjktkpstkrtyptjkyb).$f($v));              # Using the values for second string
 # In both Strings appending the upper version of each string.

0

Pyth, 35 ไบต์

XQ.*m+r1dd[tG."byàHuH¯¹e?rJyfh

ลองมัน!

อาจใช้แผนที่ซ้ายหรือบางอย่างเพื่อกำจัดสองง แต่ฉันไม่สามารถหาวิธีได้



0

Pyth, 34 ตัวอักษร

เจ "byàHuH¯¹e? rJyfh" XXztGJrtG1rJ1

ลองออนไลน์!

สตริงเป็นเวอร์ชันบีบอัด"typetjkitkpstokrtyputjkyb" ด้วยเหตุผลบางอย่างฉันไม่สามารถบีบอัดPythเพื่อ"atypetjkitkpstokrtyputjkyb"ด้วยฟังก์ชัน

+++ \ n. ++ hSzeSzCi-RChSzCMz-hCeSzChSzN
แม้ว่ามันอาจจะช่วยประหยัดหนึ่งหรือสองไบต์ในขณะที่ทั้งสองจะถูกกำจัด



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