Odprawa
Obcy osiedlili się na ziemi i, o dziwo, ich alfabet jest dokładnie taki sam jak nasz. Ich język jest również bardzo podobny do naszego z kilkoma bardzo wyraźnymi i łatwymi do obliczenia różnicami.
Wyzwanie
Weź ciąg i wypisz odpowiednik języka obcego. Tłumaczenie działa jako takie:
Zamień wszystkie samogłoski w słowie na odpowiednie:
Vowel | With
--------+--------
a | obo
e | unu
i | ini
o | api
u | iki
Możesz także napisać innego tłumacza, który przetłumaczy Alien-> angielski, jest to jednak opcjonalne.
Przykłady
Input: Shaun
Output: Shoboikin
Input: Java
Output: Jobovobo
Input: Hello, World!
Output: Hunullapi, Wapirld!
Jeśli samogłoska jest pisana wielką literą, to pierwsza litera jest pisana wielką literą.
Input: Alan
Output: Obolobon
Input: Australia
Output: Oboikistroboliniobo
Zasady
- Obowiązują standardowe luki
- Musi działać w przypadku tekstu zawierającego nowe wiersze
Możesz napisać funkcję, lambda lub pełny program
Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!
Odpowiedzi:
Haskell,
10091 bajtówźródło
TI-Basic, 173 + 59 + 148 = 380 bajtów
Mam nadzieję, że obcy używają kalkulatorów TI-83/84;)
Program główny, 173 bajty
BONUS: Zachowaj drugą lub trzecią linię w zależności od tego, czy chcesz tłumaczenie zwykłe czy zwrotne.
Podprogram (
prgmQ
), 59 bajtów:Podprogram (
prgmR
), 148 bajtów:PS
~
reprezentuje token0x81
i@
reprezentuje token0x7F
, dowiedz się więcej tutaj .PPS Część dlaczego te programy mają wysoką Liczba bajtów jest dlatego
sub(
,inString(
,length(
, a wszystkie litery małe są dwa bajty każdy ...źródło
prgmR
iprgmQ
w nagłówkach kodowych raz?Perl, 56 bajtów
Obejmuje +1 dla
-p
Podaj dane na STDIN
alien.pl
:Działa tak, jak pokazano, ale zamień
\xXX
ucieczki na rzeczywistą postać, aby uzyskać wynikźródło
sed 89
źródło
Python,
999593 bajtówNa ideone.com ...
Dość proste. Wystarczy wziąć indeks, w którym znajdujemy każdy znak na liście samogłosek, i użyć go, aby wyciągnąć trzy potrzebne nam znaki. Jeśli nie zostanie znaleziony,
.find()
zwraca,-1
więc po prostu przyklej bieżący znak na końcu łańcucha. Spacje są konieczne, więc żadna litera"a"
nie zawiera dodanegoc
. Przetłumaczone samogłoski są pogrupowane według kolejności liter (pierwsza litera każdego tłumaczenia, potem druga, potem trzecia).źródło
["aeiouAEIOU".find(c)::11] for
05AB1E ,
282720 bajtówWypróbuj online!
Unuxplobonobotiniapin
źródło
PHP, 91 bajtów
źródło
Python, 129 bajtów
Zobacz, jak działa na ideone.com
Oto ładniej sformatowana wersja:
Najciekawsze są te części,
{ ... }.get(l.lower(), l)
które próbują wyszukać literę zapisaną wl
słowniku jako skonwertowane na małe litery i albo zwraca przetłumaczoną wersję (jeśli została znaleziona), albo oryginalną literęi
[str, str.capitalize][ord(l) < 91]( ... )
sprawdza, czy oryginalna litera była wielką literą ( Punkt kodu ASCII niższy niż 91), a następnie wywołujestr()
funkcję z literą jako argumentem (jeśli nie jest wielką literą, nic nie robi) lubstr.capitalize()
funkcją (konwertuje pierwszą literę ciągu argumentu na wielkie litery).źródło
C (gcc) ,
150 141 136134 bajtówWypróbuj online!
Na podstawie odpowiedzi @algmyr i -8 dzięki @ ASCII-only
Wersja mniej golfowa
źródło
a;l;i;e(char*n){for(char*v=" AEIOU",*t;i=*n++;printf("%c%c%c"+4*!a,(a?" OUIAI"[a]:i)|i&32," bnnpk"[a]," ouiii"[t=index(v,i-32*l),a=t?t-v:0]))l=i>96;}
a;l;i;e(char*n){for(char*v="AEIOU",*t;i=*n++;printf("%c%c%c"+4*!a,(a?" OUIAI"[a]:i)|i&32," bnnpk"[a]," ouiii"[t=index(v,i&95),a=t&&t-v<5?t-v+1:0]));}
a;l;i;e(char*n){for(char*v=" AEIOU",*t;i=*n++;)printf("%c%c%c"+4*!a,a?" OUIAI"[a]|i&32:i," bnnpk"[a]," ouiii"[t=index(v,i-i/96*32),a=t?t-v:0]);}
Partia, 215 bajtów
Pobiera dane wejściowe na STDIN. Przetwarzanie znak po znaku ma tę zaletę, że rozróżnia małe i wielkie litery.
źródło
Pyth, 42 bajty
Program, który pobiera dane wejściowe na STDIN i drukuje dane wyjściowe.
Wypróbuj online
Jak to działa
źródło
C, 167 bajtów
Naprawdę nie chciałem zerwać z nawykiem wykonywania głównych funkcji podczas kodowania C, ale jest to znacznie krótsze niż wersja z głównym i w ten sposób otrzymałem kolejną literę, aby przeliterować to, co chciałem!
Grał w golfa
Skomentował
Jest coś wyjątkowego w C i jak okropnym możesz być ze wskaźnikami i tym podobne.
źródło
Siatkówka oka , 60 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Wypróbuj online!
źródło
JavaScript (ES6),
949392 bajtyZapisano 1 bajt dzięki edc65
Zapisano 1 bajt dzięki Neil
Próbny
źródło
.indexOf
i.search
użyć~
zamiast<0
s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])
który wciąż ma 93 bajty. Ale ponieważc
obecnie jest znana jako samogłoska, możesz teraz użyćsearch
zamiastindexOf
zapisać bajt!Java 8, 172 bajty
bez golfa:
I Alien wraca do angielskiego (171 bajtów):
Nie golfowany:
źródło
Tcl, 75 bajtów
Ciąg do przetłumaczenia znajduje się w zmiennej
s
.źródło
Mathematica, 128 bajtów
Nie jestem pewien, czy krótszy program można uzyskać, używając
IgnoreCase->True
razem ze sprawdzaniem wielkości liter.źródło
C 178 bajtów
źródło
C,
163162159 bajtówźródło
char*t="aeiou";
do pętli oszczędza 1 bajtC #,
133121 bajtówEdytuj (dzięki
milk
)dziękuję :) Tak naprawdę znam to przeciążenie, ale jakoś całkowicie zapomniałem o tym pisząc ..
źródło
Select(char, int)
przeciążenia, więc nie musisz deklarowaći
i możesz umieścić wszystko w jednym wierszu.s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
C,
207202 bajtów (dzięki Cyoce)1) Nienawidzę pomijać typu przed jakimikolwiek deklaracjami
2) Nie bardzo lubię umieszczać bezużyteczny kod (bez funkcji main ())
Stosowanie:
źródło
(c=getchar())!= EOF
może zostać~(c=getchar())
Swift 2,2 196 bajtów
¯ \ _ (ツ) _ / ¯
Grał w golfa
unGolfed
źródło
var r = [
konieczne?Perl 6 ,
8482 bajtówRozszerzony:
Stosowanie:
źródło
C - 192 bajty
(dodano nowe linie dla zachowania przejrzystości)
Po prostu tabele wyszukiwania i przełącznik boolowski.
Wyszukaj każdą literę w tabeli (ciąg) samogłosek; jeśli zostanie znaleziony, zmodyfikuj go zgodnie z regułą w tabeli
s
. Wydrukuj każdy znak, a następnie ciąg: jeśli znaleziono samogłoskę, wydrukuj znak zmodyfikowany wartością,s
a następnie resztą sylaby przechowywanej w tabelif
; jeśli nie znaleziono samogłoski, wydrukuj oryginalny znak i pusty ciąg.źródło
Ruby,
10293918878 bajtówWyjaśnienie:
Wykonaj wiersz jak
ruby -pe "gsub(/[#{b='aeiouAEIOU'}]/){'obounuiniapiikiOboUnuIniApiIki'[b.index($&)*3,3]}"
na przykład typ następnego, na przykład,Australia
powinien wypisać:Oboikistroboliniobo
.Jest to dość proste, zamień wszystkie samogłoski na podłańcuch oparty na indeksie samogłoski, która ma zostać zastąpiona w (b), razy 3 i kolejnych 3 znakach w ciągu tłumaczenia.
źródło
b
do funkcji Regexp (/[#{b=...}/
).p $*
jest niepotrzebna-p
flagi, aby zapisać dodatkowe bajty.ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
-pe
). Jak zdobyć 71?TI-BASIC,
201197195 bajtówPomyśleć, że znajdę tutaj kolejną odpowiedź TI-BASIC!
W każdym razie, wejście jest w języku angielskim
Ans
.Dane wyjściowe to przetłumaczony ciąg.
Przykłady:
Objaśnienie:
(Dodano nowe linie dla zwiększenia czytelności. Wiele linii z tej samej linii będzie oznaczonych przez
:
w poniższym bloku kodu).Uwagi:
TI-BASIC jest językiem tokenizowanym. Liczba znaków nie jest równa liczbie bajtów.
Małe litery w TI-BASIC mają po dwa bajty.
źródło