Traducir Inglés a Corpus


14

Los Corpus son una facción ficticia del popular videojuego Warframe que tienen un lenguaje algo interesante.

Mientras que otras facciones en el juego, como los Grineer, tienen cierta lógica detrás de su idioma, el Corpus es simplemente una sustitución con pérdidas del idioma inglés.

Todas las palabras de Corpus son las mismas que sus equivalentes en inglés, excepto con las siguientes asignaciones alfabéticas:

Mapeo de inglés a corpus

Esto causa algunos problemas con la pronunciación como:

yesse yey
sayconvierte yay
yayse yay
sassyconvierte yayyy
casese convierte se convierte enyaye

Aquí hay una versión de texto de las asignaciones:

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

El reto

Dado el texto que usa el alfabeto inglés, genera su traducción Corpus.

Por ejemplo, el texto se Hello, World!convierte Keppo, Jotpp!en Corpus

Las normas

  • La entrada solo consistirá en caracteres imprimibles ASCII
  • El texto de entrada puede contener espacios en blanco y puntuación, estos deben conservarse
  • Se deben preservar las mayúsculas de las letras.
  • Este es el así que, naturalmente, ¡gana la menor cantidad de bytes!

Los casos de prueba

Los casos de prueba están separados por <===========>, con una línea en blanco entre la entrada y la salida 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.

El bono

Si también incluye una grabación de audio (o video con audio) de usted pronunciando cada una de las traducciones de Corpus del caso de prueba, puede multiplicar su bytecount por 1una recompensa.


@Shaggy Claro, debería haber pensado en eso
Skidsdev

44
@RobertS. tampoco proporciona bonificación a su puntaje ( x * 1 == x). Es un golpe la lengua en la mejilla en el unpronouncability de muchas de las traducciones
Skidsdev

1
¿Puede la salida ser una matriz de caracteres?
ElPedro

@Skidsdev Las "traducciones" son pronunciables; ya sea como una voz humana grabada o mediante programación utilizando aprendizaje automático y / o tecnologías de texto a voz.
invitado271314

1
¡Y así nació el idioma finlandés!
sergiol

Respuestas:




4

Carbón , 42 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:

≔                       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

El salto de línea y la sangría son solo para legibilidad.

Utiliza la función SQL 2017 TRANSLATEpara el reemplazo de caracteres.

Desafortunadamente, tuve que poner (casi) todo el alfabeto allí dos veces para mantener la carcasa. Probablemente hay mejores formas, tal vez algo que maneje las t como grupo, pero esto funcionó para mí.

La entrada es a través de una tabla t existente con la columna varchar v , según nuestras reglas de IO .

En este caso, la tabla debe crearse usando una intercalación entre mayúsculas y minúsculas , ya sea ejecutándose en un servidor sensible a mayúsculas o minúsculas o usando la COLLATEpalabra clave (sin contar para el 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()))

Pruébalo en línea!

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)

Pruébalo en línea!

Solo 3 bytes más cortos que literalmente escribiendo cadenas de reemplazo en mayúsculas y minúsculas juntas ...

R , 79 bytes

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

Pruébalo en línea!

Código más elegante, mismo recuento de bytes.






2

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

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

Pruébalo en línea!

{ } funcionar con argumento x

_ en minúsculas

a: asignar a a

!128 la lista 0 1 2 ... 127

@[!128; los ;:; valores de los índices lo] modifican reemplazando los elementos en los índices con los valores dados

98+!25la lista 98 99 100 ... 122que son los códigos ascii para "bcd...z"

la yuxtaposición es indexación, por lo que usamos a(convertidos implícitamente a enteros) como índices en la lista modificada

x-a-restar de a, luego restar forma x; esto restaura mayúsculas / minúsculas como en la cadena original

`c$ convertir a personajes


1

Retina 0.8.2 , 59 bytes

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

Pruébalo en línea! El enlace incluye casos de prueba. Explicación:

[a-z]
 $&

Prefije un carácter no ASCII a cada letra. (Intenté usar un espacio sin interrupciones, pero Firefox podría haberlo cambiado a un espacio normal después de copiar y pegar).

T`l`L

Todas las letras en mayúscula.

T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB

Convierte las letras a Corpus.

T`L `l_` .

Las letras minúsculas después del carácter no ASCII y eliminan el carácter no ASCII.

La solución ingenua es de 63 bytes:

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

Pruébalo en línea! El enlace incluye casos de prueba.


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

Pruébalo en línea!

Adaptado de la respuesta de @ ElPedro. Esto genera el reemplazo para cada carácter ascii en la matriz ay luego lo usa str.translate.

Se puede llevar a 113 bytes si es aceptable devolver una matriz de caracteres:

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

Pruébalo en línea!


Pensé un poco a esta hora de la noche para averiguar cómo lo estaba haciendo. ¡Ha sido un largo día! Buena solución
ElPedro


1

Japt , 37 bytes

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

Pruébalo en línea!

El enlace anterior incluye la mayoría de los casos de prueba, pero no he podido ingresar el penúltimo como una cadena porque contiene comillas simples y dobles. Aquí está ese caso de prueba, ingrese como una matriz de caracteres en su lugar.

Explicación:

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

Pruébalo en línea!

¡Realmente más corto con una función con nombre que con una lambda!

versión lambda, 138 bytes

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

Pruébalo en línea!

131 125 si se nos permite devolver una matriz de caracteres y tenerjoinfuera de la función.

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]

Pruébalo en línea!


1
Todavía se puede utilizar un lambda si haces ay bvariables globales
Negro búho Kai

@BlackOwlKai - Gracias. He estado jugando con esa idea pero se está haciendo tarde. Quizás mañana :)
ElPedro

Se redujo a 120/113 caracteres (TIO sin los casos de prueba, de lo contrario, el enlace sería demasiado largo para un comentario)
Black Owl Kai

Es mejor que el mío y lo suficientemente diferente para que puedas publicarlo como tu propia respuesta. Voy a votar :)
ElPedro

Siéntase libre de robar mis casos de prueba también.
Tardaron

0

PHP , 100 bytes

Código

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

Pruébalo en línea!

Explicación

# 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

¡Intentalo!

Probablemente podría usar el mapa de la izquierda o algo para deshacerse de las dos d, pero no pude entender cómo.


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

Pruébalo en línea!



0

Pyth, 34 caracteres

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

Pruébalo en línea!

La cadena es una versión comprimida de "typetjkitkpstokrtyputjkyb" . Por alguna razón, no puedo hacer que Pyth comprima "atypetjkitkpstokrtyputjkyb" con la función

+++ \. N ++ hSzeSzCi-RChSzCMz-hCeSzChSzN
aunque probablemente ahorraría un byte o dos, ya que las dos t podrían eliminarse.



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

Pruébalo en línea!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.