Przetłumacz z angielskiego na korpus

14

W Corpus są fikcyjne frakcja z popularnej gry wideo Warframe którzy mają nieco ciekawym językiem.

Podczas gdy inne frakcje w grze, takie jak Grineer, mają pewną logikę w swoim języku, Corpus jest po prostu stratnym zamiennikiem języka angielskiego.

Wszystkie słowa Corpus są takie same jak ich angielskie odpowiedniki, z wyjątkiem następujących odwzorowań alfabetycznych:

Mapowanie z angielskiego na Corpus

Powoduje to pewne problemy z wymową, ponieważ:

yesstaje yey
saysię yay
yaystaje yay
sassysię yayyy
casestaje sięyaye

Oto wersja tekstowa mapowań:

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

Wyzwanie

Podany tekst przy użyciu alfabetu angielskiego, wypisz jego tłumaczenie Korpusu.

Na przykład tekst Hello, World!staje się Keppo, Jotpp!Corpus

Zasady

  • Dane wejściowe będą składały się wyłącznie ze znaków drukowalnych ASCII
  • Tekst wejściowy może zawierać spacje i znaki interpunkcyjne, należy je zachować
  • Wielkie litery należy zachować
  • To jest więc wygrywa najmniej bajtów!

Testcases

Przypadki testowe są oddzielone za <===========>pomocą pustej linii między danymi wejściowymi a oczekiwanymi danymi wyjściowymi

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.

Bonus

Jeśli dołączysz również nagranie audio (lub wideo z dźwiękiem) wymawiające każde z tłumaczeń korpusu testowego, możesz pomnożyć liczbę bajtów przez 1nagrodę.

Skidsdev
źródło
@Shaggy Pewnie, powinienem pomyśleć o tym
Skidsdev,
4
@RobertS. nie zapewnia również premii do twojego wyniku ( x * 1 == x). To
kpiąca
1
Czy wyjście może być tablicą znaków?
ElPedro,
@Skidsdev „Tłumaczenia” są wymawiane; jako nagrany głos ludzki lub programowo przy użyciu technologii uczenia maszynowego i / lub syntezatora mowy.
guest271314,
1
I tak narodził się język fiński!
sergiol

Odpowiedzi:

4

05AB1E , 24 bajty

ži.•ÜÁ©;«ìñä°ÔG·ÖYΘ•Du«‡

Wyjaśnienie:

                       ‡   transliterate
ži                         a-zA-Z with
  .•ÜÁ©;«ìñä°ÔG·ÖYΘ•       atypetjkitkpstokrtyputjkyb
                    Du«    concatenated with itself, uppercased

Wypróbuj online!

Okx
źródło
Drobne 24 bajty alternatywne przez transliterację tylko spółgłosek.
Kevin Cruijssen,
4

Węgiel drzewny , 42 bajty

≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

≔                       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
Neil
źródło
4

T-SQL, 107 bajtów

SELECT TRANSLATE(v,'bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ',
                   'typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB')FROM t

Przerwanie linii i wcięcie służą wyłącznie do odczytu.

Używa funkcji SQL 2017 TRANSLATEdo zamiany znaków.

Niestety musiałem umieścić (prawie) cały alfabet dwa razy, aby zachować obudowę. Prawdopodobnie są lepsze sposoby, może coś, co obsługuje t jako grupę, ale to zadziałało dla mnie.

Dane wejściowe pochodzą z wcześniej istniejącej tabeli t z kolumną varchar v , zgodnie z naszymi regułami IO .

W takim przypadku tabela musi zostać utworzona przy użyciu sortowania z rozróżnianiem wielkości liter , albo na serwerze z rozróżnianiem wielkości liter, albo za pomocą COLLATEsłowa kluczowego (nie liczone do całkowitej liczby znaków):

CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
BradC
źródło
3

JavaScript (Node.js) , 100 bajtów

s=>s.replace(/[a-z]/gi,c=>(C='_atypetjkitkpstokrtyputjkyb'[Buffer(c)[0]&31],c>{}?C:C.toUpperCase()))

Wypróbuj online!

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
źródło
3

R , 79 bajtów

function(x)chartr("b-zB-Z",paste0(y<-"typetjkitkpstokrtyputjkyb",toupper(y)),x)

Wypróbuj online!

Tylko 3 bajty krótsze niż dosłowne wpisywanie razem ciągów małych i wielkich liter razem ...

R , 79 bajtów

function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]

Wypróbuj online!

Bardziej zaawansowany kod, ta sama liczba bajtów.

Kirill L.
źródło
2

Rubinowy , 55 bajtów

$_.tr!"b-zB-Z",(x="typetjkitkpstokrtyputjkyb")+x.upcase

Wypróbuj online!

Kirill L.
źródło
2

J , 78 61 bajtów

-17 bajtów dzięki FrownyFrog!

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

Wypróbuj online!

Galen Iwanow
źródło
2
61
FrownyFrog,
@FrownyFrog Dzięki! W moim J804 nie mogę używać stałych po prawej stronie. Muszę zaktualizować :) Moje rozwiązanie jest jednak brzydkie ....
Galen Iwanow
2

C # (interaktywny kompilator Visual C #) , 151 83 bajtów

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

Wypróbuj online!

Zaoszczędź aż 68 bajtów dzięki Pietu1998!

