Översätt engelska till Corpus
On februari 2, 2021 by adminCorpus är en fiktiv fraktion från det populära videospelet Warframe som har ett något intressant språk.
Medan andra fraktioner i spelet som Grineer har en viss logik bakom sitt språk, är Corpus helt enkelt en förlorad ersättning av det engelska språket.
Alla Corpus-ord är desamma som deras engelska motsvarigheter, utom med följande alfabetiska mappningar:
Detta orsakar vissa problem med uttal som:
yes
blir yey
say
blir yay
yay
blir yay
sassy
blir yayyy
case
blir
Här ”är en textversion av mappningarna:
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
Utmaningen
Givet text med det engelska alfabetet, mata ut dess Corpus-översättning.
Till exempel blir texten Hello, World!
Keppo, Jotpp!
i Corpus
Reglerna
- Inmatningen består endast av ASCII-utskrivbara tecken
- Inmatningstexten kan innehålla blanksteg och skiljetecken, dessa måste vara bevarade
- Bokstäver måste bokstäver
- Det här är kod-golf så naturligtvis vinner färsta byte!
Testfallen
Testfall är separerade med <===========>
, med en tom rad mellan ingång och förväntad utgång
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
Om du också inkluderar en ljudinspelning (eller video med ljud) av dig som uttalar var och en av testkassans Corpusöversättningar, kan multiplicera din bytecount med 1
som belöning.
Kommentarer
Svar
Svar
05AB1E , 24 byte
ži.•ÜÁ©;«ìñä°ÔG·ÖYΘ•Du«‡
Förklaring:
‡ transliterate ži a-zA-Z with .•ÜÁ©;«ìñä°ÔG·ÖYΘ• atypetjkitkpstokrtyputjkyb Du« concatenated with itself, uppercased
Kommentarer
- Mindre 24 bytes alternativ genom att bara translitterera konsonanterna.
Svar
Charcoal , 42 byte
≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι
Testa det online! Länken är till en utförlig version av c ode. Förklaring:
≔ 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
Radbrytning och indrag är endast för läsbarhet.
Användningar SQL 2017-funktionen TRANSLATE
för teckenbyte.
Tyvärr fick jag sätta (nästan) hela alfabetet där två gånger för att behålla höljet. Det finns förmodligen bättre sätt, kanske något som hanterar t ”som en grupp, men detta fungerade för mig.
Ingången sker via en redan existerande tabell t med varchar-kolumn v , enligt våra IO-regler .
I det här fallet är tabellen måste skapas med en skiftlägeskänslig sortering , antingen genom att köra på en skiftlägeskänslig server eller genom att använda nyckelordet COLLATE
(räknas inte till totalt tecken ):
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)
Endast 3 byte kortare än att skriva både lägre och stora ersättningssträngar tillsammans …
R , 79 byte
function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]
Fancier-kod, samma byteantal.
Svar
Svar
Svar
J , 78 61 byte
-17 byte tack vare FrownyFrog!
rplc(u:,98 66+/i.25);"0(,toupper)@"typetjkitkpstokrtyputjkyb"
Kommentarer
- 61
- @FrownyFrog Tack! I min J804 kan jag ’ inte använda konstanter på höger sida. Jag måste uppgradera 🙂 Min lösning är ändå ful ….
Svar
C # (Visual C # Interactive Compiler) , 151 83 byte
n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)
Sparade hela 68 byte tack vare Pietu1998!
Kommentarer
- Du kan få ner detta till 83 byte av tar bort intervallet, kombinerar
Select
och använder bitvis operatörer för höljet. - Tack! Trevligt knep med de bitvisa operatörerna!
Svar
K (ngn / k) , 87 63 61 60 59 byte
f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}
{
}
-funktion med argument x
_
till gemener
a:
tilldela a
!128
listan 0 1 2 ... 127
@[!128;
index ;:;
värden ]
ändra det genom att ersätta elementen vid index med de givna värdena
98+!25
listan 98 99 100 ... 122
som är ascii-koder för "bcd
… z"
juxtaposition är indexering, så vi använder a
(implicit omvandlat till heltal) som index i den ändrade listan
x-a-
subtrahera från a
, sedan subtrahera form x
; detta återställer små / små bokstäver som i originalsträngen
`c$
konvertera till tecken
Svar
Näthinnan 0.8.2 , 59 byte
[a-z] $& T`l`L T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB T`L `l_` .
Prova online! Länken innehåller testfall. Förklaring:
[a-z] $&
Prefixa ett tecken som inte är ASCII till varje bokstav. (Jag försökte använda ett icke-brytande utrymme men Firefox kan ha ändrat det till ett vanligt utrymme efter kopiering och klistra in.)
T`l`L
versaler alla bokstäver.
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
Konvertera bokstäverna till Corpus.
T`L `l_` .
Små bokstäver efter det icke-ASCII-tecknet och ta bort det icke-ASCII-tecknet.
Naiv lösning är 63 byte:
T`lL`aty\petjkitk\pst\okrty\putjkybATYP\ETJKITKPST\OKRTYPUTJKYB
Prova det online! Länken innehåller testfall.
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
Anpassat från @ElPedros svar. Detta genererar ersättningen för varje ASCI-tecken i matrisen a
och använder sedan str.translate
.
Kan föras till 113 byte om det är acceptabelt att returnera en matris med tecken:
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
- Tänkte på denna tid på natten för att ta reda på hur det gjorde det. Det ’ har varit en lång dag! Trevlig lösning.
Svar
Jelly , 29 byte
“qḍỊYl4ḃ©ƭṄxḳ½Dy’ṃⱮØA,Øa¤⁺żẎy
Kommentarer
- Behöver bara kartlägga konsonanter, så
“ØṖ¦Mṗẏʋ@¥;}/’ṃⱮØCŒH¤⁺żẎy
sparar 4. (Kan ’ inte bli av med ’ y ’ medØY
eftersom den ’ s till höger om kartan)
Svar
Japt , 37 byte
;®i`
ypetjkkp¡okrtyp©jkyb`pu)gCpu bZ
Länken ovan innehåller de flesta testfall, men jag har inte kunnat mata in det näst sista en som en sträng eftersom den innehåller både enstaka och dubbla citat. Här är det testfallet, skriv in som en matris med tecken istället.
Förklaring:
; #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)
Egentligen kortare med en namngiven funktion än med en lambda!
lambda-version, 138 byte
lambda i,a="bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ",b="typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB":"".join((x,b[a.find(x)])[x in a]for x in i)
131 125 om vi får returnera en rad tecken och ha join
utanför 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 fortfarande använda en lambda om du gör och
b
globala variabler - @BlackOwlKai – Tack. Har lekt med den idén men det ’ blir sent. Kanske imorgon 🙂
- Fick ner till 120/113 tecken (TIO utan testfallen, annars skulle länken vara för lång för en kommentar)
- Slår mina och olika nog för att du ska kunna posta som ditt eget svar. Jag ’ kommer att rösta 🙂
- Du kan också stjäla mina testfall. De tog längre tid att skriva in än koden …
Svar
PHP , 100 byte
Kod
<?=strtr($argv[0],($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),($v=typtjktkpstkrtyptjkyb).$f($v));
Förklaring
# 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 antagligen använda vänster karta eller något för att bli av med två d ”s, men jag kunde inte ta reda på hur.
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 tecken
J."byàHuH¯¹e?rJyfh"XXztGJrtG1rJ1
Strängen är en komprimerad version av ” typetjkitkpstokrtyputjkyb ”. Av någon anledning kan jag inte få Pyth att komprimera ”atypetjkitkpstokrtyputjkyb” med funktionen
+++\.N++hSzeSzCi-RChSzCMz-hCeSzChSzN
även om det antagligen skulle spara en byte eller två som de två t ”s kunde elimineras.
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 ’ är en tunga-i-kind-poke vid okonstabiliteten hos många av översättningarna