Dịch tiếng Anh sang Corpus


14

The Corpus là một phe hư cấu từ trò chơi video nổi tiếng Warframe người có một ngôn ngữ hơi thú vị.

Trong khi các phe phái khác trong trò chơi như Grineer có một số logic đằng sau ngôn ngữ của họ, thì Corpus chỉ đơn giản là một sự thay thế mất mát của ngôn ngữ tiếng Anh.

Tất cả các từ Corpus đều giống với các từ tiếng Anh của chúng, ngoại trừ với các ánh xạ bảng chữ cái sau:

Ánh xạ tiếng Anh sang Corpus

Điều này gây ra một số vấn đề với phát âm như:

yestrở yey
saythành yay
yaytrở yay
sassythành yayyy
casetrở thành trở thànhyaye

Đây là phiên bản văn bản của ánh xạ:

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

Các thách thức

Đưa ra văn bản bằng cách sử dụng bảng chữ cái tiếng Anh, xuất bản dịch Corpus của nó.

Ví dụ: văn bản Hello, World!trở thành Keppo, Jotpp!Corpus

Những quy định

  • Đầu vào sẽ chỉ bao gồm các ký tự có thể in ASCII
  • Văn bản đầu vào có thể chứa khoảng trắng và dấu chấm câu, chúng phải được giữ nguyên
  • Viết hoa chữ cái phải được bảo tồn
  • Đây là tự nhiên, ít byte nhất sẽ thắng!

Những chiếc cặp

Các trường hợp thử nghiệm được phân tách bằng <===========>, với một dòng trống giữa đầu vào và đầu ra dự kiến

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.

Tiền thưởng

Nếu bạn cũng bao gồm một bản ghi âm (hoặc video có âm thanh) của bạn phát âm từng bản dịch Corpus của bản thử nghiệm, bạn có thể nhân bội số của mình 1với số tiền thưởng.


@Shaggy Chắc chắn, nên nghĩ về điều đó
Skidsdev

4
@RobertS. nó cũng không cung cấp phần thưởng cho điểm số của bạn ( x * 1 == x). Đó là một câu nói châm chọc vào sự không thể nói được của nhiều bản dịch
Skidsdev

1
Đầu ra có thể là một mảng các ký tự?
ElPedro

@Skidsdev Các "bản dịch" có thể phát âm được; hoặc là giọng nói của con người được ghi âm hoặc lập trình bằng cách sử dụng công nghệ máy học và / hoặc công nghệ chuyển văn bản thành giọng nói.
khách271314

1
Và thế là sinh ra tiếng Phần Lan!
sergiol

Câu trả lời:




4

Than , 42 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

≔                       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 byte

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

Ngắt dòng và thụt lề chỉ để đọc.

Sử dụng chức năng SQL 2017 TRANSLATEđể thay thế ký tự.

Thật không may, phải đặt (gần như) toàn bộ bảng chữ cái trong đó hai lần để duy trì vỏ. Có lẽ có nhiều cách tốt hơn, có thể là một cái gì đó xử lý t 's như một nhóm, nhưng điều này đã làm việc cho tôi.

Đầu vào là thông qua một bảng t có sẵn với cột varar v , theo quy tắc IO của chúng tôi .

Trong trường hợp này, bảng phải được tạo bằng cách sử dụng đối chiếu phân biệt chữ hoa chữ thường , bằng cách chạy trên máy chủ phân biệt chữ hoa chữ thường hoặc bằng cách sử dụng COLLATEtừ khóa (không được tính vào tổng số ký tự):

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

3

JavaScript (Node.js) , 100 byte

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

Hãy thử trực tuyến!

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 byte

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

Hãy thử trực tuyến!

Chỉ ngắn hơn 3 byte so với việc gõ cả hai chuỗi thay thế chữ thường và chữ hoa cùng nhau ...

R , 79 byte

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

Hãy thử trực tuyến!

Mã Fancier, cùng số byte.




2

J , 78 61 byte

-17 byte nhờ FrownyFrog!

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

Hãy thử trực tuyến!



@FrownyFrog Cảm ơn! Trong J804 của tôi, tôi không thể sử dụng các hằng số ở phía bên tay phải. Tôi cần nâng cấp :) Tuy nhiên, giải pháp của tôi là xấu xí ....
Galen Ivanov

2

C # (Trình biên dịch tương tác Visual C #) , 151 83 byte

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

Hãy thử trực tuyến!

Đã tiết kiệm được 68 byte nhờ vào Pietu1998!


Bạn có thể giảm xuống còn 83 byte bằng cách loại bỏ phạm vi, kết hợp Selects và sử dụng các toán tử bitwise cho vỏ.
PurkkaKoodari

