Traduire l'anglais en corpus

14

Les Corpus sont une faction fictive du populaire jeu vidéo Warframe qui a un langage quelque peu intéressant.

Alors que d'autres factions du jeu telles que Grineer ont une certaine logique derrière leur langue, le Corpus est simplement une substitution à perte de la langue anglaise.

Tous les mots du corpus sont les mêmes que leurs homologues anglais, sauf avec les correspondances alphabétiques suivantes:

Cartographie de l'anglais vers le corpus

Cela provoque des problèmes de prononciation comme:

yesdevient yey
saydevient yay
yaydevient yay
sassydevient yayyy
casedevientyaye

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 l'alphabet anglais, sortez sa traduction Corpus.

Par exemple, le texte Hello, World!devient Keppo, Jotpp!Corpus

Les règles

  • L'entrée se composera uniquement de caractères imprimables ASCII
  • Le texte d'entrée peut contenir des espaces et des signes de ponctuation, ceux-ci doivent être préservés
  • La capitalisation des lettres doit être préservée
  • C'est du donc naturellement, le moins d'octets gagne!

Les Testcases

Les cas de test sont séparés par <===========>, avec une ligne vierge entre l'entré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 du Corpus du testcase, vous pouvez multiplier votre bytecount par 1en récompense.

Skidsdev
la source
@Shaggy Bien sûr, j'aurais dû y penser
Skidsdev
4
@RobertS. il ne fournit également aucun bonus à votre score ( x * 1 == x). C'est un coup de langue à l'imprononçabilité de nombreuses traductions
Skidsdev
1
La sortie peut-elle être un tableau de caractères?
ElPedro
@Skidsdev Les "traductions" sont prononçables; soit en tant que voix humaine enregistrée, soit en utilisant des technologies d'apprentissage automatique et / ou de synthèse vocale.
guest271314
1
Et ainsi est née la langue finnoise!
sergiol

Réponses:

4

05AB1E , 24 octets

ži.•ÜÁ©;«ìñä°ÔG·ÖYΘ•Du«‡

Explication:

                       ‡   transliterate
ži                         a-zA-Z with
  .•ÜÁ©;«ìñä°ÔG·ÖYΘ•       atypetjkitkpstokrtyputjkyb
                    Du«    concatenated with itself, uppercased

Essayez-le en ligne!

Okx
la source
Alternative mineure de 24 octets en translittérant uniquement les consonnes.
Kevin Cruijssen
4

Fusain , 42 octets

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

Essayez-le en ligne! Le lien est vers la version détaillée du code. 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
Neil
la source
4

T-SQL, 107 octets

SELECT TRANSLATE(v,'bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ',
                   'typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB')FROM t

Le saut de ligne et le retrait sont uniquement pour la lisibilité.

Utilise la fonction SQL 2017 TRANSLATEpour le remplacement de caractères.

Malheureusement, il a dû y mettre (presque) tout l'alphabet deux fois pour maintenir le boîtier. Il y a probablement de meilleures façons, peut-être quelque chose qui gère les t en tant que groupe, mais cela a fonctionné pour moi.

Entrée se fait par une table pré-existante t avec la colonne varchar v , selon nos règles IO .

Dans ce cas, la table doit être créée à l'aide d'un classement sensible à la casse , soit en s'exécutant sur un serveur sensible à la casse, soit en utilisant le COLLATEmot clé (non compté dans le total des caractères):

CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
BradC
la source
3

JavaScript (Node.js) , 100 octets

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

Essayez-le en ligne!

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()
Arnauld
la source
3

R , 79 octets

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

Essayez-le en ligne!

Seulement 3 octets de moins que de taper littéralement des chaînes de remplacement minuscules et majuscules ensemble ...

R , 79 octets

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

Essayez-le en ligne!

Code plus sophistiqué, même nombre d'octets.

Kirill L.
la source
2

J , 78 61 octets

-17 octets grâce à FrownyFrog!

rplc(u:,98 66+/i.25);"0(,toupper)@'typetjkitkpstokrtyputjkyb'

Essayez-le en ligne!

