Přeložit angličtinu do korpusu
On 2 února, 2021 by adminKorpus je fiktivní frakce z populární videohry Warframe , kteří mají trochu zajímavý jazyk.
Zatímco jiné frakce ve hře, jako je Grineer, mají za svým jazykem určitou logiku, Corpus je jednoduše ztrátová záměna anglického jazyka.
Všechna slova korpusu jsou stejná jako jejich anglická protějšky, kromě následujících abecedních zobrazení:
To způsobuje problémy s výslovností jako:
yes
se stává yey
say
yay
yay
se stává yay
sassy
se stává yayyy
case
se stává
Zde je textová verze mapování:
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
Výzva
Vzhledem k tomu, že text používá anglickou abecedu, odešle se překlad jeho korpusu.
Například text Hello, World!
se změní na Keppo, Jotpp!
v korpusu
Pravidla
- Vstup se bude skládat pouze z tisknutelných znaků ASCII
- Vstupní text může obsahovat mezery a interpunkci, musí být uchováno
- Velká písmena musí být zachována
- Toto je code-golf , takže přirozeně vyhraje nejméně bytů!
Testcases
Testovací případy jsou odděleny znakem <===========>
s prázdným řádkem mezi vstupem a očekávaným výstupem
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.
Bonus
Pokud zahrnete také zvukový záznam (nebo video se zvukem), ve kterém vyslovujete každý z korpusových překladů testcase, můžete může znásobit počet bajtů 1
jako odměnu.
Komentáře
Odpověď
Odpověď
05AB1E , 24 bajtů
ži.•ÜÁ©;«ìñä°ÔG·ÖYΘ•Du«‡
Vysvětlení:
‡ transliterate ži a-zA-Z with .•ÜÁ©;«ìñä°ÔG·ÖYΘ• atypetjkitkpstokrtyputjkyb Du« concatenated with itself, uppercased
Komentáře
- Menší alternativa 24 bajtů přepsáním pouze souhlásek.
Odpověď
Dřevěné uhlí , 42 bajty
≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι
Zkuste to online! Odkaz je na podrobnou verzi c óda. Vysvětlení:
≔ 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
Odpověď
T-SQL, 107 bajtů
SELECT TRANSLATE(v,"bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ", "typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB")FROM t
Konce řádků a odsazení jsou pouze pro čitelnost.
Používá funkce SQL 2017 TRANSLATE
pro nahrazení znaků.
Bohužel bylo nutné (téměř) celou abecedu tam dvakrát , aby se zachovala velká a malá písmena. Pravděpodobně existují lepší způsoby, možná něco, co zvládá skupiny t , ale to pro mě fungovalo.
Vstup se provádí pomocí již existující tabulky t se sloupcem varchar v , podle našich pravidel IO .
V tomto případě tabulka musí být vytvořeno pomocí rozlišování velkých a malých písmen , a to buď spuštěním na serveru rozlišujícím velká a malá písmena, nebo použitím klíčového slova COLLATE
(nezapočítává se do celkového počtu znaků) ):
CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
Odpovědět
JavaScript (Node.js) , 100 bajtů
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()
Odpovědět
R , 79 bajtů
function(x)chartr("b-zB-Z",paste0(y<-"typetjkitkpstokrtyputjkyb",toupper(y)),x)
Pouze 3 bajty kratší než doslovné psaní oba řetězce pro nahrazení malých i velkých písmen dohromady …
R , 79 bajtů
function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]
Chovatelský kód, stejný počet bajtů.
Odpověď
Odpověď
Odpověď
J , 78 61 bytů
-17 bytů díky FrownyFrog!
rplc(u:,98 66+/i.25);"0(,toupper)@"typetjkitkpstokrtyputjkyb"
Komentáře
- 61
- @FrownyFrog Díky! V mém J804 nemohu ‚ t použít konstanty na pravé straně. Potřebuji upgradovat 🙂 Moje řešení je přesto ošklivé ….
Odpověď
C # (Visual C # Interactive Compiler) , 151 83 bajtů
n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)
Uložil neuvěřitelných 68 bajtů díky Pietu1998!
Komentáře
- Můžete získat až 83 bajtů podle odebrání rozsahu, kombinace
Select
s a použití bitových operátorů pro velká a malá písmena. - Děkuji! Pěkný trik s trochu moudrými operátory!
Odpověď
K (ngn / k) , 87 63 61 60 59 bajtů
f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}
{
}
funkce s argumentem x
_
malá písmena
a:
přiřadit a
!128
seznam 0 1 2 ... 127
@[!128;
indexy ;:;
hodnoty ]
upravte jej nahrazením prvků v indexech danými hodnotami
98+!25
seznam 98 99 100 ... 122
, což jsou kódy ASCII pro "bcd
… z"
juxtapozice indexuje, proto používáme a
(implicitně převedeno na celá čísla) jako indexy v pozměněném seznamu
x-a-
odečteno od a
, poté odečtěte tvar x
; toto obnoví velká / malá písmena jako v původním řetězci
`c$
převést na znaky
odpovědět
Retina 0.8.2 , 59 bajtů
[a-z] $& T`l`L T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB T`L `l_` .
Vyzkoušejte online! Odkaz obsahuje testovací případy. Vysvětlení:
[a-z] $&
Před každým písmenem předponu znaku jiného než ASCII. (Pokusil jsem se použít neporušený prostor, ale Firefox jej po zkopírování a vložení mohl změnit zpět na normální prostor.)
T`l`L
Velká písmena všech písmena.
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
Převést písmena na Corpus.
T`L `l_` .
Malá písmena za znak, který není ASCII, a odstraňte znak, který není ASCII.
Naivní řešení má 63 bajtů:
T`lL`aty\petjkitk\pst\okrty\putjkybATYP\ETJKITKPST\OKRTYPUTJKYB
Vyzkoušejte to online! Odkaz obsahuje testovací případy.
Odpověď
Python 2 , 115 bajtů
lambda i:i.translate("".join(a)) a=map(chr,range(256)) b="typetjkitkpstokrtyputjkyb" a[66:91]=b.upper();a[98:123]=b
Upraveno z odpovědi @ElPedro. Tím se generuje náhrada za každý znak ascii v poli a
a poté použije str.translate
.
Lze jej přenést na 113 bajtů , pokud je přijatelné vrácení pole znaků:
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
Komentáře
- V tuto noční dobu jsem přemýšlel, abych zjistil, jak to dělá. ‚ to byl dlouhý den! Pěkné řešení.
Odpověď
Jelly , 29 bajtů
“qḍỊYl4ḃ©ƭṄxḳ½Dy’ṃⱮØA,Øa¤⁺żẎy
Komentáře
- Musíte pouze mapovat souhlásky, takže
“ØṖ¦Mṗẏʋ@¥;}/’ṃⱮØCŒH¤⁺żẎy
uloží 4. (Nelze se ‚ zbavit ‚ y ‚ sØY
protože ‚ s na pravé straně mapy)
odpověď
Japt , 37 bajtů
;®i`
ypetjkkp¡okrtyp©jkyb`pu)gCpu bZ
Výše uvedený odkaz obsahuje většinu testovacích případů, ale nebyl jsem schopen zadat předposlední jeden jako řetězec, protože obsahuje jednoduché i dvojité uvozovky. Zde je ten testovací případ, místo toho zadejte jako pole znaků.
Vysvětlení:
; #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)
Odpověď
Python 2 , 138 132 bajtů
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)
Ve skutečnosti kratší s pojmenovanou funkcí než s lambda!
verze lambda, 138 bajtů
lambda i,a="bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ",b="typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB":"".join((x,b[a.find(x)])[x in a]for x in i)
131 125 pokud můžeme vrátit pole znaků a mít join
mimo funkci.
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]
Komentáře
- I lambda můžete použít, pokud vytvoříte a
b
globální proměnné - @BlackOwlKai – děkuji. Hráli jsme si s touto myšlenkou, ale ‚ se zpozdilo. Možná zítra 🙂
- Dostalo se to na 120/113 znaků (TIO bez testovacích kufříků, jinak by byl odkaz příliš dlouhý na komentář)
- Beats mine a dost odlišný na to, abyste jej mohli zveřejnit jako svoji vlastní odpověď. ‚ ll upvote 🙂
- Nebojte se ukrást také moje testovací případy. Psaní trvalo déle než kód …
Odpověď
PHP , 100 bajtů
Kód
<?=strtr($argv[0],($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),($v=typtjktkpstkrtyptjkyb).$f($v));
Vysvětlení
# 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.
odpověď
Pyth, 35 bajtů
XQ.*m+r1dd[tG."byàHuH¯¹e?rJyfh
Pravděpodobně byste mohli použít mapu Left nebo něco, čím se zbavíte dvě písmena, ale nemohl jsem přijít na to, jak.
Odpovědět
Java, 211 bajtů
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));};
Komentáře
Odpověď
Pyth, 34 znaků
J."byàHuH¯¹e?rJyfh"XXztGJrtG1rJ1
Řetězec je komprimovanou verzí “ typetjkitkpstokrtyputjkyb „. Z nějakého důvodu nemohu přimět Pytha ke kompresi „atypetjkitkpstokrtyputjkyb“ pomocí funkce
+++\.N++hSzeSzCi-RChSzCMz-hCeSzChSzN
, i když by to pravděpodobně zachránilo bajt nebo dva jako dva t lze vyloučit.
Odpověď
Tcl , 114 bajty
proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}
Odpověď
Lua , 153 bajtů
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
). ‚ sahá jazykem po tváři k nevyslovitelnosti mnoha překladů