Traduci l'inglese in Corpus


14

I Corpus sono una fazione immaginaria del popolare videogioco Warframe che ha un linguaggio un po 'interessante.

Mentre altre fazioni nel gioco come il Grineer hanno una logica dietro la loro lingua, il Corpus è semplicemente una sostituzione in perdita della lingua inglese.

Tutte le parole del Corpus sono uguali alle loro controparti inglesi, ad eccezione delle seguenti mappature alfabetiche:

Mappatura dall'inglese al corpus

Ciò causa alcuni problemi con la pronuncia come:

yesdiventa yey
saydiventa yay
yaydiventa yay
sassydiventa yayyy
casediventayaye

Ecco una versione testuale dei mapping:

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

La sfida

Dato il testo usando l'alfabeto inglese, produce la sua traduzione Corpus.

Ad esempio, il testo Hello, World!diventa Keppo, Jotpp!in Corpus

Le regole

  • L'input consisterà solo di caratteri stampabili ASCII
  • Il testo di input può contenere spazi bianchi e punteggiatura, questi devono essere conservati
  • Le lettere maiuscole devono essere preservate
  • Questo è il così naturalmente, vince meno byte!

Le prove

I casi di test sono separati da <===========>, con una riga vuota tra input e output previsto

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.

Il bonus

Se includi anche una registrazione audio (o un video con audio) che pronunci ciascuna delle traduzioni Corpus della testcase, puoi moltiplicare il tuo conto in cambio di 1una ricompensa.


@Shaggy Certo, avrei dovuto pensarci
Skidsdev il

4
@RobertS. non fornisce inoltre alcun bonus al tuo punteggio ( x * 1 == x). È uno
scherzo ironico per l'imprevedibilità

1
L'output può essere una matrice di caratteri?
ElPedro,

@Skidsdev Le "traduzioni" sono pronunciabili; sia come voce umana registrata sia a livello di programmazione usando le tecnologie di apprendimento automatico e / o sintesi vocale.
ospite271314

1
E così è nata la lingua finlandese!
sergiol,

Risposte:




4

Carbone , 42 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

≔                       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 byte

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

L'interruzione di riga e il rientro sono solo per leggibilità.

Utilizza la funzione SQL 2017 TRANSLATEper la sostituzione dei caratteri.

Sfortunatamente ho dovuto inserire (quasi) l'intero alfabeto due volte per mantenere l'involucro. Probabilmente ci sono modi migliori, forse qualcosa che gestisce la t come gruppo, ma questo ha funzionato per me.

L'input avviene tramite una tabella preesistente t con la colonna varchar v , secondo le nostre regole IO .

In questo caso, la tabella deve essere creata utilizzando regole di confronto con distinzione tra maiuscole e minuscole , eseguendo su un server con distinzione tra maiuscole e minuscole o utilizzando la COLLATEparola chiave (non conteggiata per il totale dei caratteri):

CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)

3

JavaScript (Node.js) , 100 byte

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

Provalo online!

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 byte

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

Provalo online!

Solo 3 byte in meno rispetto alla digitazione letterale di stringhe di sostituzione sia maiuscole che minuscole ...

R , 79 byte

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

Provalo online!

Codice Fancier, stesso conteggio byte.






2

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

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

Provalo online!

{ } funzione con argomento x

_ in minuscolo

a: assegnato a a

!128 la lista 0 1 2 ... 127

@[!128; i ;:; valori degli indici] lo modificano sostituendo gli elementi negli indici con i valori indicati

98+!25l'elenco 98 99 100 ... 122che sono i codici ascii per "bcd...z"

la giustapposizione sta indicizzando, quindi utilizziamo a(implicitamente convertito in numeri interi) come indici nell'elenco modificato

x-a-sottrai a, quindi sottrai forma x; questo ripristina lettere maiuscole / minuscole come nella stringa originale

`c$ convertire in caratteri


1

Retina 0.8.2 , 59 byte

[a-z]
 $&
T`l`L
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
T`L `l_` .

Provalo online! Il link include casi di test. Spiegazione:

[a-z]
 $&

Prefisso un carattere non ASCII per ogni lettera. (Ho provato a utilizzare uno spazio non-break ma Firefox potrebbe averlo riportato in uno spazio normale dopo averlo copiato e incollato.)

T`l`L

Maiuscole tutte le lettere.

T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB

Converti le lettere in Corpus.

T`L `l_` .

Minuscole le lettere dopo il carattere non ASCII ed eliminare il carattere non ASCII.

La soluzione naïve è di 63 byte:

T`lL`aty\petjkitk\pst\okrty\putjkybATYP\ETJKITKPST\OKRTYPUTJKYB

Provalo online! Il link include casi di test.


1

Python 2 , 115 byte

lambda i:i.translate(''.join(a))
a=map(chr,range(256))
b='typetjkitkpstokrtyputjkyb'
a[66:91]=b.upper();a[98:123]=b

Provalo online!

Adattato dalla risposta di @ ElPedro. Questo genera la sostituzione per ogni carattere ASCII dell'arraya e quindi lo utilizza str.translate.

Può essere portato a 113 byte se è accettabile la restituzione di un array di caratteri:

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

Provalo online!


Ci sono voluti alcuni pensieri a quest'ora della notte per capire come lo stava facendo. È stata una lunga giornata! Bella soluzione.
ElPedro,


1

Japt , 37 byte

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

Provalo online!

Il link sopra include la maggior parte dei casi di test, ma non sono stato in grado di inserire il secondo all'ultimo come stringa perché contiene virgolette singole e doppie. Ecco quel test case, inserisci invece un array di caratteri.

Spiegazione:

;                                        #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 byte

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)

Provalo online!

In realtà più breve con una funzione denominata che con una lambda!

versione lambda, 138 byte

lambda i,a='bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ',b='typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB':''.join((x,b[a.find(x)])[x in a]for x in i)

Provalo online!

131 125 se ci è permesso di restituire una matrice di caratteri e averejoinla funzione esterna.

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]

Provalo online!


1
Puoi ancora usare una lambda se fai ae bvariabili globali
Black Owl Kai

@BlackOwlKai - Grazie. Ho giocato con quell'idea ma si sta facendo tardi. Forse domani :)
ElPedro il

Sono arrivato a 120/113 caratteri (TIO senza i testcase, altrimenti il ​​collegamento sarebbe troppo lungo per un commento)
Black Owl Kai

Batte il mio e abbastanza diverso da pubblicare come risposta. Sarò votato :)
ElPedro il

Sentiti libero di rubare anche i miei casi di test. Ci sono voluti più tempo per digitare rispetto al codice ...
ElPedro

0

PHP , 100 byte

Codice

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

Provalo online!

Spiegazione

# 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 byte

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

Provalo!

Probabilmente potrei usare la mappa di sinistra o qualcosa del genere per sbarazzarmi delle due d, ma non sono riuscito a capire come.


0

Java, 211 byte

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

Provalo online!



0

Pyth, 34 caratteri

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

Provalo online!

La stringa è una versione compressa di "typetjkitkpstokrtyputjkyb" . Per qualche motivo non riesco a far comprimere "atypetjkitkpstokrtyputjkyb" con Pyth con la funzione

+++ \. N ++ hSzeSzCi-RChSzCMz-hCeSzChSzN
anche se probabilmente risparmierebbe un byte o due poiché le due t potrebbero essere eliminate.


0

Tcl , 114 byte

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

Provalo online!


0

Lua , 153 byte

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

Provalo online!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.