Übersetzen Englisch zu Corpus


14

Die Corpus sind 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 ein verlustreicher Ersatz für die englische Sprache.

Alle Corpus-Wörter sind mit den englischen Wörtern identisch, mit Ausnahme der folgenden alphabetischen Zuordnungen:

Englisch zu Corpus Mapping

Dies verursacht einige Probleme bei der Aussprache als:

yeswird yey
saywird yay
yaywird yay
sassywird yayyy
casewirdyaye

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 den Text mit dem englischen Alphabet aus und geben Sie die Corpus-Übersetzung aus.

Zum Beispiel kann der Text Hello, World!wird Keppo, Jotpp!in Corpus

Die Regeln

  • Die Eingabe besteht nur aus druckbaren ASCII-Zeichen
  • Eingabetext kann Leerzeichen und Interpunktion enthalten, diese müssen erhalten bleiben
  • Die Großschreibung von Buchstaben muss erhalten bleiben
  • Das ist also gewinnen natürlich die wenigsten Bytes!

Die Testfälle

Testfälle werden <===========>mit einem Leerzeichen zwischen Eingabe und erwarteter Ausgabe getrennt

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) von Ihnen einschließen, in der jede der Corpus-Übersetzungen des Testfalls ausgesprochen wird, können Sie Ihr Bytecount 1als Belohnung mit multiplizieren .


@ Shaggy Sicher, sollte ich daran denken
Skidsdev

4
@RobertS. Es gibt auch keinen Bonus für Ihre Punktzahl ( x * 1 == x). Es ist ein Augenzwinkernder Scherz über die Unaussprechlichkeit vieler Übersetzungen
Skidsdev,

1
Kann die Ausgabe ein Array von Zeichen sein?
ElPedro

@Skidsdev Die "Übersetzungen" sind aussprechbar; entweder als aufgezeichnete menschliche Stimme oder programmatisch unter Verwendung von maschinellem Lernen und / oder Text-zu-Sprache-Technologien.
guest271314

1
Und so wurde die finnische Sprache geboren!
Sergiol

Antworten:




4

Holzkohle , 42 Bytes

≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι

Probieren Sie es online! Link ist eine ausführliche Version des Codes. 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

4

T-SQL, 107 Bytes

SELECT TRANSLATE(v,'bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ',
                   'typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB')FROM t

Zeilenumbruch und Einzug dienen nur der Lesbarkeit.

Verwendet die SQL 2017-Funktion TRANSLATEzum Ersetzen von Zeichen.

Leider musste (fast) das gesamte Alphabet zweimal dort hineingesteckt werden , um die Gehäuse zu erhalten. Es gibt wahrscheinlich bessere Möglichkeiten, vielleicht etwas, das das t behandelt als Gruppe umgeht, aber das hat bei mir funktioniert.

Die Eingabe erfolgt über eine bereits vorhandene Tabelle t mit Varchar - Spalte v , je unseren IO Regeln .

In diesem Fall muss die Tabelle mit einer Sortierung erstellt werden, bei der zwischen Groß- und Kleinschreibung unterschieden wird , entweder indem sie auf einem Server mit Groß- und Kleinschreibung ausgeführt wird, oder indem das COLLATESchlüsselwort verwendet wird (das nicht zur Gesamtsumme der Zeichen gezählt wird):

CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)

3

JavaScript (Node.js) , 100 Byte

s=>s.replace(/[a-z]/gi,c=>(C='_atypetjkitkpstokrtyputjkyb'[Buffer(c)[0]&31],c>{}?C:C.toUpperCase()))

Probieren Sie es online!

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()

3

R , 79 Bytes

function(x)chartr("b-zB-Z",paste0(y<-"typetjkitkpstokrtyputjkyb",toupper(y)),x)

Probieren Sie es online!

Nur 3 Bytes kürzer als das gleichzeitige Eingeben von Ersetzungszeichenfolgen in Klein- und Großbuchstaben ...

R , 79 Bytes

function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]

Probieren Sie es online!

Fancier Code, gleiche Byteanzahl.





2

C # (Visual C # Interactive Compiler) , 151 83 Byte

n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)

Probieren Sie es online!

Dank Pietu1998 konnten satte 68 Bytes gespart werden!


Sie können dies auf 83 Bytes reduzieren, indem Sie den Bereich entfernen, das Selects kombinieren und bitweise Operatoren für die Gehäuse verwenden.
PurkkaKoodari

Vielen Dank! Netter Trick mit den etwas klugen Operatoren!
Verkörperung der Ignoranz

2