Wcielenie ignorancji
źródło
Możesz sprowadzić to do 83 bajtów , usuwając zakres, łącząc Selects i używając bitowych operatorów do obudów.
PurkkaKoodari,
Dzięki! Niezła sztuczka z nieco mądrymi operatorami!
Embodiment of Ignorance
2

K (ngn / k) , 87 63 61 60 59 bajtów

f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}

Wypróbuj online!

{ } funkcja z argumentem x

_ na małe litery

a: Przypisać do a

!128 Lista 0 1 2 ... 127

@[!128; ;:; wartości indeksów] zmieniają go, zastępując elementy w indeksach podanymi wartościami

98+!25lista, dla 98 99 100 ... 122której są kody ascii"bcd ...z"

zestawienie indeksuje, dlatego używamy a(domyślnie konwertowane na liczby całkowite) jako indeksy na zmienionej liście

x-a-odejmij od a, a następnie odejmij formularz x; to przywraca wielkie / małe litery, jak w oryginalnym ciągu

`c$ konwertować na postacie

ngn
źródło
1

Retina 0.8.2 , 59 bajtów

[a-z]
 $&
T`l`L
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
T`L `l_` .

Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:

[a-z]
 $&

Przed każdą literą poprzedzaj znak spoza ASCII. (Próbowałem użyć niełamliwego spacji, ale Firefox mógł zmienić go z powrotem na zwykłe spację po skopiowaniu i wklejeniu).

T`l`L

Wielkie litery wszystkich liter.

T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB

Konwertuj litery na korpus.

T`L `l_` .

Małe litery po znaku spoza ASCII i usuń znak spoza ASCII.

Naiwne rozwiązanie ma 63 bajty:

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

Wypróbuj online! Link zawiera przypadki testowe.

Neil
źródło
1

Python 2 , 115 bajtów

lambda i:i.translate(''.join(a))
a=map(chr,range(256))
b='typetjkitkpstokrtyputjkyb'
a[66:91]=b.upper();a[98:123]=b

Wypróbuj online!

Na podstawie odpowiedzi @ ElPedro. Generuje to zamiennik dla każdego znaku ascii w tablicy, aa następnie używa str.translate.

Może zostać sprowadzony do 113 bajtów, jeśli zwracanie tablicy znaków jest dopuszczalne:

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

Wypróbuj online!

Czarna sowa Kai
źródło
O tej porze nocy zastanawiałem się, jak to działa. To był długi dzień! Niezłe rozwiązanie.
ElPedro,
1

Japt , 37 bajtów

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

Wypróbuj online!

Powyższy link zawiera większość przypadków testowych, ale nie byłem w stanie wprowadzić drugiego, aby ostatni jako ciąg, ponieważ zawiera zarówno pojedyncze, jak i podwójne cudzysłowy. Tutaj przypadek testowy, wprowadzony zamiast tego jako tablica znaków.

Wyjaśnienie:

;                                        #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)
Kamil Drakari
źródło
0

Python 2 , 138 132 bajtów

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)

Wypróbuj online!

Właściwie krótszy z nazwaną funkcją niż z lambda!

wersja lambda, 138 bajtów

lambda i,a='bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ',b='typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB':''.join((x,b[a.find(x)])[x in a]for x in i)

Wypróbuj online!

131 125 jeśli wolno nam zwrócić tablicę znaków i miećjoinpoza funkcją.

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]

Wypróbuj online!

ElPedro
źródło
1
Można nadal używać lambda jeśli zrobisz ai bzmienne globalne
Czarny Sowa Kai
@BlackOwlKai - Dzięki. Bawiłem się tym pomysłem, ale robi się późno. Może jutro :)
ElPedro
Sprowadziłem go do 120/113 znaków (TIO bez przypadków testowych, w przeciwnym razie link byłby za długi na komentarz)
Black Owl Kai
Bije moje i na tyle różne, że możesz opublikować własną odpowiedź. Będę głosować :)
ElPedro
Zapraszam również do kradzieży moich przypadków testowych.
Pisanie
0

PHP , 100 bajtów

Kod

<?=strtr($argv[0],($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),($v=typtjktkpstkrtyptjkyb).$f($v));

Wypróbuj online!

Wyjaśnienie

# 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.
Francisco Hahn
źródło
0

Pyth, 35 bajtów

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

Spróbuj!

Prawdopodobnie mógłbym użyć lewej mapy lub czegoś, aby pozbyć się dwóch liter, ale nie wiedziałem, jak to zrobić.

KarlKastor
źródło
0

Java, 211 bajtów

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

Wypróbuj online!

Hypino
źródło
191 bajtów
pułapcatcat
0

Pyth, 34 znaki

J. „byàHuH¯¹e? RJyfh” XXztGJrtG1rJ1

Wypróbuj online!

Ciąg jest skompresowaną wersją „typetjkitkpstokrtyputjkyb” . Z jakiegoś powodu nie mogę zmusić Pytha do kompresji „atypetjkitkpstokrtyputjkyb” za pomocą funkcji

+++ \. N ++ hSzeSzCi-RChSzCMz-hCeSzChSzN
nawet jeśli prawdopodobnie zaoszczędziłby bajt lub dwa, ponieważ dwa t mogą zostać wyeliminowane.

Lucas Bertocchini
źródło
0

Tcl , 114 bajtów

proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}

Wypróbuj online!

sergiol
źródło
0

Lua , 153 bajty

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

Wypróbuj online!

Visckmart
źródło