英語をコーパスに翻訳
On 2月 2, 2021 by adminコーパスは、人気のあるビデオゲームの架空の派閥ですウォーフレームはやや興味深い言語を持っています。
グリニアなどのゲームの他の派閥には言語の背後にいくつかの論理がありますが、コーパスは
すべてのコーパスの単語は、次のアルファベット順のマッピングを除いて、英語の対応する単語と同じです。
これにより、次のように発音に問題が発生します。
yes
はyey
say
はyay
yay
はyay
sassy
は
case
は
ここに「マッピングのテキストバージョン:
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印刷可能文字のみで構成されます
- 入力テキストには空白と句読点を含めることができます。保存
- 文字の大文字化は保存する必要があります
- これは code-golf なので、当然、最も少ないバイトが優先されます!
テストケース
テストケースは<===========>
で区切られ、入力と期待される出力の間に空白行があります
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
報酬として。
コメント
回答
回答
05AB1E 、24バイト
ži.•ÜÁ©;«ìñä°ÔG·ÖYΘ•Du«‡
説明:
‡ transliterate ži a-zA-Z with .•ÜÁ©;«ìñä°ÔG·ÖYΘ• atypetjkitkpstokrtyputjkyb Du« concatenated with itself, uppercased
コメント
- マイナーな 24バイトの代替。子孫だけを文字変換します。
回答
木炭、42バイト
≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι
オンラインでお試しください!リンクはcの詳細バージョンへのリンクですode。説明:
≔ 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
回答
T-SQL、107バイト
SELECT TRANSLATE(v,"bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ", "typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB")FROM t
改行とインデントは読みやすくするためのものです。
用途SQL2017関数 TRANSLATE
文字置換用。
残念ながら(ほぼ)配置する必要がありました。そこにあるアルファベット全体を 2回、大文字と小文字を区別します。おそらくもっと良い方法があります。おそらく、 t “をグループとして処理する方法ですが、これは私にとってはうまくいきました。
入力は、varchar列 t を介して行われます。 / div> v 、 IOルールごと。
この場合、テーブル大文字と小文字を区別するサーバーで実行するか、COLLATE
キーワードを使用して、大文字と小文字を区別する照合を使用して作成する必要があります(文字の合計にはカウントされません) ):
CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
回答
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()
回答
R 、79バイト
function(x)chartr("b-zB-Z",paste0(y<-"typetjkitkpstokrtyputjkyb",toupper(y)),x)
文字通り入力するよりもわずか3バイト短い小文字と大文字の両方の置換文字列を一緒に…
R 、79バイト
function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]
より洗練されたコード、同じバイト数。
回答
回答
回答
J 、 78 61バイト
FrownyFrogのおかげで17バイト!
rplc(u:,98 66+/i.25);"0(,toupper)@"typetjkitkpstokrtyputjkyb"
コメント
- 61
- @FrownyFrogありがとう! J804では、’右側の定数を使用できません。アップグレードする必要があります:)それでも私のソリューションは醜いです….
回答
C#(Visual C#インタラクティブコンパイラ)、 151 83バイト
n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)
おかげでなんと68バイト節約できましたPietu1998!
コメント
- これは 83バイトまで下げることができます。範囲を削除し、
Select
を組み合わせて、大文字と小文字を区別するためにビット演算子を使用します。 - ありがとうございます。ビット演算演算子を使用した優れたトリック!
回答
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;
インデックス ;:;
値 ]
は、インデックスの要素を指定された値に置き換えることで修正します。 / em>
98+!25
リスト98 99 100 ... 122
は"bcd
… z"
並置はインデックス付けであるため、
(暗黙的に整数に変換)
x-a-
はa
次に、フォームx
を減算します。これにより、元の文字列と同じように大文字/小文字が復元されます
`c$
文字に変換
回答
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
オンラインでお試しください!リンクにはテストケースが含まれています。
回答
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
コメント
- 夜のこの時間に、それがどのように行われているかを理解するためにいくつか考えてみてください。 ‘長い一日でした!良い解決策です。
回答
ゼリー、29バイト
“qḍỊYl4ḃ©ƭṄxḳ½Dy’ṃⱮØA,Øa¤⁺żẎy
コメント
- マップする必要があるのは子孫だけなので、
“ØṖ¦Mṗẏʋ@¥;}/’ṃⱮØCŒH¤⁺żẎy
4を節約します(’ ‘ y ‘を‘はマップの右側にあるため)
回答
Japt 、37バイト
;®i`
ypetjkkp¡okrtyp©jkyb`pu)gCpu bZ
上記のリンクにはほとんどのテストケースが含まれていますが、最後から2番目を入力できませんでした1つは一重引用符と二重引用符の両方が含まれているため、文字列として使用されます。ここに、代わりに文字の配列として入力されたテストケースがあります。
説明:
; #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)
回答
Python 2 、 138 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]
コメント
- および
b
グローバル変数 - @ BlackOwlKai-ありがとう。そのアイデアで遊んでいますが、’遅くなっています。多分明日:)
- 120/113文字(テストケースなしのTIO、そうでない場合はリンクが長すぎてコメント)
- 自分の答えとして投稿できるほど、私のビートとは異なります。 ‘賛成します:)
- テストケースも自由に盗んでください。コードよりも入力に時間がかかりました…
回答
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.
回答
回答
Java、211バイト
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));};
コメント
回答
Pyth、34文字
J."byàHuH¯¹e?rJyfh"XXztGJrtG1rJ1
文字列は” typetjkitkpstokrtyputjkyb “の圧縮バージョンです。何らかの理由で、Pythに関数
+++\.N++hSzeSzCi-RChSzCMz-hCeSzChSzN
を使用して “atypetjkitkpstokrtyputjkyb” を圧縮させることができません。削除することができます。
回答
Tcl 、114バイト
proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}
回答
Lua 、153バイト
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
)。 ‘多くの翻訳の発音の難しさを口ずさみます