Oversæt engelsk til Corpus
On februar 2, 2021 by adminCorpus er en fiktiv fraktion fra det populære videospil Warframe , der har et noget interessant sprog.
Mens andre fraktioner i spillet som Grineer har en vis logik bag deres sprog, er Corpus simpelthen en tabsfri erstatning af det engelske sprog.
Alle Corpus-ord er de samme som deres engelske kolleger, undtagen med følgende alfabetiske kortlægninger:
Dette medfører nogle problemer med udtalen som:
yes
bliver yey
say
bliver yay
yay
bliver yay
sassy
bliver yayyy
case
bliver
Her “er en tekstversion af kortlægningerne:
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
Udfordringen
Givet tekst ved hjælp af det engelske alfabet, output sin Corpus-oversættelse.
For eksempel bliver teksten Hello, World!
Keppo, Jotpp!
i Corpus
Reglerne
- Input består kun af ASCII-printbare tegn
- Inputtekst kan indeholde mellemrum og tegnsætning, disse skal være bevaret
- Store bogstaver skal bevares
- Dette er code-golf så naturligvis vinder færrest byte!
Testcases
Testcases er adskilt med <===========>
med en tom linje mellem 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 en lydoptagelse (eller video med lyd) af dig, der udtaler hver af testcases Corpus-oversættelser, skal du kan gange din bytælling 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 kun at translitterere konsonanterne.
Svar
Charcoal , 42 bytes
≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι
Prøv det online! Link er til at uddybe version af 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 Bytes
SELECT TRANSLATE(v,"bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ", "typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB")FROM t
Linjeskift og indrykning er kun til læsbarhed.
Anvendelser SQL 2017-funktionen TRANSLATE
til udskiftning af tegn.
Desværre måtte sætte (næsten) hele alfabetet derinde to gange for at opretholde kabinettet. Der er sandsynligvis bedre måder, måske noget der håndterer t “som en gruppe, men dette fungerede for mig.
Input er via en allerede eksisterende tabel t med varchar-kolonne v , i henhold til vores IO-regler .
I dette tilfælde er tabellen skal oprettes ved hjælp af en sagsfølsom sortering enten ved at køre på en sagsfølsom server eller ved hjælp af nøgleordet 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)
Kun 3 byte kortere end at skrive bogstaveligt både lavere og store udskiftningsstrenge sammen …
R , 79 byte
function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]
Fancier-kode, samme antal byte.
Svar
Svar
Svar
J , 78 61 byte
-17 bytes takket være FrownyFrog!
rplc(u:,98 66+/i.25);"0(,toupper)@"typetjkitkpstokrtyputjkyb"
Kommentarer
- 61
- @FrownyFrog Tak! I min J804 kan jeg ‘ ikke bruge konstanter i højre side. Jeg har brug for at opgradere 🙂 Min løsning er alligevel grim ….
Svar
C # (Visual C # Interactive Compiler) , 151 83 bytes
n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)
Gemte hele 68 byte takket være Pietu1998!
Kommentarer
- Du kan få dette ned til 83 byte af fjerner rækkevidden, kombinerer
Select
og bruger bitvise operatorer til kabinet. - Tak! Dejligt trick med de bitvise operatører!
Svar
K (ngn / k) , 87 63 61 60 59 bytes
f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}
{
}
funktion med argument x
_
til små bogstaver
a:
tildel til a
!128
listen 0 1 2 ... 127
@[!128;
indeks ;:;
værdier ]
rediger det ved at erstatte elementerne ved indeks med de givne værdier
98+!25
listen 98 99 100 ... 122
som er ascii-koder for "bcd
… z"
sidestilling er indeksering, så vi bruger a
(implicit konverteret til heltal) som indekser i den ændrede liste
x-a-
trækker fra a
, træk derefter form x
; dette gendanner små / små bogstaver som i den oprindelige streng
`c$
konverteres til tegn
Svar
Nethinden 0.8.2 , 59 byte
[a-z] $& T`l`L T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB T`L `l_` .
Prøv det online! Link inkluderer testcases. Forklaring:
[a-z] $&
Præfiks et ikke-ASCII-tegn til hvert bogstav. (Jeg forsøgte at bruge et ikke-brudende rum, men Firefox har muligvis ændret det til et almindeligt mellemrum efter kopiering og indsættelse.)
T`l`L
Store bogstaver bogstaver.
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
Konverter bogstaverne til Corpus.
T`L `l_` .
Små bogstaver efter ikke-ASCII-tegnet og slet ikke-ASCII-tegnet.
Naiv løsning er 63 byte:
T`lL`aty\petjkitk\pst\okrty\putjkybATYP\ETJKITKPST\OKRTYPUTJKYB
Prøv det online! Link inkluderer testcases.
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 arrayet a
og bruger derefter str.translate
.
Kan bringes til 113 byte , hvis det er acceptabelt at returnere en matrix med tegn:
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
- Tog nogle tanker på dette tidspunkt af natten for at finde ud af, hvordan det gjorde det. Det ‘ har været en lang dag! Dejlig løsning.
Svar
Jelly , 29 byte
“qḍỊYl4ḃ©ƭṄxḳ½Dy’ṃⱮØA,Øa¤⁺żẎy
Kommentarer
- Behøver kun at kortlægge konsonanter, så
“ØṖ¦Mṗẏʋ@¥;}/’ṃⱮØCŒH¤⁺żẎy
sparer 4. (Kan ‘ ikke slippe af med ‘ y ‘ medØY
da det ‘ er til højre på kortet)
Svar
Japt , 37 byte
;®i`
ypetjkkp¡okrtyp©jkyb`pu)gCpu bZ
Ovenstående link inkluderer de fleste testsager, men jeg har ikke været i stand til at indtaste det næstsidste en som en streng, fordi den indeholder både enkelt og dobbelt anførselstegn. Her er den test sag, indtastes som en matrix af 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)
Faktisk kortere med en navngivet funktion end med en lambda!
lambda-version, 138 bytes
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 at returnere en række tegn og have join
uden for funktionen.
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 stadig bruge en lambda, hvis du laver og
b
globale variabler - @BlackOwlKai – Tak. Har spillet med den idé, men det ‘ bliver sent. Måske i morgen 🙂
- Fik det ned til 120/113 tegn (TIO uden testcases, ellers ville linket være for langt til en kommentar)
- Slår min og anderledes nok til at du kan skrive som dit eget svar. Jeg ‘ vil stemme 🙂
- Du er også velkommen til at stjæle mine testsager. De tog længere tid at indtaste end 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
Kunne sandsynligvis bruge venstre kort eller noget for at slippe af med to d “s, men jeg kunne ikke finde ud af 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 komprimeret version af ” typetjkitkpstokrtyputjkyb “. Af en eller anden grund kan jeg ikke få Pyth til at komprimere “atypetjkitkpstokrtyputjkyb” med funktionen
+++\.N++hSzeSzCi-RChSzCMz-hCeSzChSzN
, selvom det sandsynligvis ville spare en byte eller to som de to ter kunne elimineres.
Svar
Tcl , 114 bytes
proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}
Svar
Lua , 153 bytes
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-kind-poke ved uudtaleligheden af mange af oversættelserne