Traduceți limba engleză în Corpus
On februarie 2, 2021 by adminCorpus este o fracțiune fictivă din popularul joc video Warframe care au un limbaj oarecum interesant.
În timp ce alte facțiuni din joc, cum ar fi Grineer, au o logică în spatele limbajului lor, Corpusul este pur și simplu o înlocuire cu pierderi a limbii engleze.
Toate cuvintele Corpus sunt aceleași ca și omologii lor englezi, cu excepția următoarelor mapări alfabetice:
Acest lucru cauzează unele probleme cu pronunția ca:
yes
devine yey
say
devine yay
yay
devine yay
sassy
devine yayyy
case
devine
Aici „o versiune text a mapărilor:
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
Provocarea
Dat text utilizând alfabetul englez, redă traducerea Corpus.
De exemplu, textul Hello, World!
devine Keppo, Jotpp!
în Corpus
Regulile
- Introducerea va consta numai din caractere tipărite ASCII
- Textul de intrare poate conține spațiu alb și punctuație, acestea trebuie să fie conservat
- Scrierea cu majuscule a literelor trebuie păstrată
- Acesta este code-golf atât de firesc, câștigă cei mai puțini octeți!
Testcases
Cazurile de testare sunt separate cu <===========>
, cu o linie goală între intrare și ieșirea preconizată
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.
Bonusul
Dacă includeți și o înregistrare audio (sau un videoclip cu sunet) în care pronunțați fiecare dintre traducerile Corpus ale testei, poate multiplica bytecount cu 1
ca recompensă.
Comentarii
Răspuns
Răspuns
05AB1E , 24 octeți
ži.•ÜÁ©;«ìñä°ÔG·ÖYΘ•Du«‡
Explicație:
‡ transliterate ži a-zA-Z with .•ÜÁ©;«ìñä°ÔG·ÖYΘ• atypetjkitkpstokrtyputjkyb Du« concatenated with itself, uppercased
Comentarii
- Minor Alternativă de 24 octeți prin transliterarea doar a consoanelor.
Răspuns
Cărbune , 42 octeți
≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι
Încercați online! Linkul este versiunea detaliată a c odă. Explicație:
≔ 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ăspuns
T-SQL, 107 octeți
SELECT TRANSLATE(v,"bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ", "typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB")FROM t
Întreruperea de linie și indentarea sunt doar pentru lizibilitate.
Utilizări funcția SQL 2017 TRANSLATE
pentru înlocuirea caracterelor.
Din păcate a trebuit să pun (aproape) întregul alfabet de acolo de două ori pentru a menține carcasa. Există probabil căi mai bune, poate ceva care gestionează t „ca grup, dar acest lucru a funcționat pentru mine.
Intrarea se face printr-un tabel preexistent t cu coloana varchar v , conform regulilor noastre IO .
În acest caz, tabelul trebuie creat cu ajutorul unei colații sensibile la majuscule și minuscule , fie rulând pe un server sensibil la majuscule sau minuscule, fie utilizând cuvântul cheie COLLATE
(nu se ia în considerare pentru totalul de caractere ):
CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
Răspuns
JavaScript (Node.js) , 100 octeți
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ăspuns
R , 79 octeți
function(x)chartr("b-zB-Z",paste0(y<-"typetjkitkpstokrtyputjkyb",toupper(y)),x)
Cu doar 3 octeți mai scurt decât tastarea literală ambele șiruri de înlocuire mai mici și majuscule împreună …
R , 79 octeți
function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]
Cod crescător, același număr de octeți.
Răspuns
Răspundeți
Răspuns
J , 78 61 octeți
-17 octeți datorită FrownyFrog!
rplc(u:,98 66+/i.25);"0(,toupper)@"typetjkitkpstokrtyputjkyb"
Comentarii
- 61
- @FrownyFrog Mulțumesc! În J804, nu pot ‘ să folosesc constante în partea dreaptă. Am nevoie să fac upgrade 🙂 Soluția mea este urâtă, totuși ….
Răspuns
C # (Compilator interactiv Visual C #) , 151 83 octeți
n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)
A salvat 68 de octeți enorm datorită Pietu1998!
Comentarii
- Puteți obține acest lucru până la 83 octeți de eliminarea intervalului, combinarea
Select
și utilizarea operatorilor bit-bit pentru carcasă. - Mulțumesc! Un truc frumos cu operatorii puțin inteligenți!
Răspuns
K (ngn / k) , 87 63 61 60 59 octeți
f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}
{
}
funcție cu argument x
_
la minusculă
a:
atribuiți a
!128
lista 0 1 2 ... 127
@[!128;
indici ;:;
valori ]
modificați-l prin înlocuirea elementelor de la indici cu valorile
98+!25
lista 98 99 100 ... 122
care sunt codurile ascii pentru "bcd
… z"
juxtapunerea este indexare, deci folosim a
(implicit convertit în numere întregi) ca indici în lista modificată
x-a-
scădere din a
, apoi scade forma x
; aceasta restabilește litere mari / mici ca în șirul inițial
`c$
convertiți în caractere
Răspuns
Retina 0.8.2 , 59 octeți
[a-z] $& T`l`L T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB T`L `l_` .
Încercați online! Linkul include cazuri de testare. Explicație:
[a-z] $&
Prefixați un caracter non-ASCII la fiecare literă. (Am încercat să folosesc un spațiu care nu se rupe, dar Firefox ar fi putut să-l schimbe înapoi la un spațiu obișnuit după copiere și lipire.)
T`l`L
Cu majuscul literele.
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
Convertiți literele în Corpus.
T`L `l_` .
Litere mici după caracterul non-ASCII și ștergeți caracterul non-ASCII.
Soluția naivă are 63 de octeți:
T`lL`aty\petjkitk\pst\okrty\putjkybATYP\ETJKITKPST\OKRTYPUTJKYB
Încercați-l online! Linkul include cazuri de testare.
Răspuns
Python 2 , 115 octeți
lambda i:i.translate("".join(a)) a=map(chr,range(256)) b="typetjkitkpstokrtyputjkyb" a[66:91]=b.upper();a[98:123]=b
Adaptat din răspunsul @ElPedro. Acest lucru generează înlocuirea fiecărui caracter ascii din matrice a
și apoi folosește str.translate
.
Poate fi adus la 113 octeți dacă este acceptată returnarea unei matrice de caractere:
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
Comentarii
- Ne-am gândit la acest moment al nopții pentru a afla cum se descurcă. A fost ‘ o zi lungă! Soluție minunată.
Răspuns
Jelly , 29 octeți
“qḍỊYl4ḃ©ƭṄxḳ½Dy’ṃⱮØA,Øa¤⁺żẎy
Comentarii
- Trebuie doar să mapeze consoane, deci
“ØṖ¦Mṗẏʋ@¥;}/’ṃⱮØCŒH¤⁺żẎy
salvează 4. (‘ nu poate scăpa de ‘ y ‘ cuØY
deoarece ‘ se află în dreapta hărții)
Răspuns
Japt , 37 octeți
;®i`
ypetjkkp¡okrtyp©jkyb`pu)gCpu bZ
Linkul de mai sus include majoritatea cazurilor de testare, dar nu am putut introduce al doilea până la ultimul una ca un șir, deoarece conține atât ghilimele simple, cât și cele duble. Aici este cazul de testare, introdus în schimb ca o matrice de caractere.
Explicație:
; #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ăspuns
Python 2 , 138 132 bytes
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)
De fapt, mai scurt cu o funcție numită decât cu o lambda!
versiunea lambda, 138 octeți
lambda i,a="bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ",b="typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB":"".join((x,b[a.find(x)])[x in a]for x in i)
131 125 dacă ni se permite să returnăm o matrice de caractere și să avem join
în afara funcției.
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]
Comentarii
- Puteți utiliza în continuare o lambda dacă faceți și
b
variabile globale - @BlackOwlKai – Mulțumesc. M-am jucat cu această idee, dar ‘ devine târziu. Poate mâine 🙂
- Am redus la 120/113 caractere (TIO fără teste, altfel legătura ar fi prea lungă pentru o comentariu)
- Îl depășește pe al meu și este suficient de diferit pentru ca tu să-l postezi ca răspuns propriu. ‘ votez 🙂
- Simțiți-vă liber să-mi furați și cazurile de testare. Au durat mai mult timp pentru a introduce decât codul …
Răspuns
PHP , 100 octeți
Cod
<?=strtr($argv[0],($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),($v=typtjktkpstkrtyptjkyb).$f($v));
Explicație
# 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ăspuns
Pyth, 35 octeți
XQ.*m+r1dd[tG."byàHuH¯¹e?rJyfh
Ați putea folosi probabil harta din stânga sau ceva pentru a scăpa de două zile, dar nu mi-am putut da seama cum.
Răspunde
Java, 211 octeți
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));};
Comentarii
Răspuns
Pyth, 34 caractere
J."byàHuH¯¹e?rJyfh"XXztGJrtG1rJ1
Șirul este o versiune comprimată a ” typetjkitkpstokrtyputjkyb „. Din anumite motive, nu pot obține Pyth să comprime „atypetjkitkpstokrtyputjkyb” cu funcția
+++\.N++hSzeSzCi-RChSzCMz-hCeSzChSzN
, chiar dacă probabil ar salva un octet sau doi ca cei doi t „s ar putea fi eliminată.
Răspuns
Tcl , 114 octeți
proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}
Răspuns
Lua , 153 octeți
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
). ‘ este o limbă în obraz, care nu poate fi pronunțată de multe dintre traduceri.