Traduire langlais en corpus
On février 2, 2021 by adminLe Corpus est une faction fictive du jeu vidéo populaire Warframe qui ont un langage quelque peu intéressant.
Alors que dautres factions dans le jeu comme les Grineer ont une certaine logique derrière leur langage, le Corpus est simplement une substitution avec perte de la langue anglaise.
Tous les mots Corpus sont les mêmes que leurs équivalents anglais, sauf avec les mappages alphabétiques suivants:
Cela pose des problèmes de prononciation comme:
yes
devient yey
say
devient yay
yay
devient yay
sassy
devient yayyy
case
devient
Voici « une version texte des mappages:
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
Le défi
Étant donné le texte utilisant lalphabet anglais, afficher sa traduction Corpus.
Par exemple, le texte Hello, World!
devient Keppo, Jotpp!
dans Corpus
Les règles
- Lentrée ne sera composée que de caractères ASCII imprimables
- Le texte dentrée peut contenir des espaces et des signes de ponctuation, ceux-ci doivent être préservé
- La majuscule des lettres doit être préservée
- Ceci est code-golf donc naturellement, le moins doctets gagne!
Les cas de test
Les cas de test sont séparés par <===========>
, avec une ligne vide entre lentrée et la sortie attendue
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.
Le bonus
Si vous incluez également un enregistrement audio (ou vidéo avec audio) de vous prononçant chacune des traductions Corpus du testcase, vous peut multiplier votre nombre doctets par 1
comme récompense.
Commentaires
Réponse
Réponse
05AB1E , 24 octets
ži.•ÜÁ©;«ìñä°ÔG·ÖYΘ•Du«‡
Explication:
‡ transliterate ži a-zA-Z with .•ÜÁ©;«ìñä°ÔG·ÖYΘ• atypetjkitkpstokrtyputjkyb Du« concatenated with itself, uppercased
Commentaires
- Mineur Alternative 24 octets en translittérant uniquement les consonnes.
Réponse
Fusain , 42 octets
≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι
Essayez-le en ligne! Le lien vers la version détaillée de c ode. Explication:
≔ 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
Réponse
T-SQL, 107 octets
SELECT TRANSLATE(v,"bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ", "typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB")FROM t
Le saut de ligne et le retrait sont uniquement destinés à la lisibilité.
Utilisations la fonction SQL 2017 TRANSLATE
pour le remplacement de caractères.
Malheureusement, a dû mettre (presque) lalphabet entier ici deux fois pour maintenir la casse. Il existe probablement de meilleures façons, peut-être quelque chose qui gère les t « en tant que groupe, mais cela a fonctionné pour moi.
Lentrée se fait via une table préexistante t avec la colonne varchar v , selon nos règles IO .
Dans ce cas, le tableau doit être créé à laide dun classement sensible à la casse , soit en sexécutant sur un serveur sensible à la casse, soit à laide du mot clé COLLATE
(non comptabilisé dans le nombre total de caractères ):
CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
Réponse
JavaScript (Node.js) , 100 octets
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()
Réponse
R , 79 octets
function(x)chartr("b-zB-Z",paste0(y<-"typetjkitkpstokrtyputjkyb",toupper(y)),x)
Seulement 3 octets plus court quune saisie littérale les chaînes de remplacement minuscules et majuscules ensemble …
R , 79 octets
function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]
Code plus sophistiqué, même nombre doctets.
Réponse
Réponse
Réponse
J , 78 61 octets
-17 octets grâce à FrownyFrog!
rplc(u:,98 66+/i.25);"0(,toupper)@"typetjkitkpstokrtyputjkyb"
Commentaires
- 61
- @FrownyFrog Merci! Dans mon J804, je ne peux ‘ utiliser des constantes sur le côté droit. Jai besoin de mettre à jour 🙂 Ma solution est néanmoins moche ….
Réponse
C # (compilateur interactif Visual C #) , 151 83 octets
n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)
Vous avez sauvé 68 octets grâce à Pietu1998!
Commentaires
- Vous pouvez le ramener à 83 octets par en supprimant la plage, en combinant les
Select
et en utilisant des opérateurs au niveau du bit pour la casse. - Merci! Belle astuce avec les opérateurs de bits!
Réponse
K (ngn / k) , 87 63 61 60 59 octets
f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}
{
}
fonction avec argument x
_
en minuscules
a:
attribuer à a
!128
la liste 0 1 2 ... 127
@[!128;
indices ;:;
valeurs ]
modifiez-le en remplaçant les éléments des indices par les valeurs
98+!25
la liste 98 99 100 ... 122
qui sont les codes ascii pour "bcd
… z"
la juxtaposition est une indexation, nous utilisons donc a
(implicitement converti en entiers) en tant quindices dans la liste modifiée
x-a-
soustraire de a
, puis soustrayez le formulaire x
; cela restaure les majuscules / minuscules comme dans la chaîne dorigine
`c$
convertir en caractères
Réponse
Retina 0.8.2 , 59 octets
[a-z] $& T`l`L T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB T`L `l_` .
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
[a-z] $&
Préfixez un caractère non ASCII à chaque lettre. (Jai essayé dutiliser un espace insécable, mais Firefox la peut-être changé en un espace normal après avoir copié et collé.)
T`l`L
Tout en majuscules lettres.
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
Convertit les lettres en Corpus.
T`L `l_` .
Minuscules les lettres après le caractère non-ASCII et supprimez le caractère non-ASCII.
La solution naïve est de 63 octets:
T`lL`aty\petjkitk\pst\okrty\putjkybATYP\ETJKITKPST\OKRTYPUTJKYB
Essayez-le en ligne! Le lien inclut des cas de test.
Réponse
Python 2 , 115 octets
lambda i:i.translate("".join(a)) a=map(chr,range(256)) b="typetjkitkpstokrtyputjkyb" a[66:91]=b.upper();a[98:123]=b
Adapté de la réponse de @ElPedro « . Cela génère le remplacement de chaque caractère ascii du tableau a
puis utilise str.translate
.
Peut être amené à 113 octets si le renvoi dun tableau de caractères est acceptable:
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
Commentaires
- Jai réfléchi à cette heure de la nuit pour comprendre comment il le faisait. ‘ a été une longue journée! Bonne solution.
Réponse
Jelly , 29 octets
“qḍỊYl4ḃ©ƭṄxḳ½Dy’ṃⱮØA,Øa¤⁺żẎy
Commentaires
- Il suffit de mapper les consonnes, donc
“ØṖ¦Mṗẏʋ@¥;}/’ṃⱮØCŒH¤⁺żẎy
enregistre 4. (Peut ‘ t se débarrasser de ‘ y ‘ avecØY
car ‘ se trouve à droite de la carte)
Réponse
Japt , 37 octets
;®i`
ypetjkkp¡okrtyp©jkyb`pu)gCpu bZ
Le lien ci-dessus comprend la plupart des cas de test, mais je nai pas pu saisir lavant-dernier un sous forme de chaîne car il contient à la fois des guillemets simples et doubles. Voici ce cas de test, à saisir sous forme de tableau de caractères.
Explication:
; #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)
Réponse
Python 2 , 138 132 octets
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 fait, plus court avec une fonction nommée quavec un lambda!
version lambda, 138 octets
lambda i,a="bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ",b="typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB":"".join((x,b[a.find(x)])[x in a]for x in i)
131 125 si nous sommes autorisés à renvoyer un tableau de caractères et à avoir le join
en dehors de la fonction.
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]
Commentaires
- Vous pouvez toujours utiliser un lambda si vous faites et
b
variables globales - @BlackOwlKai – Merci. Jai joué avec cette idée, mais ‘ se fait tard. Peut-être demain 🙂
- Réduit à 120/113 caractères (TIO sans les cas de test, sinon le lien serait trop long pour un comment)
- Beats le mien et assez différent pour que vous puissiez publier votre propre réponse. Je ‘ je vais voter 🙂
- Nhésitez pas à voler mes cas de test également. Ils ont mis plus de temps à saisir que le code …
Réponse
PHP , 100 octets
Code
<?=strtr($argv[0],($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),($v=typtjktkpstkrtyptjkyb).$f($v));
Explication
# 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.
Réponse
Pyth, 35 octets
XQ.*m+r1dd[tG."byàHuH¯¹e?rJyfh
Pourrait probablement utiliser la carte de gauche ou quelque chose pour se débarrasser du deux d « s, mais je nai pas pu comprendre comment.
Réponse
Java, 211 octets
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));};
Commentaires
Réponse
Pyth, 34 caractères
J."byàHuH¯¹e?rJyfh"XXztGJrtG1rJ1
La chaîne est une version compressée de » typetjkitkpstokrtyputjkyb « . Pour une raison quelconque, je ne parviens pas à faire compresser Pyth « atypetjkitkpstokrtyputjkyb » avec la fonction
+++\.N++hSzeSzCi-RChSzCMz-hCeSzChSzN
même si cela sauverait probablement un octet ou deux comme les deux pourrait être éliminé.
Réponse
Tcl , 114 octets
proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}
Réponse
Lua , 153 octets
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
). Il ‘ est une pique ironique sur limprononçabilité de nombreuses traductions