Angol fordítás a Corpusra
On február 2, 2021 by adminA Corpus a népszerű videojáték kitalált frakciója Warframe , akiknek kissé érdekes a nyelve.
Míg a játék más frakciói, mint például a Grineer, némi logikával rendelkeznek a nyelvük mögött, a Corpus egyszerűen veszteséges helyettesítése az angol nyelvnek.
Az összes Corpus szó megegyezik az angol megfelelőivel, kivéve a következő betűrendes leképezéseket:
Ez problémákat okoz a következő kiejtéssel:
yes
yey
say
lesz yay
yay
yay
sassy
lesz yayyy
case
lesz
Itt van a leképezések szöveges változata:
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
A kihívás
Adott szöveg az angol ábécé használatával adja ki annak Corpus-fordítását.
Például a Hello, World!
szöveg Keppo, Jotpp!
a korpuszban
A szabályok
- Az input csak ASCII nyomtatható karakterekből áll
- A bevitt szöveg tartalmazhat szóközt és írásjeleket, ezeket meg kell adni megőrzött
- A betűk nagybetűit meg kell őrizni
- Ez code-golf olyan természetes, hogy a legkevesebb bájt nyer!
A tesztesetek
A teszteseteket <===========>
jel választja el, a bemenet és a várható kimenet között üres sor van
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.
A bónusz
Ha tartalmaz egy hangfelvételt (vagy hangos videót is), amikor kimondja a tesztház egyes Corpus-fordításait, akkor megszorozhatja bájtszámát 1
jutalomként.
Hozzászólások
Válasz
Válasz
05AB1E , 24 bájt
ži.•ÜÁ©;«ìñä°ÔG·ÖYΘ•Du«‡
Magyarázat:
‡ transliterate ži a-zA-Z with .•ÜÁ©;«ìñä°ÔG·ÖYΘ• atypetjkitkpstokrtyputjkyb Du« concatenated with itself, uppercased
Megjegyzések
- Kisebb 24 bájtos alternatíva csak a mássalhangzók átírásával.
válasz
faszén , 42 bájtok
≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι
Próbálja ki online! A link a c részletes változatához óda. Magyarázat:
≔ 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
Válasz
T-SQL, 107 bájt
SELECT TRANSLATE(v,"bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ", "typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB")FROM t
A sortörés és a behúzás csak olvasható.
az SQL 2017 függvény TRANSLATE
a karaktercseréhez.
Sajnos (majdnem) be kellett az egész ábécé kétszer a burkolat fenntartása érdekében. Valószínűleg vannak jobb módszerek, talán valami, ami a t “csoportként kezeli, de ez nekem sikerült. p>
A bemenet egy már létező táblán keresztül történik: t a varchar oszlop v , az IO-szabályaink szerint .
Ebben az esetben a táblázat kis- és nagybetűk közötti egyeztetés használatával kell létrehozni, akár kis- és nagybetűk kiszolgálón történő futtatással, akár a COLLATE
kulcsszó használatával (a karakterek összege nem számít bele ):
CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
Válasz
JavaScript (Node.js) , 100 bájt
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()
Válasz
R , 79 bájt
function(x)chartr("b-zB-Z",paste0(y<-"typetjkitkpstokrtyputjkyb",toupper(y)),x)
Csak 3 bájttal rövidebb, mint a szó szerinti beírás kis- és nagybetűk helyettesítő karakterláncok együtt …
R , 79 bájt
function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]
Rajongókód, ugyanaz a bájtok száma.
Válasz
Válasz
Válasz
J , 78 61 bájt
-17 bájt a FrownyFrog jóvoltából!
rplc(u:,98 66+/i.25);"0(,toupper)@"typetjkitkpstokrtyputjkyb"
Megjegyzések
- 61
- @FrownyFrog Köszönöm! A J804-es verziómban ‘ nem használhatok konstansokat a jobb oldalon. Frissítenem kell 🙂 Ennek ellenére csúnya a megoldásom ….
Válasz
C # (Visual C # Interactive Compiler) , 151 83 bájt
n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)
Óriási 68 bájtot mentett a Pietu1998!
Hozzászólások
- Ezt 83 bájtig le lehet szerezni eltávolítva a tartományt, kombinálva a
Select
eket és bitenként operátorokat használva a burkolathoz. - Köszönjük! Szép trükk a kicsit bölcs operátorokkal!
Válasz
K (ngn / k) , 87 63 61 60 59 bájt
f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}
{
}
függvény argumentummal x
_
kisbetűs
a:
hozzárendelés a
!128
a lista 0 1 2 ... 127
@[!128;
indexek ;:;
értékek ]
módosíthatja úgy, hogy az indexek elemét lecseréli a megadott értékekre
98+!25
a lista 98 99 100 ... 122
, amelyek a "bcd
… z"
az egymás mellé helyezés indexelés, ezért a a
(implicit módon egész számokká konvertálva) indexként a módosított listában
x-a-
kivonva a a
, majd vonja le az x
űrlapot; ez visszaállítja a nagy / kisbetűket, mint az eredeti karakterláncban.
`c$
karakterekké alakítás
Válasz
Retina 0.8.2 , 59 bájt
[a-z] $& T`l`L T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB T`L `l_` .
Próbálja ki online! A link teszteseteket tartalmaz. Magyarázat:
[a-z] $&
Minden betűhöz előtagozzon egy nem ASCII karaktert. (Megpróbáltam nem törést biztosító helyet használni, de a Firefox másolás és beillesztés után megváltoztathatta azt normál helyre.)
T`l`L
Az összes nagybetűvel betűk.
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
A betűk konvertálása Corpus-ra.
T`L `l_` .
Kisbetűk a betűk után a nem ASCII karaktert, és törölje a nem ASCII karaktert.
A naiv megoldás 63 bájt:
T`lL`aty\petjkitk\pst\okrty\putjkybATYP\ETJKITKPST\OKRTYPUTJKYB
Próbálja ki online! A link teszteseteket tartalmaz.
Válasz
Python 2 , 115 bájt
lambda i:i.translate("".join(a)) a=map(chr,range(256)) b="typetjkitkpstokrtyputjkyb" a[66:91]=b.upper();a[98:123]=b
A @ElPedro válaszából adaptálva. Ez létrehozza a tömb minden ascii karakterét a
, majd a következőt használja: str.translate
.
113 bájtra hozható, ha a karakterek tömbjének visszaadása elfogadható:
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
Hozzászólások
- Gondolkodni kellett ezen az éjszakaszakon, hogy kiderüljön, hogyan teljesít. ‘ hosszú nap volt! Jó megoldás.
Válasz
Zselé , 29 bájt
“qḍỊYl4ḃ©ƭṄxḳ½Dy’ṃⱮØA,Øa¤⁺żẎy
Megjegyzések
- Csak mássalhangzókat kell feltérképezni, ezért
“ØṖ¦Mṗẏʋ@¥;}/’ṃⱮØCŒH¤⁺żẎy
4-et ment. (‘ nem tud megszabadulni a ‘ y ‘ id = “8af37f756e”>
mivel ‘ s a térkép jobb oldalán található)
Válasz
Japt , 37 bájt
;®i`
ypetjkkp¡okrtyp©jkyb`pu)gCpu bZ
A fenti link tartalmazza a legtöbb tesztesetet, de a másodikat utoljára nem tudtam bevinni az egyik karakterláncként, mert egyszeres és kettős idézőjeleket is tartalmaz. Itt az a teszteset található, amelyet karaktertömbként kell megadni.
Magyarázat:
; #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)
Válasz
Python 2 , 138 132 bájt
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)
Valójában rövidebb egy megnevezett függvénnyel, mint egy lambdával!
lambda verzió, 138 bájt
lambda i,a="bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ",b="typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB":"".join((x,b[a.find(x)])[x in a]for x in i)
131 125 ha visszaadhatunk egy tömb karaktert, és az join
a függvényen kívül.
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]
Megjegyzések
- Továbbra is használhat lambdát, ha és
b
globális változók - @BlackOwlKai – Köszönöm. Játszottam már ezzel az ötlettel, de ‘ késik. Talán holnap 🙂
- 120/113 karakterig értem (TIO a tesztesetek nélkül, különben a link túl hosszú lenne egy megjegyzés)
- Megveri az enyémet, és elég más ahhoz, hogy saját válaszként tegye közzé.
szavazok 🙂
Válasz
PHP , 100 bájt
Kód
<?=strtr($argv[0],($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),($v=typtjktkpstkrtyptjkyb).$f($v));
Magyarázat
# 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.
Válasz
Pyth, 35 bájt
XQ.*m+r1dd[tG."byàHuH¯¹e?rJyfh
Valószínűleg használhatja a Bal oldali térképet vagy valami mást, hogy megszabaduljon a két d “s, de nem tudtam kitalálni, hogyan.
Válasz
Java, 211 bájt
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));};
Megjegyzések
Válasz
Pit, 34 karakter
J."byàHuH¯¹e?rJyfh"XXztGJrtG1rJ1
A karakterlánc a ” typetjkitkpstokrtyputjkyb “ tömörített változata. Valamilyen oknál fogva nem tudom elérni, hogy a Pyth tömörítse az “atypetjkitkpstokrtyputjkyb” funkciót az
+++\.N++hSzeSzCi-RChSzCMz-hCeSzChSzN
függvénnyel, noha valószínűleg egy vagy két bájtot spórolna meg a két t-ként kiküszöbölhető.
Válasz
Tcl , 114 bájtok
proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}
Válasz
Lua , 153 bájt
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
). ‘ szájbarágós a sok fordítás kimondhatatlansága miatt.