Englisch in Corpus übersetzen
On Februar 2, 2021 by adminDer Corpus ist eine fiktive Fraktion aus dem beliebten Videospiel Warframe , die eine etwas interessante Sprache haben.
Während andere Fraktionen im Spiel wie der Grineer eine gewisse Logik hinter ihrer Sprache haben, ist der Corpus einfach eine verlustbehaftete Ersetzung der englischen Sprache.
Alle Corpus-Wörter sind dieselben wie ihre englischen Gegenstücke, außer mit den folgenden alphabetischen Zuordnungen:
Dies führt zu einigen Problemen bei der Aussprache wie folgt:
yes
wird zu yey
say
wird zu yay
yay
wird yay
sassy
wird yayyy
case
wird zu
Hier „ist eine Textversion der Zuordnungen:
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
Die Herausforderung
Geben Sie bei gegebenem Text mit dem englischen Alphabet die Corpus-Übersetzung aus.
Beispielsweise wird der Text Hello, World!
zu Keppo, Jotpp!
im Korpus
Die Regeln
- Die Eingabe besteht nur aus ASCII-druckbaren Zeichen.
- Der Eingabetext kann Leerzeichen und Satzzeichen enthalten. Diese müssen sein erhalten
- Groß- und Kleinschreibung von Buchstaben muss beibehalten werden
- Dies ist Code-Golf , daher gewinnen natürlich die wenigsten Bytes!
Die Testfälle
Testfälle werden mit <===========>
getrennt, wobei zwischen Eingabe und erwarteter Ausgabe
eine Leerzeile steht
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.
Der Bonus
Wenn Sie auch eine Audioaufnahme (oder ein Video mit Audio) hinzufügen, in der Sie die Corpus-Übersetzungen des Testfalls aussprechen, sind Sie kann Ihren Bytecount mit 1
als Belohnung.
Kommentare
- @Shaggy Sicher, sollte ich daran denken
- @RobertS. Es bietet auch keinen Bonus auf Ihre Punktzahl (
x * 1 == x
). ‚ ist ein Augenzwinkern bei der Unaussprechlichkeit vieler Übersetzungen. - Kann die Ausgabe eine Reihe von Zeichen sein?
- @Skidsdev Die Übersetzungen “ “ sind aussprechbar. entweder als aufgezeichnete menschliche Stimme oder programmgesteuert unter Verwendung von maschinellem Lernen und / oder Text-zu-Sprache-Technologien.
- Und so wurde die finnische Sprache geboren!
Antwort
Antwort
05AB1E , 24 Byte
ži.•ÜÁ©;«ìñä°ÔG·ÖYΘ•Du«‡
Erläuterung:
‡ transliterate ži a-zA-Z with .•ÜÁ©;«ìñä°ÔG·ÖYΘ• atypetjkitkpstokrtyputjkyb Du« concatenated with itself, uppercased
Probieren Sie es online aus! A. >
Kommentare
- Minor 24-Byte-Alternative durch Transliteration nur der Konsonanten.
Antwort
Holzkohle , 42 Bytes
≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι
Probieren Sie es online aus! Der Link führt zur ausführlichen Version von c Ode. Erläuterung:
≔ 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
Antwort
T-SQL, 107 Bytes
SELECT TRANSLATE(v,"bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ", "typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB")FROM t
Zeilenumbruch und Einzug dienen nur der Lesbarkeit.
Verwendet die SQL 2017-Funktion TRANSLATE
zum Ersetzen von Zeichen.
musste leider (fast) setzen das gesamte Alphabet dort zweimal , um das Gehäuse beizubehalten. Es gibt wahrscheinlich bessere Möglichkeiten, vielleicht etwas, das die t „s als Gruppe behandelt, aber das hat bei mir funktioniert.
Die Eingabe erfolgt über eine bereits vorhandene Tabelle t mit der varchar-Spalte v , gemäß unseren E / A-Regeln .
In diesem Fall die Tabelle muss mit einer Groß- / Kleinschreibung-Sortierung erstellt werden, entweder durch Ausführen auf einem Server, bei dem die Groß- und Kleinschreibung beachtet wird, oder mit dem Schlüsselwort COLLATE
(wird nicht zur Zeichensumme gezählt) ):
CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
Antwort
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()
Antwort
R , 79 Byte
function(x)chartr("b-zB-Z",paste0(y<-"typetjkitkpstokrtyputjkyb",toupper(y)),x)
Nur 3 Bytes kürzer als beim wörtlichen Tippen Ersetzungszeichenfolgen in Klein- und Großbuchstaben zusammen …
R , 79 Byte
function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]
Fancier-Code, gleiche Byteanzahl.
Antwort
Perl 5 -p
, 54 Byte
eval"y/B-Zb-z/".uc($a=typetjkitkpstokrtyputjkyb)."$a/"
Antwort
Antwort
J , 78 61 Bytes
-17 Bytes dank FrownyFrog!
rplc(u:,98 66+/i.25);"0(,toupper)@"typetjkitkpstokrtyputjkyb"
Kommentare
- 61
- @FrownyFrog Danke! In meinem J804 kann ich ‚ keine Konstanten auf der rechten Seite verwenden. Ich muss ein Upgrade durchführen 🙂 Meine Lösung ist trotzdem hässlich ….
Antwort
C # (Visual C # Interactive Compiler) , 151 83 Byte
n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)
Dank Pietu1998!
Kommentare
- Sie können dies auf 83 Bytes von reduzieren Entfernen des Bereichs, Kombinieren der
Select
s und Verwenden von bitweisen Operatoren für das Gehäuse. - Danke! Netter Trick mit den bitweisen Operatoren!
Antwort
K (ngn / k) , 87 63 61 60 59 Bytes
f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}
{
}
Funktion mit Argument x
_
in Kleinbuchstaben
a:
a
!128
die Liste 0 1 2 ... 127
@[!128;
Indizes ;:;
Werte ]
ändern Sie es, indem Sie die Elemente an Indizes durch die angegebenen Werte
98+!25
die Liste 98 99 100 ... 122
, die die ASCII-Codes für "bcd
… z"
Nebeneinander wird indiziert, daher verwenden wir a
(implizit in Ganzzahlen konvertiert) als Indizes in der geänderten Liste
x-a-
subtrahieren von a
, dann subtrahiere Form x
; Dadurch wird Groß- / Kleinbuchstaben wie in der ursprünglichen Zeichenfolge wiederhergestellt.
`c$
In Zeichen konvertieren
Antwort
Retina 0.8.2 , 59 Byte
[a-z] $& T`l`L T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB T`L `l_` .
Probieren Sie es online aus! Der Link enthält Testfälle. Erläuterung:
[a-z] $&
Stellen Sie jedem Buchstaben ein Nicht-ASCII-Zeichen voran. (Ich habe versucht, ein nicht unterbrechendes Leerzeichen zu verwenden, aber Firefox hat es nach dem Kopieren und Einfügen möglicherweise wieder in ein normales Leerzeichen geändert.)
T`l`L
Großbuchstaben in Großbuchstaben Buchstaben.
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
Konvertieren Sie die Buchstaben in Corpus.
T`L `l_` .
Schreiben Sie die Buchstaben danach in Kleinbuchstaben das Nicht-ASCII-Zeichen und löschen Sie das Nicht-ASCII-Zeichen.
Die naive Lösung beträgt 63 Byte:
T`lL`aty\petjkitk\pst\okrty\putjkybATYP\ETJKITKPST\OKRTYPUTJKYB
Online testen! Der Link enthält Testfälle.
Antwort
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
Angepasst an die Antwort von @ElPedro. Dies generiert den Ersatz für jedes ASCII-Zeichen im Array a
und verwendet dann str.translate
.
Kann auf 113 Byte gebracht werden, wenn die Rückgabe eines Zeichensatzes akzeptabel ist:
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
Kommentare
- Zu dieser Nachtzeit wurde nachgedacht, um herauszufinden, wie es funktioniert. ‚ war ein langer Tag! Gute Lösung.
Antwort
Gelee , 29 Bytes
“qḍỊYl4ḃ©ƭṄxḳ½Dy’ṃⱮØA,Øa¤⁺żẎy
Kommentare
- Es müssen nur Konsonanten zugeordnet werden, daher
“ØṖ¦Mṗẏʋ@¥;}/’ṃⱮØCŒH¤⁺żẎy
speichert 4. (Kann ‚ ‚ y ‚ mitØY
, da ‚ rechts auf der Karte steht)
Antwort
Japt , 37 Byte
;®i`
ypetjkkp¡okrtyp©jkyb`pu)gCpu bZ
Der obige Link enthält die meisten Testfälle, aber ich konnte den vorletzten nicht eingeben Eine als Zeichenfolge, da sie sowohl einfache als auch doppelte Anführungszeichen enthält. Hier ist dieser Testfall, der stattdessen als Array von Zeichen eingegeben wird.
Erläuterung:
; #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)
Antwort
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)
Eigentlich kürzer mit einer benannten Funktion als mit einem 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 , wenn wir ein Array von Zeichen zurückgeben dürfen und die join
außerhalb der Funktion.
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]
Kommentare
- Sie können weiterhin ein Lambda verwenden, wenn Sie und
b
globale Variablen - @BlackOwlKai – Danke. Ich habe mit dieser Idee gespielt, aber ‚ wird spät. Vielleicht morgen 🙂
- Habe es auf 120/113 Zeichen gebracht (TIO ohne die Testfälle, sonst wäre der Link zu lang für a Kommentar)
- Schlägt meine und ist so unterschiedlich, dass Sie sie als Ihre eigene Antwort veröffentlichen können. Ich ‚ stimme zu 🙂
- Sie können auch meine Testfälle stehlen. Die Eingabe dauerte länger als der Code …
Antwort
PHP , 100 Byte
Code
<?=strtr($argv[0],($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),($v=typtjktkpstkrtyptjkyb).$f($v));
Erläuterung
# 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.
Antwort
Pyth, 35 Bytes
XQ.*m+r1dd[tG."byàHuH¯¹e?rJyfh
Könnte wahrscheinlich die linke Karte oder etwas verwenden, um die zu entfernen zwei d „s, aber ich konnte nicht herausfinden, wie.
Antwort
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));};
Kommentare
Antwort
Pyth, 34 Zeichen
J."byàHuH¯¹e?rJyfh"XXztGJrtG1rJ1
Die Zeichenfolge ist eine komprimierte Version von “ typetjkitkpstokrtyputjkyb „. Aus irgendeinem Grund kann ich Pyth nicht dazu bringen, „atypetjkitkpstokrtyputjkyb“ mit der Funktion
+++\.N++hSzeSzCi-RChSzCMz-hCeSzChSzN
zu komprimieren, obwohl dies wahrscheinlich ein oder zwei Bytes als die beiden t „s speichern würde könnte beseitigt werden.
Antwort
Tcl , 114 Bytes
proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}
Antwort
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
Schreibe einen Kommentar