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ę.


@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

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

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)

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()

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.






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


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.


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!


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)

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!


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.

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ć.


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!



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.



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!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.