Traduza o inglês para o Corpus
On Fevereiro 2, 2021 by adminOs Corpus são uma facção fictícia do popular videogame Warframe que tem uma linguagem um tanto interessante.
Embora outras facções do jogo, como o Grineer, tenham alguma lógica por trás de sua linguagem, o Corpus é simplesmente uma substituição com perdas do idioma inglês.
Todas as palavras do Corpus são iguais às do inglês, exceto com os seguintes mapeamentos alfabéticos:
Isso causa alguns problemas de pronúncia como:
yes
torna-se yey
say
torna-se yay
yay
torna-se yay
sassy
torna-se yayyy
case
torna-se
Aqui “uma versão de 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
Dado o texto usando o alfabeto inglês, produza sua tradução Corpus.
Por exemplo, o texto Hello, World!
torna-se Keppo, Jotpp!
no Corpus
As regras
- A entrada consistirá apenas em caracteres ASCII imprimíveis
- O texto da entrada pode conter espaços em branco e pontuação, eles devem ser preservado
- As letras maiúsculas devem ser preservadas
- Este é o code-golf então, naturalmente, o menor número de bytes ganha!
Os casos de teste
Os casos de teste são separados por <===========>
, com uma linha em branco entre a entrada e a 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) de você pronunciando cada uma das traduções do Corpus do caso de teste, você pode multiplicar seu bytecount por 1
como recompensa.
Comentários
Resposta
Resposta
05AB1E , 24 bytes
ži.•ÜÁ©;«ìñä°ÔG·ÖYΘ•Du«‡
Explicação:
‡ transliterate ži a-zA-Z with .•ÜÁ©;«ìñä°ÔG·ÖYΘ• atypetjkitkpstokrtyputjkyb Du« concatenated with itself, uppercased
Comentários
- Secundária alternativa de 24 bytes por transliteração apenas das consoantes.
Resposta
Carvão , 42 bytes
≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι
Experimente online! O link é para a versão detalhada de c tributo. 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
Resposta
T-SQL, 107 Bytes
SELECT TRANSLATE(v,"bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ", "typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB")FROM t
Quebra de linha e recuo são apenas para legibilidade.
Usos a função SQL 2017 TRANSLATE
para substituição de caracteres.
Infelizmente, tive que colocar (quase) o alfabeto inteiro lá duas vezes para manter a capitalização. Provavelmente existem maneiras melhores, talvez algo que lide com os t “s como um grupo, mas funcionou para mim.
A entrada é feita por meio de uma tabela pré-existente t com coluna varchar v , de acordo com nossas regras de IO .
Neste caso, a tabela deve ser criado usando um agrupamento que diferencia maiúsculas de minúsculas , seja executando em um servidor que diferencia maiúsculas de minúsculas ou usando a palavra-chave COLLATE
(não contado para o total de caracteres ):
CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
Resposta
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()
Resposta
R , 79 bytes
function(x)chartr("b-zB-Z",paste0(y<-"typetjkitkpstokrtyputjkyb",toupper(y)),x)
Apenas 3 bytes a menos do que digitar literalmente strings de substituição de maiúsculas e minúsculas juntas …
R , 79 bytes
function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]
Código sofisticado, mesma contagem de bytes.
Resposta
Resposta
Resposta
J , 78 61 bytes
-17 bytes graças a FrownyFrog!
rplc(u:,98 66+/i.25);"0(,toupper)@"typetjkitkpstokrtyputjkyb"
Comentários
- 61
- @FrownyFrog Obrigado! No meu J804, não posso ‘ usar constantes no lado direito. Preciso atualizar 🙂 Mesmo assim, minha solução é feia …
Resposta
C # (compilador interativo do Visual C #) , 151 83 bytes
n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)
Economizei 68 bytes graças a Pietu1998!
Comentários
- Você pode reduzir para 83 bytes por removendo o intervalo, combinando os
Select
se usando operadores bit a bit para capitalização. - Obrigado! Belo truque com os operadores bit wise!
Resposta
K (ngn / k) , 87 63 61 60 59 bytes
f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}
{
}
função com argumento x
_
para minúsculas
a:
atribuir a a
!128
a lista 0 1 2 ... 127
@[!128;
índices ;:;
valores ]
altere-o substituindo os elementos em índices pelos valores
98+!25
a lista 98 99 100 ... 122
que são os códigos ascii para "bcd
… z"
a justaposição é indexação, então usamos a
(convertido implicitamente em números inteiros) como índices na lista alterada
x-a-
subtrair de a
e, em seguida, subtraia a forma x
; isto restaura maiúsculas / minúsculas como na string original
`c$
converter para caracteres
Resposta
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] $&
Coloque um prefixo de um caractere não ASCII em cada letra. (Eu tentei usar um espaço sem quebra, mas o Firefox pode ter alterado de volta para um espaço regular após copiar e colar.)
T`l`L
Todas as letras maiúsculas letras.
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
Converta as letras para Corpus.
T`L `l_` .
Coloque as letras em minúsculas depois 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.
Resposta
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 da resposta de @ElPedro. Isso gera a substituição de cada caractere ascii na matriz a
e depois usa str.translate
.
Pode ser levado a 113 bytes se retornar 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
Comentários
- Pensei um pouco a essa hora da noite para descobrir como estava se saindo. ‘ foi um longo dia! Ótima solução.
Resposta
Jelly , 29 bytes
“qḍỊYl4ḃ©ƭṄxḳ½Dy’ṃⱮØA,Øa¤⁺żẎy
Comentários
- Só precisam mapear consoantes, então
“ØṖ¦Mṗẏʋ@¥;}/’ṃⱮØCŒH¤⁺żẎy
salva 4. (É possível ‘ se livrar de ‘ y ‘ comØY
uma vez que ‘ está à direita do mapa)
Resposta
Japt , 37 bytes
;®i`
ypetjkkp¡okrtyp©jkyb`pu)gCpu bZ
O link acima inclui a maioria dos casos de teste, mas não fui capaz de inserir o penúltimo um como string porque contém aspas simples e duplas. Aqui está o 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: `
ypetjkkp¡okrtyp©jkyb` # Get the lowercase Corpus alphabet pu) # Plus the uppercase Corpus alphabet i # Add Z at the end (index -1)
Resposta
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)
Na verdade, mais curto com uma função nomeada do que com um 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)
131 125 se pudermos retornar uma matriz de caracteres e tiver o join
fora da função.
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]
Comentários
- Você ainda pode usar um lambda se e
b
variáveis globais - @BlackOwlKai – Obrigado. Tenho brincado com essa ideia, mas está ‘ ficando tarde. Talvez amanhã 🙂
- Baixei para 120/113 caracteres (TIO sem os casos de teste, caso contrário, o link seria muito longo para um comentário)
- Bate o meu e diferente o suficiente para você postar como sua própria resposta. Eu ‘ votarei positivamente 🙂
- Sinta-se à vontade para roubar meus casos de teste também. Eles demoraram mais para digitar do que o código …
Resposta
PHP , 100 bytes
Código
<?=strtr($argv[0],($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),($v=typtjktkpstkrtyptjkyb).$f($v));
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.
Resposta
Pyth, 35 Bytes
XQ.*m+r1dd[tG."byàHuH¯¹e?rJyfh
Provavelmente poderia usar o mapa esquerdo ou algo para se livrar do dois d “s, mas não consegui descobrir como.
Resposta
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));};
Comentários
Resposta
Pyth, 34 caracteres
J."byàHuH¯¹e?rJyfh"XXztGJrtG1rJ1
A string é uma versão compactada de ” typetjkitkpstokrtyputjkyb “. Por alguma razão, não consigo fazer o Pyth compactar “atypetjkitkpstokrtyputjkyb” com a função
+++\.N++hSzeSzCi-RChSzCMz-hCeSzChSzN
, embora provavelmente salvasse um ou dois bytes como os dois t “s poderia ser eliminado.
Resposta
Tcl , 114 bytes
proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}
Resposta
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
). É ‘ uma provocação irônica ao impronunciável de muitas das traduções