Перекласти англійську мову на Корпус


14

У Corpus є вигаданою фракцією з популярної відеогри Warframe , які мають кілька цікавий мову.

У той час як інші фракції в грі, такі як Grineer, мають певну логіку за своєю мовою, Corpus - це просто втратна заміна англійської мови.

Усі слова Корпуса такі ж, як і їхні англійські аналоги, за винятком таких алфавітних відображень:

Картування з англійського на корпус

Це спричиняє деякі проблеми з вимовою як:

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 Звичайно, якщо я подумав про це
Skidsdev

4
@RobertS. він також не надає бонусу вашому рахунку ( x * 1 == x). Це
тріскання

1
Чи може висновок бути масивом символів?
ElPedro

@Skidsdev "Переклади" вимовляються; або як записаний людський голос або програмно з використанням машинного навчання та / або технологій текстового мовлення.
гість271314

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для заміни символів.

На жаль, довелося двічі помістити (майже) весь алфавіт, щоб зберегти кожух. Мабуть, є кращі способи, можливо, щось, що обробляє t як групу, але це працювало для мене.

Введення здійснюється через попередньо існуючу таблицю t із стовпчиком varchar v , згідно наших правил IO .

У цьому випадку таблицю потрібно створити, використовуючи залежно від регістру порівняння , або за допомогою запущеного на регістр серверу, або за допомогою 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()

3

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]]

Спробуйте в Інтернеті!

Код фантазії, кількість байтів.





2

C # (Visual C # Interactive Compiler) , 151 83 байт

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

Спробуйте в Інтернеті!

Збережено колосальних 68 байт завдяки Pietu1998!


Ви можете звести це до 83 байт , видаливши діапазон, поєднавши Selects та використовуючи побітові оператори для обсадження.
PurkkaKoodari

Спасибі! Гарний трюк з трохи розумними операторами!
Втілення невігластва

2

К (нг / к) , 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список, 98 99 100 ... 122які є кодами Ascii для "bcd...z"

Супозиція є індексуванням, тому ми використовуємо 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.

Наївне рішення - 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

Спробуйте в Інтернеті!


У цей час ночі задумався розібратися, як це робиться. Минув довгий день! Приємне рішення.
ElPedro


1

Japt , 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

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]

Спробуйте в Інтернеті!


1
Ви все ще можете використовувати лямбда, якщо внесете aі bглобальні змінні
Black Owl Kai

@BlackOwlKai - спасибі Грали з цією ідеєю, але вже пізно. Можливо, завтра :)
ElPedro

Знизився до 120/113 символів (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

Піт, 34 ч

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

Спробуйте в Інтернеті!

Рядок - це стисла версія "typetjkitkpstokrtyputjkyb" . Я чомусь не можу змусити Pyth стискати "atypetjkitkpstokrtyputjkyb" з функцією

+++ \. N ++ hSzeSzCi-RChSzCMz-hCeSzChSzN
навіть якщо це, ймовірно, збереже байт чи два, оскільки два t можна було усунути.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.