Chociaż> <> nie jest popularnym językiem, może być dobry do gry w golfa i został użyty na tej stronie. Został zainspirowany Befunge i ma pewne podobieństwa w instrukcji.
Wymagane polecenia:
> < ^ v
Zmienia kierunek wskaźnika instrukcji (w prawo, w lewo, w górę, w dół)
/ \ | _ #
Lustra; wskaźnik zmieni kierunek w zależności od tego, jaki kierunek ma już.
x
Losowy kierunek.
+ - * , %
Dodawanie, odejmowanie, mnożenie, dzielenie i modulo odpowiednio. Zrzuca A i B ze stosu i wypycha operatora B A. Podział o 0 powoduje błąd.
0-9 a-f
Pcha odpowiednią wartość na stos. a = 10, ..., f = 15
=
Wyskakuje A i B ze stosu i wypycha 1, jeśli B = A, a 0 w przeciwnym razie.
)
Lepszy niż. Zrywa A i B ze stosu i wypycha 1, jeśli B <A
(
Mniej niż. Zrzuca A i B ze stosu i wypycha 1, jeśli B> A
' "
Włącza analizowanie ciągu. Analiza ciągów wypycha wszystkie znalezione znaki na stos, dopóki nie znajdzie cudzysłowu zamykającego.
!
Pomija następującą instrukcję.
?
Pomija następującą instrukcję, jeśli wierzchołek stosu wynosi zero lub stos jest pusty. (uwaga: to niczego nie zrywa ze stosu!)
:
Duplikuje najwyższą wartość na stosie.
~
Usuwa najwyższą wartość ze stosu.
$
Obraca odpowiednio 2 najwyższe wartości na stosie zgodnie z ruchem wskazówek zegara. (np. jeśli twój stos wynosi 1,2,3,4, spowoduje to 1,2,4,3)
@
Obraca odpowiednio 3 górne wartości na stosie zgodnie z ruchem wskazówek zegara. (np. jeśli twój stos wynosi 1,2,3,4, spowoduje 1,4,2,3) Zrzuca
&
najwyższą wartość ze stosu i umieszcza ją w rejestrze. Wywołanie & ponownie weźmie wartość z rejestru i odłoży ją z powrotem na stos.
r
Odwraca stos.
}
Przesuwa stos w prawo / obraca cały stos zgodnie z ruchem wskazówek zegara (np. 1,2,3,4 staje się 4,1,2,3
{
Przesuwa stos w lewo / obraca cały stos w lewo (np. 1,2,3,4 staje się 2,3,4,1 Wyskakuje
g
A i B ze stosu i wypycha wartość z B, A. w pudełku kodów. Zrywa
p
A, B i C ze stosu i zmienia wartość z C, B na A.
o
Wyskakuje i wyprowadza jako znak
n
Wyskakuje i wyprowadza wartość
i
Pobiera jeden znak jako dane wejściowe użytkownika i przekazuje jego wartość ASCII do stosu
;
Kończy wykonywanie
Wątek nie jest wymagany do wdrożenia, choć możesz, jeśli chcesz.
Najkrótsza odpowiedź wygrywa, w przypadku remisu wygrywa pierwsza odpowiedź.
Możesz używać dowolnego języka, a eval jest dozwolony.
Plik zostanie dostarczony za pomocą argumentów wiersza poleceń i będzie miał .fish
rozszerzenie.
W razie potrzeby możesz użyć oficjalnego interpretera języka Python jako odniesienia. Artykuł na stronie Esolangs Wiki zawiera więcej informacji na temat działania języka, a także kilka innych przykładów.
Przypadki testowe:
Witaj świecie!
Kod:
"Hello World!"r>?o?<;
Wydajność:
Hello World!
Kod faktorowy :
01::nv
:@*:n>84*o$1+
Wyjście (do 5):
1 2 6 24 120
źródło
1 2 6 24 120 720 ...
powinien być tym, co również interpreter Pythona.l
możliwość pchania stosu. I o ile mi wiadomo,?
ma wartość.Odpowiedzi:
APL (Dyalog) (750)
Ponieważ APL tak naprawdę nie ma wiersza polecenia, załaduj go do obszaru roboczego (tj. Za pomocą
)ed F
), a następnie uruchom go z wiersza APL w następujący sposób:Nie obsługuje żadnych błędów. Zachowanie niewłaściwego kodu nie jest określone. Nie może też robić nici. Tam, gdzie strona Esolang i pytanie są sprzeczne, następuje po nim pytanie.
Edycja: nieco bardziej czytelną wersję z komentarzami można znaleźć tutaj: https://gist.github.com/anonymous/6428866
źródło
Delphi, 1144
Wszystkie instrukcje oprócz theadingowych są zaimplementowane.
Wcięty i skomentowany kod brzmi:
Edytuj historię:
(1306 + 18 = 1324): Naprawiono błędy w kilku poleceniach operacji (Delphi ocenia argumenty w odwrotnej kolejności). Naprawiono również pop stosu (nie mógł pop więcej niż raz na instrukcję).
(1324-33 = 1291): Usunięto zabezpieczenie podczas zapisywania zawartości z pustego stosu
(1291-56 = 1235): Dodano funkcję Turn, zmieniono nazwy zmiennych, zmniejszono cyfry instrukcji
(1235-7 = 1228): Zmieniono kolejność zmiennych, naprawiono błąd w „@”
(1228-37 = 1191): Udostępniono więcej kodu implementacji, rozkładając go na 3 kolejne bloki spraw
(1191-12 = 1179): Udostępniono teraz implementację cyklicznego stosu między wszystkimi 3 instrukcjami.
(1179-20 = 1159): Podział parsowania ciągów na 3 bloki wielkości liter, usunięto zmienną j, udostępniono inną implementację
(1159-15 = 1144): Uproszczono „x”, zmieniając go w jedną z 4 instrukcji kierunkowych
źródło
for k in TFile.ReadAllLines(ParamStr(1))do c:=c+k+StringOfChar(' ',80-Length(k));
. Możesz się tego także pozbyćf:TextFile
, ale musisz dodaćuses IOUtils;
na początku. Różnica: czyta wszystkie linie, a nie tylko pierwsze 25 linii.Haskell 1428
Prawie wszystkie małe litery są używane jako nazwy funkcji.
PS Czy jest jakaś gra o tego rodzaju esolangach (wskaźnik 2d)? Muszą być bardzo zabawne!
Przykładowy program rybny
źródło
zip(['0'..'9']++['a'..'f'])[0..15]
należy go użyć zamiastzip['0'..'9'][0..9]++zip['a'..'f'][10..15]
. co za niesamowity golf!\q->t$(r q)q
jest w zasadzier>>=t
Python, 978
980981Nie obsługuje wątków.
Wersje:
1. 981
2. 980: Naprawiono
p
instrukcję; mała poprawa.3. 978: Naprawiono
?
instrukcję.źródło
p
precedensu, ponieważ nie do końca to zrozumiałem> Wyskakuje A, B i C ze stosup
Komenda zajmuje ostatnie trzy wartości na stosie (wyskakuje je),a
b
ic
, i wyznacza miejscec
,b
na siatcea
. Dlatego nie można przekonwertować na kod macierzysty.a=pop();b=pop();c=pop()
czyc=pop();b=pop();a=pop()
?a=pop();b=pop();c=pop()
Delphi,
18551701Ta wersja ma obsługę wątków za dość wysoką cenę: Wersja bez obsługi wątków ma obecnie 1144 znaki, więc obsługa wątków dodaje 557 znaków (około 50%)!
Pamiętaj, że ta implementacja zawiera kilka pomysłów, które zmniejszą moje inne przesłanie o kilkadziesiąt znaków (zastosuję je później).
Ten kod bezbłędnie uruchamia próbkę „wielowątkową witaj, świecie” i większość innych próbek. (Mój tłumacz interpretuje wyjątek dzielenia przez zero podczas uruchamiania próbki „e” - czy ktoś może to potwierdzić innym tłumaczem> <>?)
Oto wcięty i skomentowany kod:
Edytuj historię:
(1855-154 = 1701): Zastosowano wszystkie pomysły z wersji bez wątków
źródło
procedure _.U(v: Int16);
->procedure _.U;
iprocedure _.T(A, b: Int16);
->procedure _.T;
TextFile
można zapisać jakoText
iAssignFile()
jakoAssign()
PHP, 2493 bajtów
Wiem, że został zaimplementowany z mniejszym rozmiarem kompilatora z innymi językami, ale mimo to z duchem prymitywnego programisty, wymyśliłem interpreter CLI PHP dla
><> Fish
. Cały kod źródłowy znajduje się poniżej.2 główna funkcja języka programowania Fish nie została zaimplementowana, a mianowicie:
i
znaku. PHP CLI wymaga od użytkownika naciśnięcia<Enter>
klawisza w celu wprowadzenia danych wejściowych do bufora wejściowego.Zauważ, że napisałem i zoptymalizowałem wiele natywnych funkcji, w tym tworzenie tablicy za pomocą:
zamiast
Dostęp do programu można uzyskać poprzez interfejs wiersza poleceń (CLI), używając następującej komendy:
Spełniłem to w sumie 6 godzin w odniesieniu do oryginalnego interpretera Pythona.
Pierwotnym źródłem:
Edytuj historię
x
składnię, aby wybrać jeden z kierunków zamiast wybierać sam.p
polecenie, w którymchr()
należy użyć przed wypchnięciem wartości do pola kodu.źródło
Lua 1640 (1558 bez wątków) znaki
Wersja wątków, golfa (1640 znaków):
Wersja wątków robi paskudne włamania za pomocą setfenv i getfenv, aby wyeliminować potrzebę indeksowania różnych wątków.
Czytelna wersja wątku:
Wersja bez wątków, gra w golfa (1558 znaków, ale może być nieco bardziej skurczona, jeśli kryterium będzie wersja bez wątków):
Wersja do odczytu:
Nie stawianie następnego wyniku, jak sądzę, że bezpośrednie użycie kompresji nie jest celem;) Używając murgaLua (lub dowolnej wersji Lua z lzlib i luaSocket (do dekodowania base64)), przy magicznej liczbie 1333:
źródło