英語をコーパスに翻訳


14

コーパスは、一般的なビデオゲームから架空の派閥あるWarframeやや興味深い言語を持っています。

グリニアのようなゲーム内の他の派ionsには言語の背後にあるロジックがありますが、コーパスは単に英語の不可逆的な代替物です。

すべてのコーパスの単語は、次のアルファベット順のマッピングを除き、英語の対応する単語と同じです。

英語からコーパスへのマッピング

これにより、発音に関するいくつかの問題が発生します。

yesなっyey
sayなっyay
yayなっyay
sassyなっyayyy
caseなりましたyaye

マッピングのテキストバージョンは次のとおりです。

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

チャレンジ

英語のアルファベットを使用してテキストを指定し、コーパス翻訳を出力します。

たとえば、テキストはコーパスにHello, World!なりますKeppo, Jotpp!

ルール

  • 入力はASCII印刷可能文字のみで構成されます
  • 入力テキストには空白と句読点が含まれる場合がありますが、これらは保持する必要があります
  • 文字の大文字化を保持する必要があります
  • これはので、当然、最少バイトが勝ちます!

テストケース

テストケースはで区切られ<===========>、入力と期待される出力の間に空白行があります

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.

ボーナス

また、テストケースのコーパス翻訳のそれぞれを発音する音声録音(または音声付きのビデオ)を含める場合1、報酬としてバイトカウントを掛けることができます。


@Shaggy Sure、そのことを考える
べき

4
@RobertS。また、スコアにはボーナスがありません(x * 1 == x)。それは翻訳の多くのunpronouncabilityで冗談突くだ
Skidsdev

1
出力は文字の配列にできますか?
エルペドロ

@Skidsdev「翻訳」は発音可能です。録音された人間の声として、またはプログラムで機械学習やテキスト読み上げ技術を使用して。
guest271314

1
そして、フィンランド語が生まれました!
セルジオ

回答:




4

木炭、42バイト

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

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

≔                       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バイト

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

改行とインデントは読みやすくするためのものです。

SQL 2017関数を使用します TRANSLATE文字置換にを。

残念ながら、大文字小文字を維持するために、アルファベットを(ほぼ)2回入れる必要がありました。おそらくより良い方法、処理するかもしれない何かがありますtはグループとしてました。

入力は、IOルールに従って、varchar列vを持つ既存のテーブルtを介して行われます

この場合、大文字と小文字を区別する照合を使用して、大文字と小文字を区別するサーバーで実行するか、COLLATEキーワード(文字の合計にはカウントされません)を使用して、テーブルを作成する必要があります。

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

3

JavaScript(Node.js)、100バイト

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





2

C#(Visual C#Interactive Compiler)151 83バイト

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

オンラインでお試しください!

Pietu1998のおかげでなんと68バイトも節約できました!


範囲を削除し、sを組み合わせて、大文字と小文字を区別するビット単位演算子を使用することで、これを83バイトまで減らすことができますSelect
PurkkaKoodari

ありがとう!ビットごとの演算子を使用した素敵なトリック!
無知の

2

K(ngn / k)87 63 61 60 59バイト

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

オンラインでお試しください!

{ } 引数付きの関数 x

_ 小文字に

a: に割り当てます a

!128 リスト 0 1 2 ... 127

@[!128; インデックス ;:; 値は ]インデックスの要素を指定された値に置き換えることで修正します

98+!2598 99 100 ... 122ASCIIコードであるリスト"bcd...z"

並置は索引付けなので、使用します a、修正リストのインデックスとして(暗黙的に整数に変換された)します

x-a- から引く a、フォームを減算しxます。これは元の文字列のように大文字/小文字を復元します

`c$ 文字に変換する


1

Retina 0.8.2、59バイト

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

オンラインでお試しください!リンクにはテストケースが含まれます。説明:

[a-z]
 $&

各文字の前に非ASCII文字をプレフィックスします。(改行しないスペースを使用しようとしましたが、Firefoxはコピーして貼り付けた後、通常のスペースに戻した可能性があります。)

T`l`L

すべての文字を大文字にします。

T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB

文字をコーパスに変換します。

T`L `l_` .

非ASCII文字の後の文字を小文字にし、非ASCII文字を削除します。

ナイーブソリューションは63バイトです。

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

オンラインでお試しください!リンクにはテストケースが含まれます。


1

Python 2、115バイト

lambda i:i.translate(''.join(a))
a=map(chr,range(256))
b='typetjkitkpstokrtyputjkyb'
a[66:91]=b.upper();a[98:123]=b

オンラインでお試しください!

@ElPedroの回答から改編。これにより、配列内のすべてのASCII文字の置換が生成され、がa使用されstr.translateます。

文字の配列を返すことが許容される場合、113バイトにできます。

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

オンラインでお試しください!


この夜に、それがどのように行われていたかを考えるために、いくつかの考えを取りました。長い一日でした!いい解決策。
エルペドロ


1

Japt、37バイト

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

オンラインでお試しください!

上記のリンクにはほとんどのテストケースが含まれていますが、1番目と2番目の引用符の両方が含まれているため、最後から2番目の文字列を文字列として入力できませんでした。ここにそのテストケース、代わりに文字列として入力されます。

説明:

;                                        #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

パイソン2138の 132バイト

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)

オンラインでお試しください!

実際には、ラムダよりも名前付き関数の方が短い!

ラムダバージョン、138バイト

lambda i,a='bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ',b='typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB':''.join((x,b[a.find(x)])[x in a]for x in i)

オンラインでお試しください!

131 125文字の配列を返すことが許可さjoinれ、関数の外部にある場合。

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]

オンラインでお試しください!


1
あなたが作る場合は、まだラムダを使用することができますaし、bグローバル変数
ブラックフクロウカイ

@BlackOwlKai-ありがとう。そのアイデアで遊んでいたが、それは遅れてきています。たぶん明日:)
ElPedro

それを降りて113分の120文字(テストケースなしTIO、他のリンクは長すぎるコメントのためになります)
ブラックフクロウカイ

私を打ち負かし、あなた自身の答えとして投稿するのに十分なほど異なっています。私は
賛成票を投じ

テストケースも盗んでください。彼らは...コードよりを入力に時間がかかった
ElPedro

0

PHP、100バイト

コード

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

オンラインでお試しください!

説明

# 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、34文字

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

オンラインでお試しください!

文字列は、「typetjkitkpstokrtyputjkyb」の圧縮バージョンです。何らかの理由でPythに「atypetjkitkpstokrtyputjkyb」を圧縮させることができませんで、に関数で

+++ \。N ++ hSzeSzCi-RChSzCMz-hCeSzChSzN
2つのtを削除できるため、おそらく1〜2バイト節約できますが。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.