Przetłumacz angielski na Corpus
On 2 lutego, 2021 by adminCorpus to fikcyjna frakcja z popularnej gry wideo Warframe , którzy mają dość interesujący język.
Podczas gdy inne frakcje w grze, takie jak Grineer, mają pewną logikę w swoim języku, Corpus jest po prostu stratne zastąpienie języka angielskiego.
Wszystkie słowa z Corpus są takie same, jak ich angielskie odpowiedniki, z wyjątkiem następujących odwzorowań alfabetycznych:
To powoduje pewne problemy z wymową, ponieważ:
yes
staje się yey
say
staje się yay
yay
staje się yay
sassy
staje się yayyy
case
staje się
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
Biorąc pod uwagę tekst, używając alfabetu angielskiego, wypisz jego tłumaczenie Corpus.
Na przykład tekst Hello, World!
stanie się Keppo, Jotpp!
w korpusie
Reguły
- Dane wejściowe będą zawierały tylko drukowalne znaki ASCII
- Tekst wejściowy może zawierać spacje i znaki interpunkcyjne, muszą to być zachowane
- Duże litery muszą zostać zachowane
- To jest code-golf , więc naturalnie wygrywa najmniej bajtów!
Przypadki testowe
Przypadki testowe są oddzielone znakiem <===========>
, z pustą linią między wejściem a oczekiwanym wyjściem
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 dźwiękowe (lub wideo z dźwiękiem), na którym wymawiasz każde z tłumaczeń korpusu testu, może pomnożyć liczbę bajtów przez 1
w nagrodę.
Komentarze
Odpowiedz
Odpowiedź
05AB1E , 24 bajty
ži.•ÜÁ©;«ìñä°ÔG·ÖYΘ•Du«‡
Wyjaśnienie:
‡ transliterate ži a-zA-Z with .•ÜÁ©;«ìñä°ÔG·ÖYΘ• atypetjkitkpstokrtyputjkyb Du« concatenated with itself, uppercased
Komentarze
- Drobne 24-bajtowa alternatywa poprzez transliterację samych spółgłosek.
Odpowiedź
Węgiel drzewny , 42 bajtów
≔”$⌊∧T-¶I^F⁷ü@n⁹γ›7η”η⭆θ⎇№β↧ι§⎇№βι↧ηη⌕β↧ιι
Wypróbuj online! Link prowadzi do pełnej wersji c oda. 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
Odpowiedź
T-SQL, 107 bajtów
SELECT TRANSLATE(v,"bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ", "typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB")FROM t
Podziały wiersza i wcięcia służą tylko do czytelności.
Używa funkcja SQL 2017 TRANSLATE
do zamiany znaków.
Niestety musiałem umieścić (prawie) cały alfabet tam dwa razy , aby zachować wielkość liter. Prawdopodobnie są lepsze sposoby, może coś, co obsługuje t „jako grupa, ale to zadziałało dla mnie.
Dane wejściowe są wprowadzane za pośrednictwem istniejącej tabeli t z kolumną varchar v , zgodnie z naszymi zasadami we / wy .
W tym przypadku tabela należy utworzyć przy użyciu sortowania z uwzględnieniem wielkości liter , uruchamiając na serwerze z rozróżnianiem wielkości liter lub używając słowa kluczowego COLLATE
(nie wliczane do łącznej liczby znaków ):
CREATE TABLE t(v varchar(999) COLLATE Latin1_General_CS_AS)
Odpowiedź
JavaScript (Node.js) , 100 bajtów
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()
Odpowiedź
R , 79 bajtów
function(x)chartr("b-zB-Z",paste0(y<-"typetjkitkpstokrtyputjkyb",toupper(y)),x)
Tylko 3 bajty krótsze niż dosłowne pisanie zarówno małe, jak i wielkie litery zastępujące razem …
R , 79 bajtów
function(x,`[`=chartr)"B-Z"[toupper(y),"b-z"[y<-"typetjkitkpstokrtyputjkyb",x]]
Bardziej wyszukany kod, ta sama liczba bajtów.
Odpowiedź
Odpowiedź
Odpowiedź
J , 78 61 bajtów
-17 bajtów dzięki FrownyFrog!
rplc(u:,98 66+/i.25);"0(,toupper)@"typetjkitkpstokrtyputjkyb"
Komentarze
- 61
- @FrownyFrog Dzięki! W moim J804 nie mogę ' t używać stałych po prawej stronie. Muszę uaktualnić 🙂 Moje rozwiązanie jest jednak brzydkie ….
Odpowiedź
C # (interaktywny kompilator Visual C #) , 151 83 bajty
n=>n.Select(a=>char.IsLetter(a)?(char)(" ATYPETJKITKPSTOKRTYPUTJKYB"[a%32]|a&32):a)
Zapisano aż 68 bajtów dzięki Pietu1998!
Komentarze
- Możesz to zmniejszyć do 83 bajtów przez usunięcie zakresu, połączenie znaków
Select
i użycie operatorów bitowych dla wielkości liter. - Dzięki! Niezła sztuczka z bitowymi operatorami!
Odpowiedź
K (ngn / k) , 87 63 61 60 59 bajtów
f:{`c$x-a-@[!128;98+!25;:;0+"typetjkitkpstokrtyputjkyb"]a:_x}
{
}
funkcja z argumentem x
_
na małe litery
a:
przypisz do a
!128
lista 0 1 2 ... 127
@[!128;
indeksy ;:;
wartości ]
zmień je, zastępując elementy w indeksach podanymi wartościami
98+!25
lista 98 99 100 ... 122
, które są kodami ASCII dla "bcd
… z"
zestawienie to indeksowanie, więc używamy a
(niejawnie konwertowane na liczby całkowite) jako indeksy na zmienionej liście
x-a-
odejmij od a
, a następnie odejmij formularz x
; przywraca to wielkie / małe litery jak w oryginalnym ciągu
`c$
konwersja na znaki
Odpowiedź
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] $&
Umieść przed każdą literą znak inny niż ASCII. (Próbowałem użyć nierozdzielającej spacji, ale Firefox mógł zmienić ją z powrotem na zwykłą spację po skopiowaniu i wklejeniu.)
T`l`L
Wszystkie znaki wielkie litery.
T`L`ATYP\ETJKITKPST\OKRTYPUTJKYB
Zamień litery na Corpus.
T`L `l_` .
Małe litery po znak spoza ASCII i usuń znak spoza ASCII.
Rozwiązanie naiwne ma 63 bajty:
T`lL`aty\petjkitk\pst\okrty\putjkybATYP\ETJKITKPST\OKRTYPUTJKYB
Wypróbuj online! Link zawiera przypadki testowe.
Odpowiedź
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
Na podstawie odpowiedzi @ElPedro „. Powoduje to zastąpienie każdego znaku ascii w tablicy a
, a następnie używa str.translate
.
Może zostać przeniesiony 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
Komentarze
- O tej porze nocy zastanawiałem się, jak to robi. ' to był długi dzień! Niezłe rozwiązanie.
Odpowiedź
Galaretka , 29 bajtów
“qḍỊYl4ḃ©ƭṄxḳ½Dy’ṃⱮØA,Øa¤⁺żẎy
Komentarze
- Potrzebne jest tylko mapowanie spółgłosek, więc
“ØṖ¦Mṗẏʋ@¥;}/’ṃⱮØCŒH¤⁺żẎy
zapisuje 4. (Czy ' t pozbyć się ' y ' zØY
, ponieważ ' znajduje się po prawej stronie mapy)
Odpowiedź
Japt , 37 bajtów
;®i`
ypetjkkp¡okrtyp©jkyb`pu)gCpu bZ
Powyższy link zawiera większość przypadków testowych, ale nie udało mi się wprowadzić przedostatniego jeden jako ciąg, ponieważ zawiera zarówno pojedyncze, jak i podwójne cudzysłowy. Tutaj jest ten przypadek testowy. Zamiast tego wprowadź tablicę 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: `
ypetjkkp¡okrtyp©jkyb` # Get the lowercase Corpus alphabet pu) # Plus the uppercase Corpus alphabet i # Add Z at the end (index -1)
Odpowiedź
Python 2 , 138 132 bajty
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)
Właściwie krócej z nazwaną funkcją niż z lambdą!
wersja lambda, 138 bajtów
lambda i,a="bcdfghjlmnpqrstvwxzBCDFGHJLMNPQRSTVWXZ",b="typtjktpstkrtyptjkbTYPTJKTPSTKRTYPTJKB":"".join((x,b[a.find(x)])[x in a]for x in i)
131 125 , jeśli możemy zwrócić tablicę znaków i join
poza 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]
Komentarze
- Nadal możesz używać lambdy, jeśli utworzysz i
b
zmienne globalne - @BlackOwlKai – Dzięki. Bawiłem się tym pomysłem, ale ' robi się późno. Może jutro 🙂
- Mam 120/113 znaków (TIO bez przypadków testowych, w przeciwnym razie link byłby za długi na komentarz)
- Jest lepszy od mojego i na tyle inny, że możesz opublikować własną odpowiedź. ' zagłosuję za 🙂
- Możesz też ukraść moje przypadki testowe. Wpisanie trwało dłużej niż kod …
Odpowiedź
PHP , 100 bajtów
Kod
<?=strtr($argv[0],($u=bcdfghjklmnpqrstvwxyz).($f=strtoupper)($u),($v=typtjktkpstkrtyptjkyb).$f($v));
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.
Odpowiedź
Pyth, 35 bajtów
XQ.*m+r1dd[tG."byàHuH¯¹e?rJyfh
Prawdopodobnie można użyć lewej mapy lub czegoś, aby pozbyć się dwie d „s, ale nie mogłem dowiedzieć się, jak to zrobić.
Odpowiedź
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));};
Komentarze
Odpowiedź
Pyth, 34 znaki
J."byàHuH¯¹e?rJyfh"XXztGJrtG1rJ1
Ciąg jest skompresowaną wersją ” typetjkitkpstokrtyputjkyb „. Z jakiegoś powodu nie mogę zmusić Pytha do skompresowania „atypetjkitkpstokrtyputjkyb” za pomocą funkcji
+++\.N++hSzeSzCi-RChSzCMz-hCeSzChSzN
, mimo że prawdopodobnie zapisałoby to bajt lub dwa jako dwa mogą zostać wyeliminowane.
Odpowiedź
Tcl , 114 bajtów
proc C s {string map [split {btcydpftgjhkjtlpmsntpkqrrtsytpvtwjxkzbBTCYDPFTGJHKJTLPMSNTPKQRRTSYTPVTWJXKZB} ""] $s}
Odpowiedź
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
x * 1 == x
). To ' to żartobliwy żart w niewypowiadalności wielu tłumaczeń.