Zauważyłem, że istnieje nieproporcjonalna liczba języków komputerowych opartych na języku angielskim. Proponuję to naprawić, tłumacząc istniejące języki komputerowe na języki obce!
- Wybierz język komputera, który używa angielskich słów kluczowych / funkcji
- Wybierz dowolny naturalny * język inny niż angielski
- Napisz program, który tłumaczy własny kod źródłowy lub dowolny inny program napisany przy użyciu tego samego podzbioru słów kluczowych / funkcji na inny język
- Opublikuj kod źródłowy i wynik (przetłumaczony kod)
Rozpocznij swój post od czegoś takiego jak:
BASIC, francuski
lub
PODSTAWOWY, francuski - FONDAMENTAL
Nie musisz tłumaczyć nazwy języka, jeśli nie chcesz, to tylko dla zabawy!
Nie musisz tłumaczyć wszystkich słów kluczowych / funkcji na wybrany język, tylko te, których faktycznie używasz w kodzie źródłowym. Na przykład PHP ma tysiące, więc zdecydowanie nie musisz tłumaczyć ich wszystkich! Ponadto, jeśli używasz komentarzy, postaraj się je przetłumaczyć! Po zakończeniu programu nie powinno być żadnych rozpoznawalnych angielskich słów, chyba że są one odpowiednie dla języka obcego. Słowa w ciągach znaków również powinny zostać przetłumaczone (co oznacza, że Twój przetłumaczony program nie będzie już działał z angielskim kodem źródłowym, nawet jeśli można go uruchomić!). Mam nadzieję, że twój program będzie miał jakiś sens dla programisty, który mówi w innym języku!
Na przykład if () {} elseif () {} else {}
może zostać si () {} sinonsi () {} sinon {}
po francusku! Jeśli były tłumaczenia Perl elsif
język francuski, może chcesz upuścić drugą n
drogę drugi e
jest upuszczony w języku angielskim: sinosi
. W języku francuskim indziej byłoby bardziej prawdopodobne być autre ale alternatywą sinon ( lub inny , inaczej ) czuje ładniejszy do mnie!
Bądź kreatywny! Spróbuj uchwycić zarówno język komputera, jak i języki naturalne! Nie można używać języków takich jak Brainfuck, CJam itp., Które nie mają angielskich tokenów. Języki takie jak BASIC lub COBOL są znacznie bardziej odpowiednie. Używaj znaczących nazw zmiennych i tłumacz je, chyba że twój język nie obsługuje nazw zmiennych, które mogą być wyrazami angielskimi.
Możesz opublikować wiele odpowiedzi, po jednej dla każdej kombinacji języka komputerowego / naturalnego. Do tłumaczenia nie wolno używać biblioteki ani zewnętrznego narzędzia! Twój kod powinien sam wykonać tłumaczenie, a nie wywoływać czegoś, co wykonuje tłumaczenie! To nie jest Code Golf! Jeśli twój program pobiera jakieś dane wejściowe, musi to być tylko własny kod źródłowy, jeśli odczytuje z dysku, może to być tylko plik źródłowy itp.
* Na potrzeby tego wyzwania uznam Esperanto, Lojban, Volapük, Interlingua itp. Za języki naturalne. Nie możesz wymyślić własnego języka dla tego wyzwania!
Dodałem regułę, aby zapobiec wyraźnym quinesom. Możesz wybrać dowolny podzbiór słów kluczowych / funkcji - nawet wszystkie - do przetłumaczenia. Twój program musi być w stanie przetłumaczyć się jako minimum, tzn. Jeśli twoje oryginalne źródło zawiera słowo, print
to dodanie print(42)
dowolnego kodu wejściowego (nie samego programu) powinno nadal dawać poprawne wyniki.
Na przykład:
function translate() {
...
}
print(translate());
może stać się
fonction traduire() {
...
}
imprimer(traduire());
Jeśli wejście zostanie zmienione na
print(42);
function translate() {
...
}
print(translate());
print(42);
dane wyjściowe powinny następnie stać się
imprimer(42);
fonction traduire() {
...
}
imprimer(traduire());
imprimer(42);
źródło
Odpowiedzi:
Python, Koine Greek - Πύθων
Mój ulubiony język programowania, w moim ulubionym języku obcym - idealnie! I nie szkodzi, że nazwa jest już grecka .
Program tłumaczący w Pythonie 3 (dzięki Bogu za natywną obsługę Unicode):
Wyniki uruchomienia kodu na sobie (zredagowaną dużą listę tłumaczeń):
Koine Greek ma 2000 lat, więc fajnie było tłumaczyć terminy programowania. Oto kilka moich ulubionych:
file
)print
)input
)import
)encoding
)code
/replacements
)for ... in
)if ... elif ... else
)re
to ῥλWiększość słów można również znaleźć, przeszukując Wikisłownik .
Niektóre inne istotne cechy:
print
,read
,replace
). Podejrzewam, że starożytni Grecy czuliby się trochę głupio rozmawiając z komputerem w ten sposób, dlatego nadałem im wszystkie nakazy trzeciej osoby : „musi drukować”, „musi czytać”, „musi zastępować”.·
).utf
zmienia się w -ουτφ
co brzmi jak „ootf”, jeśli spróbujesz to wymówić.To wciąż pozostawia wiele do życzenia pod względem gramatycznym. Grecki jest językiem znacznie bardziej odmiennym niż angielski, a mój kod nie jest wystarczająco zaawansowany, aby poprawnie uporządkować wszystkie liczby i liczby. Na przykład ἕκαστον παλαιόν, νέον ἐκ νεόλογοι powinien czytać ἐκ νεολόγ ων , z przedmiotem przyimka w dopełniaczu. Jednak nie jestem o umieścić że dużo czasu na to! Wygląd jest wystarczająco grecki (przynajmniej dla niewprawnego oka), a wysokie okresy stanowią miły akcent. Podsumowując, jestem bardzo zadowolony z wyników.
źródło
νεόλογοι = [...]
. Czy możesz wstawić tylko kilka linijek? Nie potrzeba całej listy!Words in strings should be translated too
.Kurczak , Chiński - 鸡
Kurczak jest znacznie trudniejszy w użyciu niż myślałem.
Nie ma końca nowej linii. Ale finał
chicken
służy tylko do oznaczenia końca tego programu, który można zastąpić pustą linią.Używam tego interpretera , który drukuje dodatkowy znak nowej linii i nie można go stłumić. Wyjście ma więc o jedną linię więcej niż oryginał, co może spowodować uszkodzenie programu Chicken. Mam nadzieję, że to nie spowoduje, że będzie nieważny.
Wykorzystał pewne sztuczki, takie jak uzyskanie pustych ciągów z indeksu -1 wejścia i wykrycie EOF przez porównanie z pustymi ciągami. Użyłem również tego
compare
polecenia, aby odrzucić nieużywane przedmioty ze stosu, nie dbając o typ. Mogą nie działać u innych tłumaczy. I drukuje ciąg jako bajty UTF-8, gdzie inni tłumacze mogą bezpośrednio drukować znaki Unicode.Użyj tego polecenia, aby uruchomić ten kod:
tam gdzie jest to dość dziwne, pierwszy
file
służy do wprowadzania danych, a drugi do kodu.Dane wyjściowe (Chińczycy nie używają spacji między słowami):
Program ten zastępuje
h
się鸡
, pozostawia nienaruszone nowe linie, a ignoruje wszystko inne.Jak widać, może przetłumaczyć każdy prawidłowy program Chicken.
źródło
C ++, Latin - C Plus Plus
Tak, to jest rzeczywiste tłumaczenie nazwy języka. Nie mieli znaku plus, ale dali nam słowo plus.
Uwagi:
const
,enum
,int
, ioperator
nie zmieni. Teraz oznaczają constante , enumeratum , integrum i operator ._
słowa, więc użyłem interpunkcji .Wynik:
źródło
JavaScript (NodeJS) - hebrajski
Moja metoda kodowania jest bardzo podobna do programu DLosc w Pythonie : czyta kod źródłowy, ma listę tokenów i uruchamia wyszukiwanie i zamienianie.
Daje to następujące dane wyjściowe:
Niestety SE nie lubi tekstu RTL. Próbowałem ręcznie owinąć powyższy blok kodu
<pre dir="rtl">
, ale został on po prostu usunięty. :( Kod powinien wyglądać tak: (zrzut ekranu gedit)Kilka uwag na temat tekstu hebrajskiego:
var
, które tłumaczyłem jakoמש'
skrót od „משתנה” (zmienna).fs
, akronim „systemu plików”, został przetłumaczony jakoמ"ק
pierwsze litery „מערכת קבצים”, jak pokazano powyżej.toString
. W języku hebrajskim przyimki to pojedyncze litery, które są poprzedzane słowem. Jeśli więc „string” to „מחרוזת”, „to string” to „למחרוזת”. Dlatego też wfor..in
blokuin
token zawiera spację, dzięki czemu zostaje dołączony do następnego słowa (word in words
staje sięמילה במילים
).regex
, zwróciło mi to ביטוי סדיר, co dosłownie oznacza „uporządkowane wyrażenie”. Łał! Skróciłem to do ביטס"ד, jak JS'sRegExp
.g
Flag regex przetłumaczyłem jako ע”, co oznacza עולמי, globalnej.new
. Jest tak, ponieważ w języku hebrajskim przymiotniki (takie jak „nowy” - „חדש”) występują po rzeczowniku (np. Wyrażenie regularne). Zamiastnew RegExp()
tego byłoby to „RegExp [to jest] new ()`.Ten kod z pewnością nie tłumaczy każdego poprawnego programu JS. W rzeczywistości prawdopodobnie tylko to tłumaczy. Ale to wystarczy do tego wyzwania. ;)
Nawiasem mówiąc, jeśli interesujesz się hebrajskim, skorzystaj z propozycji Hebrew.SE (i głosuj na pytania z wynikiem <10)! (źródło: stackexchange.com )
źródło
T_PAAMAYIM_NEKUDOTAYIM
obejmuje !Perl, PigLatin - erlPay
Po pierwsze, rzeczywisty program jest bardzo krótki, więc aby zademonstrować, jak się zachowuje w dłuższych sekcjach tekstu, podałem trochę Perl Poetry jako kolejny przykład wejścia / wyjścia. Ponieważ poezja jest zawarta po wierszu END , tak naprawdę nie zostaje wykonana.
Rzeczywisty algorytm jest dość prosty:
Dane wyjściowe z uruchomienia samego programu:
źródło
__DENAY__
. Nie powinnoopenay
iacceptay
byćenopay
iceptacay
?Visual Basic .Net, perski
Wybrałem pełny język, więc byłoby trudniej. Okazuje się, że nie musiałem zmieniać gramatyki. Perska forma kodu jest równie wyczerpująca.
Wynik wymaga edytora tekstu od prawej do lewej.
Nie mogłem wyświetlić go tutaj poprawnie. Ale gdybym miał , aby go wyświetlić, to jest tutaj.Oto zdjęcie:Uwaga: Czyta z pliku o nazwie Persian.txt i wysyła do code.txt. Nie mogłem zmusić okna konsoli do pisania lub czytania w języku perskim bez zamiany znaków zapytania. (np. czteroliterowe słowo zamieniłoby się w ????)
Uwaga:
jeśli połączysz ze sobą słowa w języku perskim, będzie to prawie nieczytelne, ponieważ litery łączą się ze sobą i otrzymują inną formę. Musiałem więc oddzielić je spacjami, co spowodowało, że słowa miały spacje. Słowo takie jak Import zamieniło się w وارد کردن, czyli dwa słowa.źródło
Java, niemiecki - Java
Ten program jest naprawdę prosty.
Po prostu odczytuje plik podany jako pierwszy argument i zastępuje wszystkie wystąpienia słowa w języku angielskim odpowiednim tłumaczeniem na język niemiecki.
Używam wyrażenia regularnego z dwiema grupami (
([^a-zA-Z\\d:])*
), aby dopasować pojedyncze elementy poprzedzone / poprzedzone znakiem niealfanumerycznym. To rozwiązało problem z nakładającymi się tłumaczeniami (eng.List
-> ger.,Liste
Ale potemListe
stałby sięListee
). Użycie$1
/$2
dodaje te znaki z powrotem i pozostawia nam przetłumaczony kod źródłowy.Aktualizacja 1:
Używać skrótów takich
ea
,nbea
itp przestrzegać konwencji nazewnictwa Java w języku niemieckim.Aktualizacja 2:
Teraz używa trzeciego komponentu w tablicy do zerwania po pierwszej wymianie. Jest to konieczne dla mojego oszukańczego podejścia do deklinacji / koniugacji.
class
/Klasse
jest kobietą w języku niemieckim ivoid
/nichts
jest neutralny, więc po prostu pominąłem tę drugą i zastąpiłem ją później. Kolejną edycją jestnew
tłumaczenie, do którego zwrócono się,neue
ponieważ używam go tylko w wersjiString
damskiej.Aktualizacja 3:
Prawidłowo radzisz sobie z pisaniem wielkimi literami, dodając wyrażenia regularne z rozróżnianiem wielkości liter.
To powoduje, że
System.out
:Jeśli masz jakieś ulepszenia w kodzie lub tłumaczeniu, daj mi znać, a ja zobaczę, czy mogę je wdrożyć.
źródło
/
,
I-
prawdopodobnie nie są dobre w identyfikatorów.Eingabe/Ausgabe
jakoś skracają - możeEinaus
?Einaus
też byłoby możliwe, ale myślę, że to nie jest w porządku.Rein/Raus
wydawałoby się również możliwe, ale znowu nie wydaje się dobrym tłumaczeniem.E/A
lub podobne może powodować problemy, ale nie są one interpretowane jako wyrażenie regularne, są tylko dopasowane, a zatem nie wpływają na wyrażenie regularne. (Mogę się mylić, ale właśnie tego doświadczyłem z wyrażeniami regularnymi)Julia, tatarski - Julia
Wykorzystuje to nieoficjalny alfabet zamanälif oparty na łacinie dla İdel-Ural Tatar, ustanowiony w 2001 r. Jednak w 2002 r. Federacja Rosyjska skreśliła wniosek Tatarstanu o uczynienie Zamanälif oficjalnym alfabetem dla języka tatarskiego, uznając za przestępstwo oficjalne użycie dowolnego alfabet inny niż cyrylica.
W minionym stuleciu dla języka tatarskiego istniało 5 alfabetów:
Zdecydowałem się na Zamanälif, ponieważ myślę, że mój dziadek byłby rozczarowany, gdyby użyłem Cyrylicy. Jego pierwszym językiem jest tatarski, a ponieważ urodził się w latach dwudziestych, nauczył się czytać i pisać alfabetem iske imlâ.
Język angielski:
Tatar:
Zrobiłem kilka swobód, aby tłumaczenie było trochę czystsze. Na przykład
for
stał sięsaen
, co przekłada się bardziej dosłownie na „każdy”. Nie skróciłem teżSüzlek
, co oznacza „słownik”.ukırgaböten
, moje tłumaczenie dlareadall
, toukırga
(czytaj) +böten
(wszystkie / wszystkie).başägär
, moje tłumaczenie dlaelseif
, tobaş
(skrót odbaşkaça
, co oznacza „else / else”) +ägär
(if).Jeśli ktokolwiek na PPCG zna tatarski, prawdopodobnie wiesz więcej niż ja. Wszelkie sugestie będą mile widziane.
źródło
Rdza , białoruski (Ржа)
Program:
Wynik:
źródło
DogeScript , hiszpański - El Código del Perro
DogeScript jest interpretowany do JavaScript, więc każdy prawidłowy JS jest prawidłowym DogeScript. Tłumaczenie, które tu podałem, w rzeczywistości obejmuje całą specyfikację słowa kluczowego (plus trochę więcej na słowa użyte w programie).
"Język angielski":
Hiszpański:
Możesz zauważyć, że podjąłem kilka swobód w tłumaczeniu. Wynika to częściowo z tego, że mój hiszpański jest raczej słaby, a częściowo z powodu mojej znajomości memów w języku hiszpańskim.
źródło
C #, Latin - C Acutus
Odczytuje plik z argumentów wiersza poleceń, zapisuje na output.txt.
Przykład:
Cholera, właśnie widziałem wersję C ++ Latin.
źródło
s/ToLatin/AdLatinam/
... też nie powinnoargs
byćargumenta
(nijakie w liczbie mnogiej)?System
Ratio
po łacinie? Jaki jest stosunek po łacinie?ratio
->ratione/proportio
Ruby, japoński - AkaDama
Ruby po japońsku to rubii (ル ビ ー), co jest nudne, więc nazwałem go dosłownie czerwonym klejnotem .
W Rubim zmienne i metody nie są ograniczone do ASCII, więc coś w tym rodzaju
jest ważny rubin. Używam tego w jak największym stopniu
do zaciemnianiawszystkich twoich baz.Mam nadzieję, że można używać klejnotów do parsowania rubinu, wciąż wymagało to brzydkiego łatania małp.
Możesz rozwinąć,
TRANS_TABLE
aby dodać tłumaczenie, aby uzyskać więcej metod. Wszystko, czego nie ma w tabeli, jest „tłumaczone” na japoński luźno na podstawie jego wymowy (lub bardziej jak pisownia), więc jedzenie staje się え あ と („a-ah-toe”).Konwertuje liczby całkowite na „bardzo” praktyczny zapis .
Uruchom na sobie, pomijając niektóre tabele tłumaczeń itp .:
lub
staje się
źródło
HTML5 / JavaScript na francuski (HTML5 z Script au Caoua)
Wynik:
źródło
JavaScript, francuski - CauoaScript
Wiem, że jest już odpowiedź JavaScript + francuski, ale moja używa różnych tłumaczeń i metod kodowania.
Kod jest dość prosty: iteruje wszystkie słowa w kodzie wejściowym i zastępuje je odpowiednim słowem francuskim z
translations
obiektu. Jeśli słowa nie ma na liście, nie ulega zmianie.Francuski używa « gilematów » zamiast cudzysłowów, więc najpierw używa tych ciągów. (Tak, do analizowania ciągów używa regu͘͜l̴͝a͘͜͠r͏͏ ̶̸͢e̵͜x̵͞͞pr̵͞͞e̵s̵ś̸̷i͝o̴ns̴͜, więc nie zawsze działa idealnie.) Oto dane wyjściowe po uruchomieniu na sobie:
Możesz użyć poniższego fragmentu stosu, aby łatwo uruchomić kod.
Pokaż fragment kodu
źródło
Commodore 64 BASIC - bośniacki / chorwacki / serbski
To faktycznie zastępuje BASIC słowa kluczowe z przetłumaczonymi, więc ty
mogąnależy ich użyć podczas pisania nowego kodu.Jak to działa?
FOR I=40960 TO 49151:POKE I,PEEK(I):NEXT
Chociaż wydaje się, że ta linia nie robi wiele, w rzeczywistości kopiuje bajty z BASIC ROM do RAM. Dane zapisane w lokalizacji ROM są przechowywane w pamięci RAM pod tym samym adresem.
Ostatni wiersz w programie przełącza się na kopię RAM BASIC:
POKE 1,PEEK(1) AND 254
Adresy pamięci 41118-41373 zawierają pełną listę zastrzeżonych słów kluczowych BASIC. Znaki ASCII tych słów są przechowywane w kolejności numerów żetonów. Bit nr 7 ostatniej litery każdego słowa jest ustawiony tak, aby wskazywał koniec słowa (wartość ASCII + 128).
Wiersze 20–100 zawierają przetłumaczone słowa kluczowe. Linie 110-200 czytają słowa kluczowe w pamięci, jak opisano powyżej.
źródło
PHP - portugalski (pt-PT / semi pt-BR)
Okazało się to dość złożone i gigantyczne!
Pamiętaj, że ten kod został dopasowany do siebie! Może częściowo współpracować z innymi kodami.
Dane wyjściowe, przetłumaczone:
Starałem się szanować gramatykę tak bardzo, jak to możliwe.
Przykład znajduje się w pierwszej linii:
Echo to akcja, a akcje są czasownikami. Wszystkie czasowniki w języku portugalskim kończą się na
r
.Tłumaczenie
echo
bez kontekstu byłobyeco
, podczas gdy w kontekście musi byćecoar
(„echo”).Ponadto funkcja
preg_replace_callback
ma unikalną cechę.Akcja musi być pierwszym słowem.
Przetłumaczone dosłownie, byłoby
expressão_regular_substitui_executável
, co jest strasznie przetłumaczone! (To znaczyreplace the callback using a regular expression
)Dlatego należy zachować szczególną ostrożność i zamienić pierwsze i drugie słowo, tak więc jest
substituir_expressão_regular_executável
to trochę lepsze.Inne funkcje, takie jak
count
, są pozostawione bezr
detonacji rozkazu (tak jakbyś był szefem).Niektóre słowa okazały się dziwne ...
string
znaczycorda
, ale gdybym je poprawnie przetłumaczył, tak by byłocadeia contínua/ininterrupta de caracteres
.Aby dodać na to wszystko, mam przetłumaczone także kilka symboli i operatorów (
$
,=
,=>
).Dziękuję @DLosc za pomysł przetłumaczenia
$
na€
.źródło
$
, podobnego do tego, co zrobił ten język .Fondamentale Visuale .RETE - Visual Basic .NET, przetłumaczony na język włoski
Program jest bardzo prosty (ma na celu tłumaczenie).
Kilka punktów:
I / O: jest to moduł z oczywistą funkcją do wywołania
gramatyka jest w większości poprawna (wydaje się prawie naturalna)
pozycja słowa w języku angielskim i włoskim jest inna, więc nie mogłem (łatwo) napisać funkcji, aby to naprawić, i preferowałem statyczne pary tłumaczeń
skoniugowałem czasowniki rozkazujące z drugą osobą, ponieważ w dosłownym włoskim tłumaczeniu brzmiałyby i czuły się źle (tak źle, jak Windows 8+ rozmawiający w 1d osoby)
pary tłumaczące są zaciemnione, więc angielskich również się nie tłumaczy. więc jeśli byłby tłumacz, przetłumaczony program działałby,zostawiłem tylko kilka,"+"
aby uniknąć nadmiaru tłumaczeń (wiele angielskich słów jest zawartych we włoskich, więc skończyłoby się tłumaczeniem włoskiego na włoski z powieleniem sufiksów)Włoski, zaczynamy!
Wynik sam w sobie:
źródło
"Mod" + "ule"
. Spróbuj celować bardziej w ducha wyzwania niż w literę.C, hiszpański - C
Wejście / wyjście poprzez STDIN / STDOUT (użycie
./c-spanish < c-spanish.c
).Jeśli
extra = 0
zmieni się naextra = 1
, wówczas wyjście tego programu jest zasadniczo wzajemnym quine. W przeciwnym razie wyjście jest kompilowalnym programem w C, który działa podobniecat
.Konieczne są dodatkowe spacje w źródle (ponieważ są one zastąpione znakami w wersji hiszpańskiej).
Słowa przetłumaczone:
Wynik
Z
extra = 0
:Z
extra = 1
:źródło
define
to hiszpańskie słowo? Pamiętaj, że Twój kod nie musi działać w oryginalnym języku po przetłumaczeniu, tylko w hipotetycznej przetłumaczonej wersji interpretera / kompilatora.define
jest rzeczywiście słowem w języku hiszpańskim (polecenie drugiej osobydefinir
)Ruby, kataloński - Rubí
Jest to dość krótki kod w Rubim, więc nie jest tak reprezentatywny, ale w nazwach funkcji byłem nieco bardziej gadatliwy, aby pokazać trochę więcej. W tym ćwiczeniu zbyt wiele pamiętałem z zajęć uniwersyteckich, w których używaliśmy podobnego pseudokodu do „programu”.
Stosowane do siebie staje się:
źródło
Eliminat per simplificar codi
to znaczy!Python 3, Lojban
Tam, gdzie musiałem zmienić kolejność miejsc sumti, umieściłem słowa w nawiasach, np. (Te tcidu fe)
Kod:
I jego wydajność:
źródło
read
właśnie się staje(te tcidu fe)
. Czy to ma zrobić coś innego?JavaScript ES6, esperanto, oskavoskripto
Skorzystałem z pewnej swobody dzięki kamuflażowi i sformułowaniom (przetłumaczyłem „konwersja na ciąg” zamiast „na ciąg”). Skomplikuję to później, kiedy będę miał więcej czasu.
źródło