Traducir del inglés al Corpus
On febrero 2, 2021 by adminLos 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 algo de lógica detrás de su lenguaje, el Corpus es simplemente una sustitución con pérdida del idioma inglés.
Todas las palabras de Corpus son iguales que sus contrapartes en inglés, excepto con las siguientes asignaciones alfabéticas:
Esto causa algunos problemas con la pronunciación como:
yes
se convierte en yey
say
se convierte en yay
yay
se convierte en yay
sassy
se convierte en yayyy
case
se convierte en
Aquí «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 desafío
Dado el texto que usa el alfabeto inglés, genere su traducción de Corpus.
Por ejemplo, el texto Hello, World!
se convierte en Keppo, Jotpp!
en Corpus
Las reglas
- La entrada solo constará de caracteres imprimibles ASCII
- El texto de entrada puede contener espacios en blanco y puntuación, estos deben ser preservado
- Se deben preservar las mayúsculas de las letras
- Esto es code-golf , así que, naturalmente, ¡gana menos bytes!
Los casos de prueba
Los casos de prueba se separan con <===========>
, 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.
La bonificación
Si también incluye una grabación de audio (o video con audio) de usted pronunciando cada una de las traducciones del Corpus del caso de prueba, puede multiplicar su cuenta de bytes por 1
como recompensa.
Comentarios
Respuesta
Respuesta
05AB1E , 24 bytes
ži.•ÜÁ©;«ìñä°ÔG·ÖYΘ•Du«‡
Explicación:
‡ transliterate ži a-zA-Z with .•ÜÁ©;«ìñä°ÔG·ÖYΘ• atypetjkitkpstokrtyputjkyb Du« concatenated with itself, uppercased
Comentarios
- Menor Alternativa de 24 bytes transliterando solo las consonantes.
Respuesta
Charcoal , 42 bytes
≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι
Pruébelo en línea. El enlace corresponde a la versión detallada de c oda. 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
Respuesta
T-SQL, 107 Bytes
SELECT TRANSLATE(v,"bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ", "typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB")FROM t
El salto de línea y la sangría son solo para facilitar la lectura.
Usos la función SQL 2017 TRANSLATE
para el reemplazo de caracteres.
Desafortunadamente, tuve que poner (casi) todo el alfabeto allí dos veces para mantener la carcasa. Probablemente haya mejores formas, tal vez algo que maneje los t «como grupo, pero esto funcionó para mí.
La entrada se realiza a través de una tabla preexistente t con columna varchar v , según nuestras reglas IO .
En este caso, la tabla debe crearse utilizando una intercalación que distinga entre mayúsculas y minúsculas , ya sea ejecutándose en un servidor que distinga entre mayúsculas y minúsculas o utilizando la palabra clave COLLATE
(no se cuenta para el total de caracteres ):
CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
Respuesta
JavaScript (Node.js) , 100 bytes
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()
Respuesta
R , 79 bytes
function(x)chartr("b-zB-Z",paste0(y<-"typetjkitkpstokrtyputjkyb",toupper(y)),x)
Solo 3 bytes menos que escribir literalmente cadenas de reemplazo de mayúsculas y minúsculas juntas …
R , 79 bytes
function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]
Código más elegante, mismo número de bytes.
Respuesta
Respuesta
Responder
J , 78 61 bytes
-17 bytes gracias a FrownyFrog!
rplc(u:,98 66+/i.25);"0(,toupper)@"typetjkitkpstokrtyputjkyb"
Comentarios
- 61
- @FrownyFrog ¡Gracias! En mi J804 no puedo ‘ t usar constantes en el lado derecho. Necesito actualizar 🙂 Mi solución es fea, sin embargo ….
Respuesta
C # (compilador interactivo de Visual C #) , 151 83 bytes
n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)
Ahorró la friolera de 68 bytes gracias a Pietu1998!
Comentarios
- Puede reducir esto a 83 bytes por eliminando el rango, combinando los
Select
sy usando operadores bit a bit para el uso de mayúsculas y minúsculas. - ¡Gracias! ¡Buen truco con los operadores de bits!
Respuesta
K (ngn / k) , 87 63 61 60 59 bytes
f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}
{
}
función con argumento x
_
a minúsculas
a:
asignar a a
!128
la lista 0 1 2 ... 127
@[!128;
índices ;:;
valores ]
modifíquelo reemplazando los elementos en índices con los valores
98+!25
la lista 98 99 100 ... 122
que son los códigos ascii para "bcd
… z"
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 reste la forma x
; esto restaura mayúsculas / minúsculas como en la cadena original
`c$
convertir a caracteres
Respuesta
Retina 0.8.2 , 59 bytes
[a-z] $& T`l`L T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB T`L `l_` .
¡Pruébelo en línea! El enlace incluye casos de prueba. Explicación:
[a-z] $&
Prefije un carácter no ASCII a cada letra. (Traté de usar un espacio que no se rompa, pero es posible que Firefox lo haya cambiado a un espacio normal después de copiar y pegar).
T`l`L
En mayúsculas todos los letras.
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
Convierta las letras a Corpus.
T`L `l_` .
Ponga en minúscula las letras después el carácter no ASCII y elimine el carácter no ASCII.
La solución ingenua es de 63 bytes:
T`lL`aty\petjkitk\pst\okrty\putjkybATYP\ETJKITKPST\OKRTYPUTJKYB
¡Pruébelo en línea! El enlace incluye casos de prueba.
Respuesta
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
Adaptado de la respuesta de @ElPedro. Esto genera el reemplazo para cada carácter ascii en la matriz a
y luego 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
Comentarios
- Me tomó un poco de pensar a esta hora de la noche para averiguar cómo lo estaba haciendo. ¡Ha sido ‘ un día largo! Buena solución.
Respuesta
Jelly , 29 bytes
“qḍỊYl4ḃ©ƭṄxḳ½Dy’ṃⱮØA,Øa¤⁺żẎy
Comentarios
- Solo es necesario mapear consonantes, por lo que
“ØṖ¦Mṗẏʋ@¥;}/’ṃⱮØCŒH¤⁺żẎy
guarda 4. (¿Puede ‘ deshacerse de ‘ y ‘ conØY
ya que ‘ está a la derecha del mapa)
Responder
Japt , 37 bytes
;®i`
ypetjkkp¡okrtyp©jkyb`pu)gCpu bZ
El enlace anterior incluye la mayoría de los casos de prueba, pero no he podido ingresar el penúltimo uno como una cadena porque contiene comillas simples y dobles. Aquí está ese caso de prueba, ingrese como una matriz de caracteres.
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: `
ypetjkkp¡okrtyp©jkyb` # Get the lowercase Corpus alphabet pu) # Plus the uppercase Corpus alphabet i # Add Z at the end (index -1)
Respuesta
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)
¡En realidad, 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)
131 125 si podemos devolver una matriz de caracteres y tenemos el join
fuera 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]
Comentarios
- Aún puede usar una lambda si crea y
b
variables globales - @BlackOwlKai – Gracias. He estado jugando con esa idea, pero ‘ se hace tarde. Quizás mañana 🙂
- Lo reduje a 120/113 caracteres (TIO sin los casos de prueba, de lo contrario, el enlace sería demasiado largo para comentario)
- Supera al mío y lo suficientemente diferente para que lo publiques como tu propia respuesta. Yo ‘ votaré 🙂
- Siéntase libre de robar mis casos de prueba también. Tardaron más en escribir que el código …
Respuesta
PHP , 100 bytes
Código
<?=strtr($argv[0],($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),($v=typtjktkpstkrtyptjkyb).$f($v));
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.
Respuesta
Pyth, 35 Bytes
XQ.*m+r1dd[tG."byàHuH¯¹e?rJyfh
Probablemente podría usar el mapa izquierdo o algo para deshacerse del dos d «s, pero no pude averiguar cómo.
Respuesta
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));};
Comentarios
Respuesta
Pyth, 34 caracteres
J."byàHuH¯¹e?rJyfh"XXztGJrtG1rJ1
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 uno o dos bytes como los dos t «s podría eliminarse.
Respuesta
Tcl , 114 bytes
proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}
Respuesta
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
x * 1 == x
). Es ‘ un comentario irónico a la falta de pronunciación de muchas de las traducciones