코퍼스로 영어 번역


14

코퍼스는 인기있는 비디오 게임에서 가상의 진영이다 Warframe 다소 흥미로운 언어를 가지고있다.

그리니어 (Grineer)와 같은 게임의 다른 진영이 그들의 언어 뒤에 어떤 논리를 가지고 있지만, 코퍼스는 단순히 영어를 잃어버린 대체물입니다.

모든 코퍼스 단어는 다음의 알파벳순 매핑을 제외하고 영어 대응어와 동일합니다.

영어에서 코퍼스로의 매핑

발음과 관련하여 다음과 같은 문제가 발생합니다.

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.

보너스

각 테스트 케이스의 Corpus 변환을 발음하는 오디오 녹음 (또는 오디오가 포함 된 비디오)을 포함하는 경우 바이트 수에 1보상을 곱할 수 있습니다 .


@Shaggy Sure, 그렇게 생각해야합니다
Skidsdev

4
@RobertS. 또한 점수에 보너스를 제공하지 않습니다 ( x * 1 == x). 그것은 많은 번역본의 발음 할 수없는 혀를 찌르는 혀입니다
Skidsdev

1
출력이 문자 배열 일 수 있습니까?
ElPedro

@Skidsdev "번역"은 발음 할 수 있습니다. 기계 학습 및 / 또는 텍스트 음성 변환 기술을 사용하여 기록 된 사람의 음성 또는 프로그래밍 방식으로.
guest271314

1
핀란드어도 태어났습니다!
sergiol

답변:




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

줄 바꿈 및 들여 쓰기는 읽기 쉬운 것입니다.

TRANSLATE문자 교체에 SQL 2017 기능 을 사용합니다 .

불행히도 케이싱을 유지하기 위해 전체 알파벳을 거의 두 번 넣어야했습니다 . 아마도 t를 그룹으로 처리하는 더 나은 방법이있을 수 있지만 이것이 나를 위해 일했습니다.

입력은 기존의 테이블을 통해입니다 t varchar 열을 가진 V , 우리의 IO의 규칙에 따라 .

이 경우, 대소 문자 구분 서버에서 실행하거나 키워드 (문자 총계에 포함되지 않음)를 사용하여 대소 문자 구분 데이터 정렬을 사용하여 테이블을 작성해야합니다 COLLATE.

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

3

자바 스크립트 (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 # 대화식 컴파일러) , 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 ... 122에 대한 ASCII 코드 목록 "bcd...z"

juxtaposition은 인덱싱이므로 a수정 된 목록에서 인덱스로 암시 적으로 정수로 변환합니다.

x-a- 빼다 a 빼고 양식을 빼십시오 x. 이것은 원래 문자열에서와 같이 대문자 / 소문자를 복원합니다

`c$ 문자로 변환


1

레티 나 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 문자를 삭제하십시오.

Naïve 솔루션은 63 바이트입니다.

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

온라인으로 사용해보십시오! 링크에는 테스트 사례가 포함됩니다.


1

파이썬 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

온라인으로 사용해보십시오!


밤 시간에 어떻게 생각했는지 알아 내려고 생각했습니다. 긴 하루였습니다! 좋은 해결책.
ElPedro


1

apt , 37 바이트

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

온라인으로 사용해보십시오!

위의 링크에는 대부분의 테스트 사례가 포함되어 있지만 작은 따옴표와 큰 따옴표가 모두 포함되어 있기 때문에 마지막으로 두 번째 문자열을 문자열로 입력 할 수 없었습니다. 다음 은 테스트 사례입니다. 대신 문자 배열로 입력하십시오.

설명:

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

파이썬 2 , 138132 바이트

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
당신이 할 경우, 당신은 여전히 람다를 사용할 수 있습니다 ab전역 변수
블랙 올빼미 카이

@BlackOwlKai-감사합니다. 그 아이디어로 놀고 있지만 늦어지고 있습니다. 아마 내일 :)
ElPedro

그것을 아래로 얻었다 113분의 120 자 합니다 (을 testcases없이 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

피쓰, 35 바이트

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

시도 해봐!

아마도 왼쪽 맵이나 두 개의 d를 제거하기 위해 무언가를 사용할 수는 있지만 어떻게 알아낼 수 없었습니다.



0

Pyth, 34 자

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

온라인으로 사용해보십시오!

문자열은 "typetjkitkpstokrtyputjkyb" 의 압축 버전입니다 . 어떤 이유로 Pyth가 "atypetjkitkpstokrtyputjkyb" 를 압축 할 수없는 이유 함수로

+++ \. N ++ hSzeSzCi-RChSzCMz-hCeSzChSzN
비록 두 개의 t가 제거 될 수 있기 때문에 아마도 1 ~ 2 바이트를 절약 할 수 있습니다.



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.