K (ngn / k) , 87 63 61 60 59 Bytes

f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}

Probieren Sie es online!

{ } Funktion mit Argument x

_ in Kleinbuchstaben

a: zuweisen a

!128 Die Liste 0 1 2 ... 127

@[!128; Indizes ;:; Werte ] es ändern , indem die Elemente zu ersetzen Indizes mit den gegebenen Werten

98+!25die Liste, 98 99 100 ... 122die die ASCII-Codes für "bcd...z"

Die Gegenüberstellung ist eine Indizierung, daher verwenden wir a(implizit in Ganzzahlen konvertiert) als Indizes in der geänderten Liste

x-a-subtrahieren von a, dann subtrahieren Form x; Dadurch wird Groß- / Kleinschreibung wie in der ursprünglichen Zeichenfolge wiederhergestellt

`c$ in Zeichen konvertieren


1

Retina 0.8.2 , 59 Bytes

[a-z]
 $&
T`l`L
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
T`L `l_` .

Probieren Sie es online! 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

Versehen Sie alle Buchstaben mit Großbuchstaben.

T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB

Konvertieren Sie die Buchstaben in Corpus.

T`L `l_` .

Kleinschreibung der Buchstaben nach dem Nicht-ASCII-Zeichen und Löschen des Nicht-ASCII-Zeichens.

Naive Lösung ist 63 Bytes:

T`lL`aty\petjkitk\pst\okrty\putjkybATYP\ETJKITKPST\OKRTYPUTJKYB

Probieren Sie es online! Link enthält Testfälle.


1

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

Probieren Sie es online!

Angepasst an die Antwort von @ ElPedro. Dies erzeugt den Ersatz für jedes ASCII-Zeichen im Arraya und anschließend verwendet str.translate.

Kann auf 113 Bytes gebracht werden, wenn die Rückgabe eines Arrays von Zeichen 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

Probieren Sie es online!


Um diese Zeit musste ich nachdenken, wie es ging. Es war ein langer Tag! Gute Lösung.
ElPedro


1

Japt , 37 Bytes

;®i`…ypetjkŠkp¡okrtyp©jkyb`pu)gCpu bZ

Probieren Sie es online!

Der obige Link enthält die meisten Testfälle, aber ich konnte den vorletzten nicht als Zeichenfolge eingeben, da er sowohl einfache als auch doppelte Anführungszeichen enthält. Hier ist der 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:
   `…ypetjkŠkp¡okrtyp©jkyb`              #  Get the lowercase Corpus alphabet
                           pu)           #  Plus the uppercase Corpus alphabet
  i                                      #  Add Z at the end (index -1)

0

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)

Probieren Sie es online!

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)

Probieren Sie es online!

131 125 wenn wir ein Array von Zeichen zurückgeben dürfen und dasjoinaußerhalb der Funktion haben.

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]

Probieren Sie es online!


1
Sie können immer noch ein Lambda verwenden, wenn Sie aund bglobale Variablen
Black Owl Kai

@BlackOwlKai - Danke. Ich habe mit dieser Idee gespielt, aber es wird spät. Vielleicht morgen :)
ElPedro

Habe es auf 120/113 Zeichen gebracht (TIO ohne die Testfälle, sonst wäre der Link zu lang für einen Kommentar)
Black Owl Kai

Beats Mine und anders genug, dass Sie als Ihre eigene Antwort posten können. Ich werde upvote :)
ElPedro

Gerne können Sie auch meine Testfälle stehlen. Die
Eingabe

0

PHP , 100 Bytes

Code

<?=strtr($argv[0],($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),($v=typtjktkpstkrtyptjkyb).$f($v));

Probieren Sie es online!

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.

0

Pyth, 35 Bytes

XQ.*m+r1dd[tG."byàHuH¯¹e?rJyfh

Versuch es!

Könnte wahrscheinlich die linke Karte oder etwas verwenden, um die beiden D's loszuwerden, aber ich konnte nicht herausfinden, wie.



0

Pyth, 34 Zeichen

J. "byàHuH¯¹e? RJyfh" XXztGJrtG1rJ1

Probieren Sie es online!

Die Zeichenfolge ist eine komprimierte Version von "typetjkitkpstokrtyputjkyb" . Aus irgendeinem Grund kann ich Pyth nicht zum Komprimieren bringen "atypetjkitkpstokrtyputjkyb" mit der Funktion

+++ \. N ++ hSzeSzCi-RChSzCMz-hCeSzChSzN
obwohl es wahrscheinlich ein oder zwei Bytes sparen würde, da die zwei t's beseitigt werden könnten.



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.