^"
>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p:1: error: declaration expected
Wypróbuj online !: Befunge-93 , C
Dzięki randomdude999 za zauważenie, że nazwa pliku wymaga pasujących cudzysłowów do działania.
Musi być zapisany pod nazwą pliku ^"\n>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p, gdzie \njest nowa linia. Z tego powodu TIO dla C nie działa dokładnie tak, jak powinien. Testowany do pracy na Lubuntu.
Objaśnienie (C):
Program nie kompiluje się, a tcc z przyjemnością wyświetla nazwę pliku jako część komunikatu o błędzie. Istnieje wiele błędów kompilacji, które można uzyskać na podstawie początku kodu. ^na początku daje nam declaration expectedkrótki, który nie zawiera żadnych problematycznych znaków ". Z drugiej strony programiści gcc i clang są bardzo pesymistyczni i postanowili wypisać wiele błędów na raz, co nie jest zbyt przyjemne, więc nie używamy ich kompilatorów.
Objaśnienie (Befunge-93):
Befunge jest wygodny dla quinesów, ponieważ jego kod może być również wykorzystywany jako dane znakowe, dzięki "poleceniu, które przełącza tryb ciągów znaków. Na początku wykonujemy kilka bezużytecznych operacji na stosie, a następnie wydajemy ppolecenie (put), które umieszcza znak NUL na (0, 1). Następnie odbijamy wskaźnik instrukcji po lewej stronie i zaczynamy czytać wszystko jako ciąg znaków. Należy to zrobić po lewej stronie, ze względu na naturę stosu LIFO. Po owinięciu i "ponownym dotarciu do postaci sznurek się kończy. Zauważ, że znak NUL zastąpił znak$znak, tworząc separator w połowie ciągu. Następnie wciskamy 3 cyfry na stos i przeskakujemy przez NUL (ponieważ niestety zawiesza się interpreter podczas uruchamiania jako instrukcja). Tutaj należy wykonać część statyczną komunikatu o błędzie. Większość jego znaków to brak operacji, ale ppolecenie zużywa trzy argumenty (dlatego wypchnęliśmy 3 liczby, w przeciwnym razie zjedzilibyśmy tutaj część łańcucha), a :& i 1znaki wypychają łącznie 4 wartości na stos, które przeciwdziałamy z instrukcją pa $(pop i odrzuć). Następnie wykonywana jest pewna arytmetyka w celu wypchnięcia kodów ASCII, ^"\n>#001p#"a na końcu pętla wypisuje wszystkie wartości na stosie jako znaki, aż znajdzie znak NUL i zakończy się.