Traduci linglese in Corpus
Su Febbraio 2, 2021 da adminI Corpus sono una fazione immaginaria del popolare videogioco Warframe che hanno un linguaggio piuttosto interessante.
Mentre altre fazioni nel gioco come i Grineer hanno una logica dietro il loro linguaggio, il Corpus è semplicemente una sostituzione con perdite della lingua inglese.
Tutte le parole di Corpus sono le stesse delle loro controparti inglesi, tranne con le seguenti mappature alfabetiche:
Ciò causa alcuni problemi con la pronuncia come:
yes
diventa yey
say
diventa yay
yay
diventa yay
sassy
diventa yayyy
case
diventa
Ecco “una versione testuale delle mappature:
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 che utilizza lalfabeto inglese, produce la sua traduzione in Corpus.
Ad esempio, il testo Hello, World!
diventa Keppo, Jotpp!
in Corpus
Le regole
- Linput consisterà solo di caratteri stampabili ASCII
- Il testo di input può contenere spazi bianchi e punteggiatura, questi devono essere preservato
- Le lettere maiuscole devono essere preservate
- Questo è code-golf , quindi, naturalmente, vince meno byte!
I casi di test
I casi di test sono separati da <===========>
, con una riga vuota tra linput e loutput 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 video con audio) della tua pronuncia di ciascuna delle traduzioni del corpus del testcase, può moltiplicare il tuo bytecount per 1
come ricompensa.
Commenti
Risposta
Risposta
05AB1E , 24 byte
ži.•ÜÁ©;«ìñä°ÔG·ÖYΘ•Du«‡
Spiegazione:
‡ transliterate ži a-zA-Z with .•ÜÁ©;«ìñä°ÔG·ÖYΘ• atypetjkitkpstokrtyputjkyb Du« concatenated with itself, uppercased
Commenti
- Minore alternativa a 24 byte traslitterando solo le consonanti.
Risposta
Carbone , 42 bytes
≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι
Provalo online! Il link è alla versione dettagliata di c ode. 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
Risposta
T-SQL, 107 byte
SELECT TRANSLATE(v,"bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ", "typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB")FROM t
Linterruzione di riga e il rientro sono solo di leggibilità.
Usi la funzione SQL 2017 TRANSLATE
per la sostituzione dei caratteri.
Sfortunatamente ho dovuto inserire (quasi) lintero alfabeto lì due volte per mantenere le maiuscole. Probabilmente ci sono modi migliori, forse qualcosa che gestisce i t “come gruppo, ma per me ha funzionato.
Limmissione avviene tramite una tabella preesistente t con la colonna varchar v , secondo le nostre regole IO .
In questo caso la tabella deve essere creato utilizzando un confronto con distinzione tra maiuscole e minuscole , eseguendolo su un server che fa distinzione tra maiuscole e minuscole o utilizzando la parola chiave COLLATE
(non conteggiata nel totale dei caratteri ):
CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
Risposta
JavaScript (Node.js) , 100 byte
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()
Risposta
R , 79 byte
function(x)chartr("b-zB-Z",paste0(y<-"typetjkitkpstokrtyputjkyb",toupper(y)),x)
Solo 3 byte in meno rispetto alla digitazione letterale stringhe di sostituzione sia minuscole che maiuscole insieme …
R , 79 byte
function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]
Codice elaborato, stesso numero di byte.
Risposta
Risposta
Risposta
J , 78 61 byte
-17 byte grazie a FrownyFrog!
rplc(u:,98 66+/i.25);"0(,toupper)@"typetjkitkpstokrtyputjkyb"
Commenti
- 61
- @FrownyFrog Grazie! Nel mio J804 posso ‘ t utilizzare le costanti sul lato destro. Devo aggiornare 🙂 La mia soluzione è comunque brutta ….
Risposta
C # (Visual C # Interactive Compiler) , 151 83 byte
n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)
Hai salvato ben 68 byte grazie a Pietu1998!
Commenti
- Puoi arrivare a 83 byte per rimuovendo lintervallo, combinando i
Select
e utilizzando operatori bit a bit per il maiuscolo / minuscolo. - Grazie! Bel trucco con gli operatori un po saggi!
Rispondi
K (ngn / k) , 87 63 61 60 59 byte
f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}
{
}
funzione con argomento x
_
in minuscolo
a:
assegnare a a
!128
lelenco 0 1 2 ... 127
@[!128;
indici ;:;
valori ]
modificalo sostituendo gli elementi in indici con i valori
98+!25
lelenco 98 99 100 ... 122
che sono i codici ASCII per "bcd
… z"
la giustapposizione è indicizzazione, quindi usiamo a
(convertito implicitamente in numeri interi) come indici nellelenco modificato
x-a-
sottrai da a
, quindi sottrai la forma x
; questo ripristina le maiuscole / minuscole come nella stringa originale
`c$
converti in caratteri
Risposta
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] $&
Aggiungere un carattere non ASCII a ciascuna lettera. (Ho provato a utilizzare uno spazio unificatore ma Firefox potrebbe averlo modificato in uno spazio normale dopo averlo copiato e incollato.)
T`l`L
Tutte le lettere maiuscole lettere.
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
Converti le lettere in Corpus.
T`L `l_` .
Minuscolo le lettere dopo il carattere non ASCII ed elimina il carattere non ASCII.
La soluzione naïve è 63 byte:
T`lL`aty\petjkitk\pst\okrty\putjkybATYP\ETJKITKPST\OKRTYPUTJKYB
Provalo online! Il link include casi di test.
Risposta
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
Adattato dalla risposta di @ElPedro “. Questo genera la sostituzione di ogni carattere ASCII nellarray a
e quindi utilizza str.translate
.
Può essere portato a 113 byte se la restituzione di un array di caratteri è accettabile:
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
Commenti
- Ci ho pensato un po a questora della notte per capire come stava andando. ‘ è stata una lunga giornata! Bella soluzione.
Rispondi
Jelly , 29 byte
“qḍỊYl4ḃ©ƭṄxḳ½Dy’ṃⱮØA,Øa¤⁺żẎy
Commenti
- È necessario mappare solo le consonanti, quindi
“ØṖ¦Mṗẏʋ@¥;}/’ṃⱮØCŒH¤⁺żẎy
salva 4. (È possibile ‘ t eliminare ‘ y ‘ conØY
poiché ‘ si trova a destra della mappa)
Risposta
Japt , 37 byte
;®i`
ypetjkkp¡okrtyp©jkyb`pu)gCpu bZ
Il link sopra include la maggior parte dei casi di test, ma non sono stato in grado di inserire il penultimo uno come stringa perché contiene virgolette singole e doppie. Qui è lo scenario di test, invece immetti come 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: `
ypetjkkp¡okrtyp©jkyb` # Get the lowercase Corpus alphabet pu) # Plus the uppercase Corpus alphabet i # Add Z at the end (index -1)
Risposta
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)
In realtà più breve con una funzione con nome che con un lambda!
versione lambda, 138 byte
lambda i,a="bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ",b="typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB":"".join((x,b[a.find(x)])[x in a]for x in i)
131 125 se siamo autorizzati a restituire un array di caratteri e abbiamo join
allesterno della funzione.
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]
Commenti
- Puoi ancora utilizzare un lambda se fai e
b
variabili globali - @BlackOwlKai – Grazie. Ho giocato con quellidea ma ‘ si sta facendo tardi. Forse domani 🙂
- Sono arrivato a 120/113 caratteri (TIO senza i casi di prova, altrimenti il collegamento sarebbe troppo lungo per un commento)
- Batte il mio e abbastanza diverso da poter essere pubblicato come risposta. ‘ lodo a favore 🙂
- Sentiti libero di rubare anche i miei casi di test. Hanno impiegato più tempo a digitare rispetto al codice …
Risposta
PHP , 100 byte
Codice
<?=strtr($argv[0],($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),($v=typtjktkpstkrtyptjkyb).$f($v));
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.
Risposta
Pyth, 35 byte
XQ.*m+r1dd[tG."byàHuH¯¹e?rJyfh
Probabilmente potresti usare la mappa di sinistra o qualcosa del genere per sbarazzarti due d “s, ma non sono riuscito a capire come.
Risposta
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));};
Commenti
Risposta
Pyth, 34 caratteri
J."byàHuH¯¹e?rJyfh"XXztGJrtG1rJ1
La stringa è una versione compressa di ” typetjkitkpstokrtyputjkyb “. Per qualche motivo non riesco a far sì che Pyth comprima “atypetjkitkpstokrtyputjkyb” con la funzione
+++\.N++hSzeSzCi-RChSzCMz-hCeSzChSzN
anche se probabilmente salverebbe uno o due byte come due t “s potrebbe essere eliminato.
Risposta
Tcl , 114 bytes
proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}
Risposta
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
x * 1 == x
). È ‘ uno scherzo ironico sullimpronunabilità di molte delle traduzioni