Vertaal Engels naar Corpus
Geplaatst op februari 2, 2021 door adminHet Corpus is een fictieve factie uit de populaire videogame Warframe die een ietwat interessante taal hebben.
Terwijl andere facties in het spel, zoals de Grineer, enige logica achter hun taal hebben, is het Corpus gewoon een vervanging van de Engelse taal met verlies.
Alle Corpus-woorden zijn hetzelfde als hun Engelse tegenhangers, behalve met de volgende alfabetische toewijzingen:
Dit veroorzaakt enkele problemen met de uitspraak als:
yes
wordt yey
say
wordt yay
yay
wordt yay
sassy
wordt yayyy
case
wordt
Hier “een tekstversie van de toewijzingen:
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
De uitdaging
Gegeven tekst met gebruik van het Engelse alfabet, voer de Corpus-vertaling uit.
De tekst Hello, World!
wordt bijvoorbeeld Keppo, Jotpp!
in Corpus
De regels
- Invoer zal alleen bestaan uit afdrukbare ASCII-tekens
- Invoertekst mag spaties en interpunctie bevatten, deze moeten behouden
- Hoofdlettergebruik van letters moet behouden blijven
- Dit is code-golf , dus natuurlijk winnen de minste bytes!
De testcases
Testcases worden gescheiden door <===========>
, met een lege regel tussen invoer en verwachte uitvoer
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.
De bonus
Als u ook een audio-opname (of video met audio) opneemt waarin u elk van de Corpus-vertalingen van de testcase uitspreekt, kan uw bytecount vermenigvuldigen met 1
als beloning.
Reacties
Antwoord
Antwoord
05AB1E , 24 bytes
ži.•ÜÁ©;«ìñä°ÔG·ÖYΘ•Du«‡
Uitleg:
‡ transliterate ži a-zA-Z with .•ÜÁ©;«ìñä°ÔG·ÖYΘ• atypetjkitkpstokrtyputjkyb Du« concatenated with itself, uppercased
Reacties
- Minor 24 bytes alternatief door alleen de medeklinkers te translitereren.
Antwoord
Charcoal , 42 bytes
≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι
Probeer het online! Link is om de uitgebreide versie van c ode. Uitleg:
≔ 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
Antwoord
T-SQL, 107 bytes
SELECT TRANSLATE(v,"bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ", "typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB")FROM t
Regeleinde en inspringing zijn alleen voor leesbaarheid.
de SQL 2017-functie TRANSLATE
voor tekenvervanging.
Helaas moest ik (bijna) het hele alfabet erin tweemaal om hoofdletters te behouden. Er zijn waarschijnlijk betere manieren, misschien iets dat de t “s als een groep afhandelt, maar dit werkte voor mij.
Invoer is via een reeds bestaande tabel t met varchar-kolom v , volgens onze IO-regels .
In dit geval de tabel moet worden gemaakt met een hoofdlettergevoelige sortering , ofwel door te draaien op een hoofdlettergevoelige server, ofwel door het COLLATE
sleutelwoord te gebruiken (niet meegeteld bij het aantal tekens ):
CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
Antwoord
JavaScript (Node.js) , 100 bytes
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()
Antwoord
R , 79 bytes
function(x)chartr("b-zB-Z",paste0(y<-"typetjkitkpstokrtyputjkyb",toupper(y)),x)
Slechts 3 bytes korter dan letterlijk typen zowel kleine als hoofdletters vervangende tekenreeksen samen …
R , 79 bytes
function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]
Liefhebbercode, hetzelfde aantal bytes.
Antwoord
Antwoord
Antwoord
J , 78 61 bytes
-17 bytes dankzij FrownyFrog!
rplc(u:,98 66+/i.25);"0(,toupper)@"typetjkitkpstokrtyputjkyb"
Reacties
- 61
- @FrownyFrog Bedankt! In mijn J804 kan ik ‘ geen constanten aan de rechterkant gebruiken. Ik moet upgraden 🙂 Mijn oplossing is niettemin lelijk …
Antwoord
C # (Visual C # Interactive Compiler) , 151 83 bytes
n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)
Maar liefst 68 bytes bespaard dankzij Pietu1998!
Reacties
- Je kunt dit terugbrengen tot 83 bytes door het bereik verwijderen, de
Select
s combineren en bitsgewijze operatoren gebruiken voor hoofdlettergebruik. - Bedankt! Leuke truc met de beetje verstandige operators!
Answer
K (ngn / k) , 87 63 61 60 59 bytes
f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}
{
}
functie met argument x
_
naar kleine letters
a:
toewijzen aan a
!128
de lijst 0 1 2 ... 127
@[!128;
indices ;:;
waarden ]
wijzig het door de elementen op indices te vervangen door de gegeven waarden
98+!25
de lijst 98 99 100 ... 122
die de ascii-codes zijn voor "bcd
… z"
nevenschikking is indexeren, dus gebruiken we a
(impliciet geconverteerd naar gehele getallen) als indices in de gewijzigde lijst
x-a-
aftrekken van a
, en trek vervolgens de vorm x
af; dit herstelt hoofdletters / kleine letters zoals in de originele string
`c$
converteren naar karakters
Antwoord
Retina 0.8.2 , 59 bytes
[a-z] $& T`l`L T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB T`L `l_` .
Probeer het online! Link bevat testcases. Uitleg:
[a-z] $&
Voeg een niet-ASCII-teken toe aan elke letter. (Ik heb geprobeerd een niet-afbrekende spatie te gebruiken, maar Firefox heeft deze mogelijk teruggezet naar een normale spatie na kopiëren en plakken.)
T`l`L
Hoofdletters alle letters.
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
Converteer de letters naar Corpus.
T`L `l_` .
Kleine letters achter het niet-ASCII-teken en verwijder het niet-ASCII-teken.
Naïeve oplossing is 63 bytes:
T`lL`aty\petjkitk\pst\okrty\putjkybATYP\ETJKITKPST\OKRTYPUTJKYB
Probeer het online! Link bevat testcases.
Antwoord
Python 2 , 115 bytes
lambda i:i.translate("".join(a)) a=map(chr,range(256)) b="typetjkitkpstokrtyputjkyb" a[66:91]=b.upper();a[98:123]=b
Aangepast van @ElPedro “s antwoord. Dit genereert de vervanging voor elk ascii-teken in de array a
en gebruikt vervolgens str.translate
.
Kan naar 113 bytes worden gebracht als het retourneren van een reeks tekens acceptabel is:
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
Reacties
- Nadenkend in deze tijd van de nacht om erachter te komen hoe het het deed. Het ‘ is een lange dag geweest! Leuke oplossing.
Answer
Jelly , 29 bytes
“qḍỊYl4ḃ©ƭṄxḳ½Dy’ṃⱮØA,Øa¤⁺żẎy
Opmerkingen
- Hoeft alleen medeklinkers toe te wijzen, dus
“ØṖ¦Mṗẏʋ@¥;}/’ṃⱮØCŒH¤⁺żẎy
slaat 4. (Kan ‘ niet verwijderen van ‘ y ‘ metØY
aangezien het ‘ aan de rechterkant van de kaart staat)
Antwoord
Japt , 37 bytes
;®i`
ypetjkkp¡okrtyp©jkyb`pu)gCpu bZ
De bovenstaande link bevat de meeste testcases, maar ik heb de voorlaatste niet kunnen invoeren een als een string omdat het zowel enkele als dubbele aanhalingstekens bevat. Hier is dat testgeval, voer in plaats daarvan in als een reeks tekens.
Uitleg:
; #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)
Antwoord
Python 2 , 138 132 bytes
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)
Eigenlijk korter met een benoemde functie dan met een lambda!
lambda-versie, 138 bytes
lambda i,a="bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ",b="typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB":"".join((x,b[a.find(x)])[x in a]for x in i)
131 125 als we een reeks tekens mogen retourneren en de join
buiten de functie.
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]
Reacties
- Je kunt nog steeds een lambda gebruiken als je en
b
globale variabelen - @BlackOwlKai – Bedankt. Heb met dat idee gespeeld, maar het ‘ wordt al laat. Misschien morgen 🙂
- Heb het teruggebracht tot 120/113 tekens (TIO zonder de testcases, anders zou de link te lang zijn voor een comment)
- Verslaat de mijne en anders genoeg om te posten als je eigen antwoord. Ik ‘ zal upvote 🙂
- Voel je vrij om ook mijn testcases te stelen. Het duurde langer om in te typen dan de code …
Antwoord
PHP , 100 bytes
Code
<?=strtr($argv[0],($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),($v=typtjktkpstkrtyptjkyb).$f($v));
Uitleg
# 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.
Antwoord
Pyth, 35 bytes
XQ.*m+r1dd[tG."byàHuH¯¹e?rJyfh
Kan waarschijnlijk de linkerkaart of zoiets gebruiken om de twee d “s, maar ik kon er niet achter komen hoe.
Answer
Java, 211 bytes
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));};
Reacties
Antwoord
Pyth, 34 tekens
J."byàHuH¯¹e?rJyfh"XXztGJrtG1rJ1
De string is een gecomprimeerde versie van ” typetjkitkpstokrtyputjkyb “. Om de een of andere reden kan ik Pyth niet zover krijgen om “atypetjkitkpstokrtyputjkyb” te comprimeren met de functie
+++\.N++hSzeSzCi-RChSzCMz-hCeSzChSzN
, ook al zou het waarschijnlijk een byte of twee opslaan als de twee ts kan worden geëlimineerd.
Answer
Tcl , 114 bytes
proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}
Antwoord
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
). Het ‘ is een ironische blik op de onuitspreekbaarheid van veel van de vertalingen