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.


@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

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

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)

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()

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.




2

J , 78 61 octets

-17 octets grâce à FrownyFrog!

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

Essayez-le en ligne!



@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

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


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.


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!


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)

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!


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.

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.


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!



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.



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!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.