Problem z szyfrem Cezara polega na tym, że powstałe słowa są często nieprzekraczalne. Problem z Pig Latin polega na tym, że łatwo go rozszyfrować. Dlaczego nie połączyć ich?
Wkład
Słowo składające się z 26 angielskich liter.
Wydajność
Najpierw zmień każdą spółgłoskę w słowie na następną spółgłoskę w alfabecie. Więc b przechodzi do c, d przechodzi do f, a z przechodzi do b. Następnie zmień każdą samogłoskę na następną samogłoskę w alfabecie (u przechodzi do a). Na koniec, tylko jeśli pierwsza litera słowa jest spółgłoską, przenieś tę literę na koniec słowa i dodaj „ay” na końcu słowa.
Przykłady:
cat -> evday
dog -> uhfay
eel -> iim
- To jest golf golfowy , więc wygrywa najkrótszy kod.
- Sprawa nie ma znaczenia.
- Samogłoski, które zostaną zastosowane, to A, E, I, O i U
z → bay
the → jivay
? (To znaczy, jeśli słowo zaczyna się od wielu spółgłosek, czy poruszamy tylko jedną z nich?)Odpowiedzi:
Stax , 20 bajtów
Uruchom i debuguj
Wyjaśnienie
Przeszedłem kilka iteracji i ostatecznie sprowadziłem do 20. Moje oryginalne rozwiązanie miało 53 bajty.
źródło
Rubin ,
9669 bajtówWypróbuj online!
Zabawny fakt dnia: tr () dopasowuje ciągi znaków od prawej do lewej. Zawsze zakładałem, że jest od lewej do prawej.
źródło
R ,
8685 bajtówProsta droga.
chartr
ma uroczą i przydatną właściwość, dzięki której może określać zakresy liter , które oszczędzają kilka bajtów.-1 bajtów kradnąc ciągi tłumaczenia rozwiązania Ruby @ GB - oceń go!
Wypróbuj online!
źródło
Java (JDK) , 167 bajtów
Wypróbuj online!
Kredyty
źródło
05AB1E , 21 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Node.js 10.9.0 ,
121116 bajtówOczekuje, że ciąg wejściowy pisany małymi literami.
Wypróbuj online!
Identyfikacja samogłosek
Aby zidentyfikować samogłoski, funkcja pomocnika używa następującej maski bitów:v
I robi:
Nie musimy maskować odpowiednich bitów , ponieważ odbywa się to niejawnie. Poniżej znajduje się odpowiedni cytat ze specyfikacji ECMAScript :n
Skomentował
źródło
Python 2 ,
1531211109991 bajtówWypróbuj online!
Ogolono 8 bajtów dzięki sugestii Matthew Jensena
źródło
lambda s:[s[1:]+s[0]+"ux",s][s[0]in'aeiou'].translate(8*".ecdfighjoklmnpuqrstvawxyzb.....")
translate
w Pythonie 2 ...T-SQL, 169 bajtów
Dane wejściowe pochodzą z wcześniej istniejącej tabeli, zgodnie z naszymi standardami IO .
Najpierw wykonuje zamianę znaków za pomocą funkcji ( nowość w SQL 2017 )
TRANSLATE
, a następnie sprawdza pierwszy znak.Długo denerwujące głównie ze względu na długość słowa kluczowego SQL.
źródło
Skrypt powłoki, 70 bajtów
Wypróbuj online!
źródło
Haskell ,
10297 bajtówWypróbuj online!
źródło
Retina 0.8.2 , 50 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Podobne podejście do odpowiedzi R. Wyjaśnienie:
o
odnosi się do innego zestawu, tzn.aei\oub-df-hj-np-tv-zb
który rozwija sięaeioubcdfghjlkmnpqrstvwxyzb
, a więcuo
rozwija się douaeioubcdfghjlkmnpqrstvwxyzb
. Powoduje to następującą transliterację:Drugi
u
ib
są ignorowane, ponieważ nigdy nie można ich dopasować, więc zapewnia to pożądany szyfr. (Pamiętaj, że w Retina 1 możesz oczywiście użyćv
zamiastaei\ou
oszczędzania 5 bajtów.)Jeśli pierwsza litera nie jest samogłoską, obróć ją do końca i przyrostek
ay
.źródło
Galaretka , 24 bajty
Wypróbuj online!
Oszczędność 1 bajtu dzięki Jonathanowi Allanowi (użyj składni dwóch znaków zamiast cudzysłowów).
źródło
⁾ay
dla bajtu.©
Może pójść poe
ponieważ to jest to, czego przechowywania. MamØẹØḄ,żṙ€¥1ẎyṙḢe©ØḄƊ®⁾ayẋ
.> <> ,
9492 bajtyWypróbuj online!
Edycja: Zapisano 2 bajty, przyjmując mod wprowadzania 97 zamiast 32, aby słownik mógł rozpocząć się na początku wiersza. Poprzednia wersja:
źródło
Czerwony , 149 bajtów
Wypróbuj online!
Jak (prawie) zawsze najdłuższy wpis
źródło
F # (mono) , 197 bajtów
Wypróbuj online!
źródło
Perl 5 , 56 bajtów
Wypróbuj online!
źródło
-
s pomiędzyc
id
lubg
ah
?<s>58</s> 56 bytes
w nagłówku i wiele osób dodaje „Edytuj: Zapisano 2 bajty dzięki @Neil”. lub niektóre takie, gdy pomagają im w komentarzu.Dyalog APL (SBCS), 57 bajtów
Wypróbuj online!
Pobiera dane tylko dużymi literami! (Ponieważ
⎕A
to wielkie litery)⎕A{(⍺~⍵)⍵}'AEIOU'
: Wektor spółgłosek i samogłosek(⊂⍵⍳⍨∊a)⌷∊1⌽¨a
: Wykorzystuje indeksy każdej litery słowa w normalnym alfabecie (⊂⍵⍳⍨∊a
) do indeksowania (⌷
) do szyfru∊1⌽¨a
.('AY',⍨1⌽⊢)⍣(∊/⊃¨⍵a)
: Przenosi pierwszą literę na koniec i dodaje „AY”, jeśli pierwsza litera jest spółgłoską.Dzięki za fajne wyzwanie!
źródło
JavaScript (SpiderMonkey) , 107 bajtów
Wypróbuj online!
Oczekuje wprowadzania małymi literami.
Zastępuje każdy znak łańcucha na
'aeiouabcdfghjklmnpqrstvwxyzb'
następny znak w łańcuchu , a następnie piglatynuje cokolwiek za pomocą początkowej spółgłoski.źródło
PHP, 112 bajtów
lub
zakładaj małe litery. Uruchom jako potok z
-nR
lub wypróbuj je online .Równie dobrze możesz użyć
strtr($s,uzbcadfgehjklminpqrsotvwxy,range(a,z))
zamiaststrtr($s,range(a,z),ecdfighjoklmnpuqrstvawxyzb)
.źródło