영어를 코퍼스로 번역
On 2월 2, 2021 by adminCorpus 는 인기있는 비디오 게임 Warframe 은 다소 흥미로운 언어를 가지고 있습니다.
Grineer와 같은 게임의 다른 세력은 언어 뒤에 약간의 논리를 가지고 있지만 Corpus는 단순히 영어를 손실로 대체 한 것입니다.
모든 코퍼스 단어는 다음 알파벳 매핑을 제외하고 영어 단어와 동일합니다.
이로 인해 다음과 같은 발음 문제가 발생합니다.
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의 자세한 버전입니다. 송시. 설명 :
≔ 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
줄 바꿈 및 들여 쓰기는 읽기 전용입니다.
사용 문자 교체를위한 SQL 2017 함수 TRANSLATE
불행히도 (거의) 넣어야했습니다. 대소 문자를 유지하기 위해 알파벳 전체가 두 번 표시됩니다. 아마도 더 나은 방법이있을 것입니다. 아마도 t “를 그룹으로 처리 할 수 있지만 이것은 저에게 효과적이었습니다.
입력은 varchar 열이있는 기존 테이블 t 를 통해 이루어집니다. v , IO 규칙에 따라 .
이 경우 테이블 대소 문자를 구분하는 서버에서 실행하거나 COLLATE
키워드를 사용하여 대소 문자 구분 데이터 정렬 을 사용하여 만들어야합니다 (문자 총계에 포함되지 않음). ) :
CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
Answer
자바 스크립트 (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 바이트
-17 바이트 (FrownyFrog 덕분에!
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;
인덱스 ;:;
값 ]
는 인디 스 의 요소를 주어진 값
98+!25
"bcd
…z"
병치가 인덱싱이므로 a
(암시 적으로 정수로 변환 됨) 수정 된 목록의 색인으로 표시
x-a-
a
그런 다음 x
양식을 뺍니다. 이렇게하면 원래 문자열에서와 같이 대 / 소문자가 복원됩니다.
`c$
문자로 변환
Answer
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
문자를 Corpus로 변환합니다.
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 ‘를ØY
‘는지도 오른쪽에 있습니다)
답변
Japt , 37 바이트
;®i`
ypetjkkp¡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: `
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)
실제로 람다보다 이름이 지정된 함수가 더 짧습니다!
lambda 버전, 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”를 압축하도록 할 수 없습니다. 비록 두 개의 t “로 1 ~ 2 바이트를 절약 할 수 있지만 제거 될 수 있습니다.
답변
Tcl , 114 바이트
proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}
Answer
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
). ‘ 많은 번역의 발음이 불투명하다는 점을 혀로 찌르는 것입니다.