将英语翻译成语料库


14

语料库是从流行的视频游戏中的虚构派战甲神兵谁有几分有趣的语言。

尽管游戏中的其他派系(例如Grineer)在其语言背后都有一些逻辑,但语料库只是英语的有损替代。

除了以下字母映射之外,所有的语料库单词都与它们的英文单词相同:

英语到语料库的映射

这会导致一些发音问题,例如:

yesyey
sayyay
yayyay
sassyyayyy
caseyaye

这是映射的文本版本:

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

挑战

使用英文字母给定文本,输出其语料库翻译。

例如,文本Hello, World!变为Keppo, Jotpp!语料库

规则

  • 输入将仅包含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.

红利

如果您还包括一个音频录音(或带有音频的视频),用于宣告测试用例的每个语料库翻译,您可以将字节数乘以1一个奖励。


@Shaggy当然,应该想到这一点
Skidsdev,

4
@RobertS。它还不会为您的分数(x * 1 == x)提供任何奖励。这是许多翻译的发音
不一的嘲笑

1
输出可以是字符数组吗?
ElPedro

@Skidsdev“翻译”是明显的;既可以录制为人类的语音,也可以使用机器学习和/或文字转语音技术以编程方式使用。
guest271314

1
芬兰语就这样诞生了!
sergiol

Answers:




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进行字符替换。

不幸的是不得不将(几乎)整个字母都放两次以保持大小写。也许有更好的方法,也许可以将t作为一个整体来处理,但这对我有用。

根据我们的IO规则,输入通过带有varchar列v的预先存在的表t进行。

在这种情况下,必须使用区分大小写的排序规则创建表,方法是在区分大小写的服务器上运行,或者使用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

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

将字母转换为语料库。

T`L `l_` .

将非ASCII字符后的字母小写并删除非ASCII字符。

天真的解决方案是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字符生成替换a,然后使用str.translate

如果可以返回一个char数组,则可以将其增加到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 '18


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)

在线尝试!

实际上,使用命名函数比使用lambda短!

lambda版本,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
如果您使用make abglobal变量,您仍然可以使用lambda
Black Owl Kai

@BlackOwlKai-谢谢。一直在想这个主意,但是已经晚了。也许明天:)
ElPedro '18

降低到120/113个字符(没有测试用例的TIO,否则链接将太长,无法发表评论)
Black Owl Kai

击败我,让您发表自己的答案。我会
投票

也可以随意窃取我的测试用例。他们输入的时间比输入代码的时间还长...
ElPedro '18

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

Java,211字节

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

在线尝试!



0

Pyth,34个字符

J.“byàHuHée?rJyfh” XXztGJrtG1rJ1

在线尝试!

该字符串是“ typetjkitkpstokrtyputjkyb”的压缩版本。由于某种原因,我无法让Pyth压缩“ atypetjkitkpstokrtyputjkyb”与功能

+++ \。N ++ hSzeSzCi-RChSzCMz-hCeSzChSzN
即使可能省去一两个字节,因为可以消除两个t。



0

Lua 153字节

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

在线尝试!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.