Oversett engelsk til Corpus
On februar 2, 2021 by adminCorpus er en fiktiv fraksjon fra det populære videospillet Warframe som har et litt interessant språk.
Mens andre fraksjoner i spillet som Grineer har litt logikk bak språket sitt, er Corpus ganske enkelt en tapsløs erstatning av det engelske språket.
Alle Corpus-ord er de samme som deres engelske kolleger, bortsett fra med følgende alfabetiske kartlegginger:
Dette gir noen problemer med uttalen som:
yes
blir yey
say
blir yay
yay
blir yay
sassy
blir yayyy
case
blir
Her «er en tekstversjon av tilordningene:
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
Utfordringen
Gitt tekst med det engelske alfabetet, skriv ut Corpus-oversettelsen.
For eksempel blir teksten Hello, World!
Keppo, Jotpp!
i Corpus
Reglene
- Inndata vil bare bestå av ASCII-utskrivbare tegn
- Inngangstekst kan inneholde mellomrom og tegnsetting, disse må være bevart
- Store bokstaver må bevares
- Dette er code-golf så naturlig, færrest byte vinner!
Testcases
Testcases er skilt med <===========>
, med en tom linje mellom input og forventet output
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.
Bonusen
Hvis du også inkluderer et lydopptak (eller video med lyd) av deg som uttaler hver av Corpus-oversettelsene til testkofferten, kan multiplisere bytellingen med 1
som en belønning.
Kommentarer
Svar
Svar
05AB1E , 24 byte
ži.•ÜÁ©;«ìñä°ÔG·ÖYΘ•Du«‡
Forklaring:
‡ transliterate ži a-zA-Z with .•ÜÁ©;«ìñä°ÔG·ÖYΘ• atypetjkitkpstokrtyputjkyb Du« concatenated with itself, uppercased
Kommentarer
- Mindre 24 bytes alternativ ved å omskrive bare konsonantene.
Svar
Charcoal , 42 byte
≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι
Prøv det på nettet! Link er å utdype versjonen av c ode. Forklaring:
≔ 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
Svar
T-SQL, 107 byte
SELECT TRANSLATE(v,"bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ", "typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB")FROM t
Linjeskift og innrykk er kun for lesbarhet.
Bruk SQL 2017-funksjonen TRANSLATE
for tegnutskiftning.
Måtte dessverre sette (nesten) hele alfabetet der to ganger for å opprettholde dekselet. Det er sannsynligvis bedre måter, kanskje noe som håndterer t «som en gruppe, men dette fungerte for meg.
Inngangen skjer via en eksisterende tabell t med varchar kolonne v , i henhold til våre IO-regler .
I dette tilfellet er tabellen må opprettes ved hjelp av en saksfølsom sortering , enten ved å kjøre på en saksfølsom server, eller ved å bruke nøkkelordet COLLATE
):
CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
Svar
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()
Svar
R , 79 byte
function(x)chartr("b-zB-Z",paste0(y<-"typetjkitkpstokrtyputjkyb",toupper(y)),x)
Bare tre byte kortere enn å skrive bokstavelig talt både erstatningsstrenger med mellom- og store bokstaver sammen …
R , 79 byte
function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]
Fancier code, same byte count.
Answer
Svar
Svar
J , 78 61 byte
-17 byte takket være FrownyFrog!
rplc(u:,98 66+/i.25);"0(,toupper)@"typetjkitkpstokrtyputjkyb"
Kommentarer
- 61
- @FrownyFrog Takk! I J804-en min kan jeg ‘ ikke bruke konstanter på høyre side. Jeg må oppgradere 🙂 Løsningen min er likevel stygg ….
Svar
C # (Visual C # Interactive Compiler) , 151 83 byte
n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)
Lagret hele 68 byte takket være Pietu1998!
Kommentarer
- Du kan få dette ned til 83 byte av fjerne rekkevidden, kombinere
Select
og bruke bitvise operatorer for foringsrør. - Takk! Fint triks med de bitvise operatørene!
Svar
K (ngn / k) , 87 63 61 60 59 byte
f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}
{
}
funksjon med argument x
_
til småbokstaver
a:
tilordne til a
!128
listen 0 1 2 ... 127
@[!128;
indekser ;:;
verdier ]
endre det ved å erstatte elementene ved indekser med de gitte verdiene
98+!25
listen 98 99 100 ... 122
som er ascii-kodene for "bcd
… z"
sidestilling er indeksering, så vi bruker a
(implisitt konvertert til heltall) som indekser i den endrede listen
x-a-
trekker fra a
, og trekk deretter skjema x
; dette gjenoppretter store / små bokstaver som i originalstrengen
`c$
konverter til tegn
Svar
Retina 0.8.2 , 59 byte
[a-z] $& T`l`L T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB T`L `l_` .
Prøv det online! Link inkluderer testtilfeller. Forklaring:
[a-z] $&
Prefiks et tegn som ikke er ASCII til hver bokstav. (Jeg prøvde å bruke et mellomrom, men Firefox kan ha endret det tilbake til et vanlig mellomrom etter kopiering og liming.)
T`l`L
Store bokstaver bokstaver.
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
Konverter bokstavene til Corpus.
T`L `l_` .
Små bokstaver etter ikke-ASCII-tegnet og slett ikke-ASCII-tegnet.
Naiv løsning er 63 byte:
T`lL`aty\petjkitk\pst\okrty\putjkybATYP\ETJKITKPST\OKRTYPUTJKYB
Prøv det online! Link inkluderer testtilfeller.
Svar
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
Tilpasset fra @ElPedros svar. Dette genererer erstatningen for hvert ASCII-tegn i matrisen a
og bruker deretter str.translate
.
Kan bringes til 113 byte hvis retur av en rekke tegn er akseptabelt:
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
Kommentarer
- Tok noen tanker på denne tiden av natten for å finne ut hvordan den gjorde det. Det ‘ har vært en lang dag! Fin løsning.
Svar
Jelly , 29 byte
“qḍỊYl4ḃ©ƭṄxḳ½Dy’ṃⱮØA,Øa¤⁺żẎy
Kommentarer
- Bare trenger å kartlegge konsonanter, så
“ØṖ¦Mṗẏʋ@¥;}/’ṃⱮØCŒH¤⁺żẎy
sparer 4. (Kan ‘ ikke bli kvitt ‘ y ‘ medØY
siden det ‘ er til høyre på kartet)
Svar
Japt , 37 byte
;®i`
ypetjkkp¡okrtyp©jkyb`pu)gCpu bZ
Ovenstående lenke inneholder de fleste testtilfeller, men jeg har ikke klart å legge inn den nest siste en som en streng fordi den inneholder både enkle og doble anførselstegn. Her er det testtilfellet, skriv inn som en rekke tegn i stedet.
Forklaring:
; #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)
Svar
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)
Egentlig kortere med en navngitt funksjon enn med en lambda!
lambda-versjon, 138 byte
lambda i,a="bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ",b="typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB":"".join((x,b[a.find(x)])[x in a]for x in i)
131 125 hvis vi får lov til å returnere en rekke tegn og har join
utenfor funksjonen.
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]
Kommentarer
- Du kan fortsatt bruke en lambda hvis du lager og
b
globale variabler - @BlackOwlKai – Takk. Har lekt med den ideen, men det ‘ blir sent. Kanskje i morgen 🙂
- Fikk det ned til 120/113 tegn (TIO uten testkasser, ellers ville lenken være for lang til en kommentar)
- Slår mine og forskjellige nok til at du kan legge ut som ditt eget svar. Jeg ‘ kommer til å stemme 🙂
- stjeler gjerne også prøvesakene mine. De tok lengre tid å skrive inn enn koden …
Svar
PHP , 100 byte
Kode
<?=strtr($argv[0],($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),($v=typtjktkpstkrtyptjkyb).$f($v));
Forklaring
# 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.
Svar
Pyth, 35 byte
XQ.*m+r1dd[tG."byàHuH¯¹e?rJyfh
Kan trolig bruke venstre kart eller noe for å bli kvitt to d «s, men jeg kunne ikke finne ut hvordan.
Svar
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));};
Kommentarer
Svar
Pyth, 34 tegn
J."byàHuH¯¹e?rJyfh"XXztGJrtG1rJ1
Strengen er en komprimert versjon av » typetjkitkpstokrtyputjkyb «. Av en eller annen grunn kan jeg ikke få Pyth til å komprimere «atypetjkitkpstokrtyputjkyb» med funksjonen
+++\.N++hSzeSzCi-RChSzCMz-hCeSzChSzN
selv om det sannsynligvis vil spare en byte eller to som de to t-ene kunne elimineres.
Svar
Tcl , 114 byte
proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}
Svar
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
). Det ‘ er en tunge-i-kinn-poke på uttalen av mange av oversettelsene