Galen Ivanov
la source
2
61
FrownyFrog
@FrownyFrog Merci! Dans mon J804, je ne peux pas utiliser de constantes sur le côté droit. J'ai besoin de mettre à jour :) Ma solution est moche quand même ....
Galen Ivanov
2

C # (Visual C # Interactive Compiler) , 151 83 octets

n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)

Essayez-le en ligne!

68 octets sauvés grâce à Pietu1998!

Incarnation de l'ignorance
la source
Vous pouvez le réduire à 83 octets en supprimant la plage, en combinant les Selects et en utilisant des opérateurs au niveau du bit pour la casse.
PurkkaKoodari
Merci! Belle astuce avec les opérateurs peu sages!
Incarnation de l'ignorance
2

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

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

Essayez-le en ligne!

{ } fonction avec argument x

_ en minuscules

a: affecter à a

!128 la liste 0 1 2 ... 127

@[!128; les ;:; valeurs des indices le] modifient en remplaçant les éléments des indices par les valeurs données

98+!25la liste 98 99 100 ... 122qui sont les codes ascii pour "bcd...z"

la juxtaposition est l'indexation, nous utilisons donc a(convertis implicitement en entiers) comme indices dans la liste modifiée

x-a-soustraire de a, puis soustraire la forme x; cela restaure les majuscules / minuscules comme dans la chaîne d'origine

`c$ convertir en caractères

ngn
la source
1

Rétine 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. (J'ai essayé d'utiliser un espace insécable mais Firefox peut l'avoir changé en un espace normal après avoir copié et collé.)

T`l`L

Majuscules toutes les lettres.

T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB

Convertissez les lettres en Corpus.

T`L `l_` .

Minuscule 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.

Neil
la source
1

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

Essayez-le en ligne!

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 porté à 113 octets si le retour d'un 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

Essayez-le en ligne!

Chouette noire Kai
la source
A réfléchi à cette heure de la nuit pour savoir comment cela se passait. Ça a été une longue journée! Belle solution.
ElPedro
1

Japt , 37 octets

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

Essayez-le en ligne!

Le lien ci-dessus inclut la plupart des cas de test, mais je n'ai pas pu saisir l'avant-dernier sous forme de chaîne car il contient des guillemets simples et doubles. Voici ce cas de test, entré à la place 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:
   `…ypetjkŠkp¡okrtyp©jkyb`              #  Get the lowercase Corpus alphabet
                           pu)           #  Plus the uppercase Corpus alphabet
  i                                      #  Add Z at the end (index -1)
Kamil Drakari
la source
0

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)

Essayez-le en ligne!

En fait plus court avec une fonction nommée qu'avec 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)

Essayez-le en ligne!

131 125 si nous sommes autorisés à retourner un tableau de caractères et à l'joinextérieur 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]

Essayez-le en ligne!

ElPedro
la source
1
Vous pouvez toujours utiliser un lambda si vous faites aet les bvariables globales
Owl Noir Kai
@BlackOwlKai - Merci. J'ai joué avec cette idée mais il se fait tard. Peut-être demain :)
ElPedro
Je suis descendu à 120/113 caractères (TIO sans les testcases, sinon le lien serait trop long pour un commentaire)
Black Owl Kai
Beats le mien et assez différent pour que vous puissiez poster votre propre réponse. Je voterai :)
ElPedro
N'hésitez pas à voler mes cas de test également. Ils ont mis plus de temps à taper que le code ...
ElPedro
0

PHP , 100 octets

Code

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

Essayez-le en ligne!

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.
Francisco Hahn
la source
0

Pyth, 35 octets

XQ.*m+r1dd[tG."byàHuH¯¹e?rJyfh

Essayez!

Pourrait probablement utiliser la carte de gauche ou quelque chose pour se débarrasser des deux d, mais je n'ai pas pu comprendre comment.

KarlKastor
la source
0

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

Essayez-le en ligne!

Hypino
la source
191 octets
Plafond
0

Pyth, 34 caractères

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

Essayez-le en ligne!

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 économiserait probablement un octet ou deux car les deux t pourraient être éliminés.

Lucas Bertocchini
la source
0

Tcl , 114 octets

proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}

Essayez-le en ligne!

sergiol
la source
0

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

Essayez-le en ligne!

Visckmart
la source