23 Befunges, 713 bajtów
Jedynym językiem, który naprawdę znam, jest Befunge, więc zamiast wielu języków, właśnie wybrałem wiele implementacji Befunge. Uważam, że nadal obowiązuje to zgodnie z zasadami PPCG, które uznają język za definiowany przez jego implementację .
8023/# !-1401p680p88+79*6+1p238*7+0pg90p$#v0';1';+>9%80p$$$$"ph~s"+3vv
vv_2#!>#-/\#21#:+#:>#\<0/-2*3`0:-/2g01g00p>#< 2#0 ^#1/4*:*9"9"p00***<<
>>$:2%3*-4/3g68*-70p1-0`02-3/-03-2%1+2/-70g+80g65+70g`7++3g68*-70g9`*v
0168:0>0133?45130120340200v00:<+8*+76%4p00+5/4:+-*86g3++98/2%+98g09+<<
@>gg#^:#+,#$"!"-#1_@
!Helo Byd!!!!!Hai dunia!!!!Ciao mondo!!!Hallo Wereld!!!!
!Hallo Welt!!!Halo Dunia!!!Halo Dunya!!!Bonjour monde!!!
!Hei Verden!!!Hej Verden!!!Moien Welt!!!Labas pasauli!!!
!Molo Lizwe!!!Salut Lume!!!Hei maailma!!Sveika pasaule!!
!Hello World!!Salom Dunyo!!Tere maailm!!Sawubona Mhlaba!
!Kaixo Mundua!Salamu Dunia!Sannu Duniya!!!!!!!!!!!!!!!!!
Frustrującą rzeczą w Befunge jest to, że chociaż istnieje implementacja referencji typu open source, a sam język jest bardzo prosty, nie ma ani jednego zewnętrznego tłumacza (o którym wiem) dokładnie pasującego do zachowania referencyjnego. Każde wdrożenie kończy się niepowodzeniem w inny sposób.
Na plus daje to nam możliwość opracowania jednego fragmentu kodu, który da inny wynik w prawie każdym tłumaczu. I tego właśnie próbuję w powyższym programie.
Jeśli ktoś jest zainteresowany weryfikacją wyników, próbowałem pogrupować różne implementacje w kategorie w zależności od tego, jak łatwo je uruchomić (np. Niektóre osoby mogą nie być w stanie uruchomić plików binarnych systemu Windows lub mogą nie chcieć kompilacja ze źródła, ale każdy powinien mieć możliwość testowania tłumaczy internetowych).
Tłumacze online
Nie wymaga instalacji. Zwykle jest to tylko kwestia wklejenia kodu i kliknięcia przycisku lub dwóch. Pamiętaj jednak, że niektóre z nich są dość powolne, więc może trochę potrwać, aby zakończyć wykonywanie.
Plac zabaw Befios Alexiosa -
Salamu Dunia!
Kliknij Clear...przycisk i wklej kod w polu wejściowym. Przełącz Editprzełącznik, aby aktywować tłumacza, a następnie kliknij Runprzycisk, aby rozpocząć wykonywanie.
Pamiętaj, że ta strona prawdopodobnie nie będzie działać w przeglądarce innej niż Chrome.
Befungius -
Molo Lizwe!
Wklej kod do pola wejściowego, pamiętając o zastąpieniu istniejącego kodu. Następnie kliknij Runprzycisk, aby wykonać.
Tłumaczka Befunge 93 Davida Klicka -
Sannu Duniya!
Wklej kod w polu wejściowym Playfield , a następnie kliknij Runprzycisk, aby rozpocząć wykonywanie.
Tłumacz Ian Osgooda Befunge-93 -
Salut Lume!
Wklej kod do pola wejściowego pod Showprzyciskiem, upewniając się, że nadpisałeś @
już tam. Kliknij Showprzycisk, aby zaimportować kod, a następnie kliknij Runprzycisk, aby rozpocząć wykonywanie.
jsFunge IDE -
Hej Verden!
Najpierw zamknij okno dialogowe Pomoc , a następnie kliknij przycisk paska narzędzi Otwórz / Importuj (drugi od lewej), wklej kod i kliknij OK. Aby wykonać, kliknij przycisk Tryb uruchamiania (czwarty od lewej), a następnie Start (piąty od lewej).
Należy również pamiętać, że kilka tłumaczy konsolowych jest faktycznie dostępnych w TIO, więc chociaż nie są technicznie tłumaczami online, można je przetestować online. Dla tych, którzy są obsługiwani (obecnie BEF, FBBI, MTFI i PyFunge), zamieściłem Wypróbuj online! link obok ich wpisu.
IDE Java
Będziesz musiał mieć zainstalowane środowisko wykonawcze Java, ale teoretycznie powinny one działać na dowolnej platformie. Testowane tylko w systemie Windows.
Wizualny aplet Befunge Ashleya Millsa -
Moien Welt!
Początkowo był to aplet online, który niestety nie jest już dostępny, ale nadal możesz pobrać słoik i uruchomić go lokalnie jako aplikację komputerową. Musisz wkleić kod w oknie edytora programów , a następnie kliknij Convertprzycisk, a następnie Runprzycisk.
WASABI: Wspaniały Asinine Befunge Interpreter Wasabi -
Hallo Welt!
Aby wkleić kod, kliknij prawym przyciskiem myszy w lewym górnym rogu okna edytora ( musi to być górny lewy górny róg ) i wybierz element menu Wklej . Następnie zaznacz pole wyboru Pełna prędkość (w przeciwnym razie zajmie to wieczność) i kliknij Run!przycisk, aby rozpocząć wykonywanie.
YABI93: Yet Another Befunge93 Interpreter -
Halo Dunia!
Naciśnij Ctrl+ A, Ctrl+, Vaby wkleić kod do okna edytora, pamiętając o zastąpieniu domyślnego źródła. Następnie kliknij Startprzycisk, aby rozpocząć wykonywanie.
IDE systemu Windows
Zazwyczaj potrzebujesz do tego systemu Windows, chociaż w niektórych przypadkach mogą być dostępne pliki binarne dla innych systemów operacyjnych. Nie mogę obiecać, że kod będzie działał na innych platformach.
BefunExec -
Hello World!
Nie możesz wkleić kodu do edytora, więc najpierw musisz go gdzieś zapisać na dysku. Następnie z IDE użyj menu Plik> Otwórz, aby załadować kod z dysku i wybierz menu Symulacja> Uruchom / Pauza, aby go uruchomić.
BeQunge -
Labas pasauli!
Naciśnij Ctrl+, Vaby wkleić kod, a następnie kliknij przycisk paska narzędzi Debugowanie (niebieski tryb), aby rozpocząć wykonywanie. Gdy pojawi się panel Debugger , będziesz chciał ustawić Prędkość na maksimum - przycisk po prawej stronie suwaka - w przeciwnym razie ukończenie zajmie wieczność.
Grzyb -
Tere maailm!
Naciśnij Ctrl+, Vaby wkleić kod, a następnie naciśnij, F5aby go uruchomić.
Visbef: Visual Befunge '93 dla Windows -
Hallo Wereld!
Nie możesz wkleić kodu do edytora, więc najpierw musisz go gdzieś zapisać na dysku. Następnie z IDE naciśnij Ctrl+, Oaby otworzyć przeglądarkę plików i załaduj kod z dysku, i naciśnij, F5aby go uruchomić.
Aplikacje konsoli Windows
Ponownie zazwyczaj wymagają one systemu Windows, chociaż inne platformy mogą być dostępne, ale nie gwarantuje to, że będą działać.
We wszystkich przypadkach kod będzie musiał zostać zapisany w pliku na dysku, a nazwa pliku przekazana do interpretera jako parametr wiersza poleceń ( source.bf w przykładowych wierszach poleceń podanych poniżej). Należy również pamiętać, że niektóre z nich są technicznie tłumaczami Befunge-98 i muszą być uruchamiane z określoną opcją wiersza polecenia, aby wymusić tryb zgodności Befunge-93. Jeśli tego nie zrobisz, nie uzyskasz poprawnych wyników.
BEFI: Tłumaczka Befunge-93 Rugxulo -
Hei Verden!
Wiersz poleceń: bef93w32 -q source.bf
CCBI: Zgodny interpreter Befunge-98 -
Sveika pasaule!
Linia poleceń: ccbi --befunge93 source.bf
MTFI: Magus Technica Funge Interpreter -
Hai dunia!
Wiersz polecenia: mtfi -3 source.bf
( Wypróbuj online! )
Aplikacje konsoli Python i PHP
Wymagają one zainstalowania odpowiedniego języka skryptowego - Python lub PHP.
Befungee -
Helo Byd!
Wiersz poleceń: befungee.py source.bf
PyFunge -
Halo Dunya!
Wiersz polecenia: pyfunge -v 93 source.bf
( Wypróbuj online! )
Bephunge -
Bonjour monde!
Wiersz poleceń: php bephunge.phps source.bf
Aplikacje konsoli tylko do źródła
Będą one musiały zostać zbudowane ze źródła, co zwykle jest najłatwiejsze w środowisku podobnym do * nix. W systemie Windows korzystam z podsystemu Windows dla systemu Linux .
BEF: Dystrybucja referencyjna Befunge-93 -
Ciao mondo!
Wiersz polecenia: bef -q source.bf
( Wypróbuj online! )
cfunge -
Sawubona Mhlaba!
Wiersz poleceń: cfunge -s 93 source.bf
FBBI: Płomienny bydło Befunge-98 Intepreter -
Hei maailma!
Wiersz polecenia: fbbi -93 source.bf
( Wypróbuj online! )
Grzyby -
Kaixo Mundua!
Wiersz poleceń: fungi source.bf
Rc / Funge-98 -
Salom Dunyo!
Wiersz poleceń: rcfunge -93 source.bf
Jak to działa
Wyzwanie polegało na znalezieniu jak najmniejszej liczby testów zapewniających największe rozróżnienie między tłumaczami. Ostatecznie sprowadzono się do czterech głównych sekwencji testowych:
Pierwszy to pamięć poza zakresem odczytana z offsetu -1,1. Teoretycznie powinno to zawsze zwracać 32 (przestrzeń ASCII), ale w praktyce było 10 odmian. Test ten komplikuje fakt, że dwóch tłumaczy ustnych odczytuje się po odczytaniu poza granicami, dlatego do przeprowadzenia tych dwóch testów konieczne było wykonanie kilku specjalnych testów (zaokrąglanie podziałów i mostkowanie przestrzeni).
Druga sekwencja to test funkcjonalności Befunge-98 - w szczególności instrukcji ;
i '
. Prawie wszyscy tłumacze są Befunge-93 lub działają w trybie zgodności Befunge-93, więc powinni po prostu zignorować te instrukcje. W praktyce istniało 6 różnych sposobów interpretacji tej sekwencji.
Trzeci test sprawdza zasięg komórek pamięci. W interpretatorze referencyjnym komórki pamięci są podpisane 8-bitowe, ale inne implementacje różnią się w zakresie od 8-bitowych do nieograniczonych, niektóre podpisane, a niektóre niepodpisane. Jednak do celów tego testu musieliśmy jedynie rozróżnić 5 z tych wariantów.
Czwarta i ostatnia sekwencja to połączenie testów niedomiaru i ujemnego podziału. Istnieje wiele sposobów, w jakie tłumacze popełniają błąd niedomiaru, i istnieją co najmniej 3 różne sposoby implementacji instrukcji podziału i modulo, ale tutaj były tylko 3 kombinacje.
Każda z tych sekwencji zwróciła jedną liczbę, a te cztery liczby zostały połączone (za pomocą niektórych podstawowych tabel arytmetycznych i translacyjnych), aby uzyskać końcową wartość z zakresu od 0 do 22. Tę wartość można następnie wykorzystać jako indeks do wyszukania rzeczywistej wiadomości wystawić.