Terjemahkan Bahasa Inggris ke Bahasa Corpus


14

The Corpus adalah faksi fiksi dari Warframe video game populer yang memiliki bahasa yang agak menarik.

Sementara faksi lain dalam permainan seperti Grineer memiliki beberapa logika di balik bahasa mereka, Corpus hanyalah pengganti yang hilang dari bahasa Inggris.

Semua kata Corpus sama dengan rekan bahasa Inggris mereka, kecuali dengan pemetaan alfabet berikut:

Pemetaan Bahasa Inggris ke Corpus

Ini menyebabkan beberapa masalah dengan pengucapan sebagai:

yesmenjadi yey
saymenjadi yay
yaymenjadi yay
sassymenjadi yayyy
casemenjadiyaye

Berikut ini adalah versi teks dari pemetaan:

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

Tantangan

Teks yang diberikan menggunakan alfabet Inggris, menampilkan terjemahan Corpus-nya.

Misalnya, teks Hello, World!menjadi Keppo, Jotpp!di Corpus

Aturan

  • Input hanya akan terdiri dari karakter yang dapat dicetak ASCII
  • Input teks dapat berisi spasi dan tanda baca, ini harus dipertahankan
  • Kapitalisasi huruf harus dipertahankan
  • Ini adalah sehingga secara alami, byte paling sedikit menang!

Testcases

Kasing uji dipisahkan dengan <===========>, dengan garis kosong antara input dan output yang diharapkan

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.

Bonus

Jika Anda juga menyertakan rekaman audio (atau video dengan audio) yang Anda ucapkan masing-masing terjemahan Corpus testcase, Anda dapat melipatgandakan bytecount Anda dengan 1sebagai hadiah.


@Shaggy Tentu, seharusnya memikirkan itu
Skidsdev

4
@RobertS. itu juga tidak memberikan bonus untuk skor Anda ( x * 1 == x). Ini menyodok lidah pada ketidakterbukaan banyak terjemahan
Skidsdev

1
Bisakah output menjadi array karakter?
ElPedro

@Skidsdev "Terjemahan" dapat diucapkan; baik sebagai suara manusia yang direkam atau diprogram menggunakan pembelajaran mesin dan / atau teknologi text-to-speech.
guest271314

1
Dan lahirlah bahasa Finlandia!
sergiol

Jawaban:




4

Arang , 42 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

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

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

Istirahat baris dan indentasi hanya untuk keterbacaan.

Menggunakan fungsi SQL 2017 TRANSLATEuntuk penggantian karakter.

Sayangnya harus meletakkan (hampir) seluruh alfabet di sana dua kali untuk menjaga casing. Mungkin ada cara yang lebih baik, mungkin sesuatu yang menangani t sebagai sebuah kelompok, tetapi ini berhasil bagi saya.

Input adalah melalui tabel t yang sudah ada sebelumnya dengan kolom varchar v , sesuai aturan IO kami .

Dalam hal ini tabel harus dibuat menggunakan susunan case-sensitive , baik dengan menjalankan pada server case-sensitive, atau dengan menggunakan COLLATEkata kunci (tidak dihitung terhadap total karakter):

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()))

Cobalah online!

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)

Cobalah online!

Hanya 3 byte lebih pendek daripada mengetik string string bawah dan huruf besar secara bersamaan ...

R , 79 byte

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

Cobalah online!

Kode yang lebih menarik, jumlah byte yang sama.




2

J , 78 61 byte

-17 byte terima kasih kepada FrownyFrog!

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

Cobalah online!



@FrownyFrog Terima kasih! Di J804 saya, saya tidak bisa menggunakan konstanta di sisi kanan. Saya perlu memperbarui :) Solusi saya jelek namun ....
Galen Ivanov


2

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

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

Cobalah online!

{ } berfungsi dengan argumen x

_ ke huruf kecil

a: menetapkan ke a

!128 Daftar 0 1 2 ... 127

@[!128; indeks yang ;:; nilai ] mengubahnya dengan mengganti elemen di indeks dengan diberikan nilai-nilai

98+!25daftar 98 99 100 ... 122yang merupakan kode ascii untuk "bcd...z"

penjajaran adalah pengindeksan, jadi kami menggunakan a(secara implisit dikonversi ke bilangan bulat) sebagai indeks dalam daftar yang diamandemen

