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

14

В Corpus является вымышленной фракцией из популярной видеоигры 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.

Бонус

Если вы также включите аудиозапись (или видео со звуком), когда вы произносите каждый из корпусов тестового набора, вы можете умножить свой счет 1в качестве награды.

Skidsdev
источник
@ Шэгги Конечно, стоит подумать об этом
Скидсдев
4
@RobertS. он также не дает бонуса на ваш счет ( x * 1 == x). Это
насмешливое замечание
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

Разрыв строки и отступ предназначены только для удобства чтения.

Использует функцию SQL 2017 TRANSLATEдля замены символов.

К сожалению, пришлось поместить (почти) весь алфавит туда дважды, чтобы сохранить корпус. Есть , вероятно , более эффективные способы, возможно , что - то , что обрабатывает т «S , как группа, но это работает для меня.

Ввод осуществляется с уже существующей таблицей т с колонками VARCHAR V , в соответствии с нашими правилами ввода - вывода .

В этом случае таблица должна быть создана с использованием сортировки с учетом регистра , либо путем запуска на чувствительном к регистру сервере, либо с использованием COLLATEключевого слова (не учитывается в общем количестве символов):

CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
BradC
источник
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()
Arnauld
источник
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

J , 78 61 байт

-17 байт благодаря FrownyFrog!

rplc(u:,98 66+/i.25);"0(,toupper)@'typetjkitkpstokrtyputjkyb'

Попробуйте онлайн!

Гален Иванов
источник
2
61
FrownyFrog
@FrownyFrog Спасибо! В моем J804 я не могу использовать константы с правой стороны. Мне нужно обновить :) Мое решение тем не менее уродливо ....
Гален Иванов
2

C # (интерактивный компилятор Visual C #) , 151 83 байта

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

Попробуйте онлайн!

Благодаря Pietu1998 удалось сэкономить до 68 байтов!

Воплощение невежества
источник
Вы можете уменьшить это до 83 байтов , удалив диапазон, комбинируя Selects и используя побитовые операторы для ввода в регистр.
PurkkaKoodari
Благодарность! Хороший трюк с немного мудрыми операторами!
Воплощение Невежества
2

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список 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]

Попробуйте онлайн!

ElPedro
источник
1
Вы все еще можете использовать лямбду, если вы делаете aи bглобальные переменные
Black Owl Kai
@ BlackOwlKai - Спасибо. Я играл с этой идеей, но уже поздно. Может быть, завтра :)
ElPedro
Получил 120/113 символов ( TIO без тестовых случаев , иначе ссылка была бы слишком длинной для комментария)
Black Owl Kai
Бьет мой и достаточно отличается от вас, чтобы опубликовать в качестве собственного ответа. Я буду голосовать :)
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, 35 Bytes

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

Попытайся!

Возможно, можно использовать левую карту или что-то, чтобы избавиться от двух д, но я не мог понять, как.

KarlKastor
источник
0

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));};

Попробуйте онлайн!

Hypino
источник
191 байт
floorcat
0

Pyth, 34 символа

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

Попробуйте онлайн!

Строка является сжатой версией "typetjkitkpstokrtyputjkyb" . Почему-то я не могу заставить Pyth сжать "atypetjkitkpstokrtyputjkyb" с помощью функции

+++ \. N ++ hSzeSzCi-RChSzCMz-hCeSzChSzN
хотя это, вероятно, сохранит один или два байта, так как два т могут быть устранены.

Лукас Бертоккини
источник