Cảm ơn! Thủ thuật đẹp với các nhà khai thác bit khôn ngoan!
Hiện thân của sự thiếu hiểu biết

2

K (ngn / k) , 87 63 61 60 59 byte

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

Hãy thử trực tuyến!

{ } chức năng với đối số x

_ viết thường

a: giao cho a

!128 danh sách 0 1 2 ... 127

@[!128; chỉ số ;:; giá trị ] sửa đổi nó bằng cách thay thế các yếu tố tại các chỉ số bằng các giá trị đã cho

98+!25danh sách 98 99 100 ... 122mã ascii cho"bcd ...z"

juxtap vị trí là lập chỉ mục, vì vậy chúng tôi sử dụng a (được chuyển đổi hoàn toàn thành số nguyên) làm chỉ số trong danh sách sửa đổi

x-a-trừ đi a, sau đó trừ đi hình thức x; cái này khôi phục chữ hoa / chữ thường như trong chuỗi gốc

`c$ chuyển đổi thành nhân vật


1

Võng mạc 0.8.2 , 59 byte

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

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm. Giải trình:

[a-z]
 $&

Tiền tố một ký tự không phải ASCII cho mỗi chữ cái. (Tôi đã cố sử dụng một không gian không phá vỡ nhưng Firefox có thể đã thay đổi nó trở lại một không gian thông thường sau khi sao chép và dán.)

T`l`L

Viết hoa tất cả các chữ cái.

T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB

Chuyển đổi các chữ cái thành Corpus.

T`L `l_` .

Viết thường các chữ cái sau ký tự không phải ASCII và xóa ký tự không phải ASCII.

Giải pháp ngây thơ là 63 byte:

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

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm.


1

Python 2 , 115 byte

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

Hãy thử trực tuyến!

Chuyển thể từ câu trả lời của @ ElPedro. Điều này tạo ra sự thay thế cho mọi ký tự ascii trong mảng avà sau đó sử dụngstr.translate .

Có thể được đưa đến 113 byte nếu trả về một mảng ký tự được chấp nhận:

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

Hãy thử trực tuyến!


Đã suy nghĩ một chút vào thời điểm này vào ban đêm để tìm ra cách nó được thực hiện. Đó là một ngày dài! Giải pháp tốt đẹp.
ElPedro


1

Japt , 37 byte

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

Hãy thử trực tuyến!

Liên kết trên bao gồm hầu hết các trường hợp thử nghiệm, nhưng tôi không thể nhập chuỗi thứ hai đến chuỗi cuối cùng dưới dạng chuỗi vì nó chứa cả dấu ngoặc đơn và dấu ngoặc kép. Đây là trường hợp thử nghiệm, đầu vào như một mảng các ký tự thay thế.

Giải trình:

;                                        #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 byte

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)

Hãy thử trực tuyến!

Trên thực tế ngắn hơn với một chức năng được đặt tên hơn với lambda!

phiên bản lambda, 138 byte

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

Hãy thử trực tuyến!

131 125 nếu chúng ta được phép trả về một mảng các ký tự và cójoinbên ngoài hàm.

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]

Hãy thử trực tuyến!


1
Bạn vẫn có thể sử dụng lambda nếu bạn thực hiện abbiến toàn cục
Black Owl Kai

@BlackOwlKai - Cảm ơn. Đã chơi với ý tưởng đó nhưng nó đã muộn. Có thể ngày mai :)
ElPedro

Giảm xuống còn 120/113 ký tự (TIO không có bản thử nghiệm, nếu không thì liên kết sẽ quá dài để nhận xét)
Black Owl Kai

Beats của tôi và đủ khác nhau để bạn gửi bài như câu trả lời của riêng bạn. Tôi sẽ upvote :)
ElPedro

Hãy ăn cắp trường hợp thử nghiệm của tôi là tốt. Họ mất nhiều thời gian để nhập hơn mã ...
ElPedro

0

PHP , 100 byte

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

Hãy thử trực tuyến!

Giải trình

# 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

Bình, 35 byte

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

Thử nó!

Có lẽ có thể sử dụng Bản đồ bên trái hoặc thứ gì đó để loại bỏ hai d, nhưng tôi không thể tìm ra cách.



0

Bình, 34 ký tự

J. "byàHuH¯¹e? RJyfh" XXztGJrtG1rJ1

Hãy thử trực tuyến!

Chuỗi này là một phiên bản nén của "typetjkitkpstokrtyputjkyb" . Vì một số lý do, tôi không thể khiến Pyth nén "atypetjkitkpstokrtyputjkyb" với chức năng

+++ \. N ++ hSzeSzCi-RChSzCMz-hCeSzChSzN
mặc dù nó có thể sẽ tiết kiệm được một hoặc hai byte vì hai t có thể bị loại bỏ.



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.