x-a-kurangi dari a, lalu kurangi bentukx ; ini mengembalikan huruf besar / kecil seperti pada string asli

`c$ konversi ke karakter


1

Retina 0.8.2 , 59 byte

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

Cobalah online! Tautan termasuk kasus uji. Penjelasan:

[a-z]
 $&

Awali karakter non-ASCII untuk setiap huruf. (Saya mencoba menggunakan ruang yang tidak melanggar tetapi Firefox mungkin telah mengubahnya kembali ke ruang biasa setelah menyalin dan menempel.)

T`l`L

Huruf besar semua huruf.

T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB

Ubah huruf menjadi Corpus.

T`L `l_` .

Huruf kecil setelah karakter non-ASCII dan hapus karakter non-ASCII.

Solusi naïve adalah 63 byte:

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

Cobalah online! Tautan termasuk kasus uji.


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

Cobalah online!

Diadaptasi dari jawaban @ ElPedro. Ini menghasilkan penggantian untuk setiap karakter ascii dalam array adan kemudian menggunakanstr.translate .

Dapat dibawa ke 113 byte jika mengembalikan array karakter dapat diterima:

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

Cobalah online!


Butuh beberapa pemikiran pada waktu malam ini untuk mengetahui bagaimana melakukannya. Hari yang panjang! Solusi bagus
ElPedro


1

Japt , 37 byte

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

Cobalah online!

Tautan di atas mencakup sebagian besar kasus uji, tetapi saya belum dapat memasukkan yang kedua hingga terakhir sebagai string karena berisi tanda kutip tunggal dan ganda. Inilah kasus uji, masukan sebagai array karakter sebagai gantinya.

Penjelasan:

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

Cobalah online!

Sebenarnya lebih pendek dengan fungsi bernama daripada dengan lambda!

versi lambda, 138 byte

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

Cobalah online!

131 125 jika kita diizinkan mengembalikan array karakter dan memilikijoinfungsi di luar.

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]

Cobalah online!


1
Anda masih dapat menggunakan lambda jika Anda membuat adan bvariabel global
Black Owl Kai

@ BlackOwlKai - Terima kasih. Sudah bermain dengan ide itu tapi sudah terlambat. Mungkin besok :)
ElPedro

Dapatkan hingga 120/113 karakter (TIO tanpa testcases, jika tidak, tautannya akan terlalu panjang untuk dikomentari)
Black Owl Kai

Mengalahkan milikku dan cukup berbeda untuk kamu posting sebagai jawabanmu sendiri. Saya akan
angkat suara

Merasa bebas untuk mencuri kasus pengujian saya juga. Mereka membutuhkan waktu lebih lama untuk mengetik daripada kode ...
ElPedro

0

PHP , 100 byte

Kode

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

Cobalah online!

Penjelasan

# 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 Bytes

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

Cobalah!

Mungkin bisa menggunakan peta Kiri atau sesuatu untuk menyingkirkan dua d's, tapi aku tidak tahu caranya.


0

Java, 211 Bytes

a->{String b="BCDFGHJLMNPQRSTVWXZbcdfghjlmnpqrstvwxz",c="TYPTJKTPSTKRTYPTJKBtyptjktpstkrtyptjkb";a.chars().map(x->{int z;return(z=b.indexOf(x))>-1?c.toCharArray()[z]:x;}).forEach(x->System.out.print((char)x));};

Cobalah online!



0

Pyth, 34 karakter

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

Cobalah online!

String adalah versi terkompresi dari "typetjkitkpstokrtyputjkyb" . Untuk beberapa alasan saya tidak bisa mendapatkan Pyth untuk mengompresi "atypetjkitkpstokrtyputjkyb" dengan fungsi

+++ \. N ++ hSzeSzCi-RChSzCMz-hCeSzChSzN
meskipun mungkin akan menghemat satu atau dua byte karena dua t itu bisa dihilangkan.


0

Tcl , 114 byte

proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}

Cobalah online!


0

Lua , 153 byte

t="atypetjkitkpstokrtyputjkyb"for c in(...):gmatch"."do i=c:lower():byte()-96n=t:sub(i,i)io.write((i<0or i>26)and c or(c==c:upper()and n:upper()or n))end

Cobalah online!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.