Traduzir Inglês para Corpus


14

O Corpus é uma facção fictícia do popular videogame Warframe, que possui uma linguagem um tanto interessante.

Enquanto outras facções do jogo, como o Grineer, têm alguma lógica por trás do idioma, o Corpus é simplesmente uma substituição com perdas do idioma inglês.

Todas as palavras de Corpus são iguais às de outras línguas inglesas, exceto com os seguintes mapeamentos alfabéticos:

Mapeamento de inglês para corpus

Isso causa alguns problemas com a pronúncia como:

yestorna- yey
sayse yay
yaytorna- yay
sassyse yayyy
casetorna- se torna- seyaye

Aqui está uma versão em texto dos mapeamentos:

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

O desafio

Fornecido texto usando o alfabeto inglês, produz a sua tradução para Corpus.

Por exemplo, o texto Hello, World!fica Keppo, Jotpp!em Corpus

As regras

  • A entrada consistirá apenas em caracteres imprimíveis ASCII
  • O texto de entrada pode conter espaços em branco e pontuação; eles devem ser preservados
  • Letras maiúsculas devem ser preservadas
  • Isso é então, naturalmente, o menor número de bytes vence!

Os casos de teste

Os casos de teste são separados por <===========>, com uma linha em branco entre entrada e saída esperada

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.

O Bônus

Se você também incluir uma gravação de áudio (ou vídeo com áudio) pronunciando cada uma das traduções do Corpus do testcase, você poderá multiplicar sua contagem de bytes 1como recompensa.


@Shaggy Claro, deveria ter pensado nisso #
Skidsdev

4
@RobertS. também não oferece bônus à sua pontuação ( x * 1 == x). É um puxão tongue-in-cheek na unpronouncability de muitas das traduções
Skidsdev

1
A saída pode ser uma matriz de caracteres?
ElPedro

@Skidsdev As "traduções" são pronunciáveis; como voz humana gravada ou programaticamente usando aprendizado de máquina e / ou tecnologias de conversão de texto em fala.
guest271314

1
E assim nasceu a língua finlandesa!
sergiol

Respostas:




4

Carvão , 42 bytes

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

Experimente online! Link é a versão detalhada do código. Explicação:

≔                       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

Quebra de linha e recuo são apenas para legibilidade.

Usa a função SQL 2017 TRANSLATEpara substituição de caracteres.

Infelizmente tive que colocar (quase) todo o alfabeto lá duas vezes para manter a caixa. Provavelmente existem maneiras melhores, talvez algo que lide com o ' t ' como um grupo, mas isso funcionou para mim.

A entrada é feita através de uma tabela preexistente t com a coluna varchar v , de acordo com nossas regras de IO .

Nesse caso, a tabela deve ser criada usando um agrupamento com distinção entre maiúsculas e minúsculas , executando em um servidor com distinção entre maiúsculas e minúsculas ou usando a COLLATEpalavra - chave (não contada no total de caracteres):

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

3

JavaScript (Node.js) , 100 bytes

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

Experimente 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 bytes

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

Experimente online!

Apenas 3 bytes mais curtos do que digitar literalmente as seqüências de substituição em maiúsculas e minúsculas juntas ...

R , 79 bytes

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

Experimente online!

Código mais sofisticado, mesma contagem de bytes.






2

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

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

Experimente online!

{ } função com argumento x

_ para minúsculas

a: atribuir a a

!128 a lista 0 1 2 ... 127

@[!128; os ;:; valores dos índices o] alteram, substituindo os elementos nos índices pelos valores fornecidos

98+!25a lista de 98 99 100 ... 122códigos ASCII para "bcd...z"

justaposição é indexação, então usamos a (convertidos implicitamente em números inteiros) como índices na lista alterada

x-a-subtrair de a, depois subtrair forma x; isso restaura maiúsculas / minúsculas como na string original

`c$ converter em caracteres


1

Retina 0.8.2 , 59 bytes

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

Experimente online! O link inclui casos de teste. Explicação:

[a-z]
 $&

Prefixe um caractere não ASCII para cada letra. (Tentei usar um espaço sem quebra, mas o Firefox pode ter alterado novamente para um espaço normal depois de copiar e colar.)

T`l`L

Maiúsculas todas as letras.

T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB

Converta as letras em Corpus.

T`L `l_` .

Letras minúsculas após o caractere não ASCII e exclua o caractere não ASCII.

A solução ingênua é de 63 bytes:

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

Experimente online! O link inclui casos de teste.


1

Python 2 , 115 bytes

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

Experimente online!

Adaptado da resposta de @ ElPedro. Isso gera a substituição para todos os caracteres ascii na matriz ae depois os usa str.translate.

Pode ser trazido para 113 bytes se o retorno de uma matriz de caracteres for aceitável:

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

Experimente online!


Foi preciso pensar a essa hora da noite para descobrir como estava sendo feito. Tem sido um longo dia! Ótima solução.
ElPedro


1

Japonês , 37 bytes

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

Experimente online!

O link acima inclui a maioria dos casos de teste, mas não consegui inserir o penúltimo como último, como uma string, pois contém aspas simples e duplas. Aqui está esse caso de teste, insira como uma matriz de caracteres.

Explicação:

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

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)

Experimente online!

Realmente mais curto com uma função nomeada do que com uma lambda!

versão lambda, 138 bytes

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

Experimente online!

131 125 se tivermos permissão para retornar uma matriz de caracteres e terjoina função externa.

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]

Experimente online!


1
Você ainda pode usar um lambda se você fizer ae bvariáveis globais
Coruja preta Kai

@BlackOwlKai - Thanks. Estão brincando com essa ideia, mas está ficando tarde. Talvez amanhã :)
ElPedro

Entendi até 120/113 caracteres (TIO sem os casos de teste, então a ligação seria muito tempo para um comentário)
Preto Kai Owl

É melhor que o meu e diferente o suficiente para você postar como sua própria resposta.
Voto a favor

Fique à vontade para roubar meus casos de teste também. Eles demoraram mais tempo para digitar do que o código ... #
ElPedro

0

PHP , 100 bytes

Código

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

Experimente online!

Explicação

# 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

Tente!

Provavelmente poderia usar o mapa esquerdo ou algo assim para se livrar dos dois d's, mas não consegui descobrir como.


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

Experimente online!



0

Pyth, 34 caracteres

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

Experimente online!

A sequência é uma versão compactada do "typetjkitkpstokrtyputjkyb" . Por alguma razão, não consigo fazer o Pyth compactar "atypetjkitkpstokrtyputjkyb" com a função

+++ \. N ++ hSzeSzCi-RChSzCMz-hCeSzChSzN
mesmo que provavelmente salvasse um byte ou dois, pois os dois t's poderiam ser eliminados.



0

Lua , 153 bytes

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

Experimente online!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.