Wyzwanie
Napisz najkrótszy program, który po skompilowaniu lub uruchomieniu generuje fatalny komunikat o błędzie mniejszy niż sam program. Komunikat o błędzie może nie zostać wygenerowany przez sam program, taki jak Python raise
. Prawidłowa odpowiedź musi zawierać zarówno kod, jak i komunikat o błędzie. Najkrótsza ważna odpowiedź wygrywa.
Żaden komunikat o błędzie nie jest liczony jako komunikat o błędzie.
Przykład (Lua)
Kod (46 bajtów):
[
--aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Błąd (45 bajtów):
[string "[..."]:1: unexpected symbol near '['
code-golf
error-message
użytkownik72528
źródło
źródło
__main__.CodeException: Raised an &rror.
” mój błąd lub czy to: „Raised an &rror.
”Odpowiedzi:
ed , 3 bajty
Uwaga: Większość odpowiedzi tutaj ignoruje licznik końcowy wydrukowany jako część komunikatu o błędzie. Ale nie widzę w pytaniu niczego, co uzasadniałoby zignorowanie go, a autor skomentował, że nowy wiersz powinien zostać uwzględniony . Więc jeśli pytanie nie zostanie zmienione, dołączę je.
Kod (z końcowym znakiem nowej linii):
Błąd (z końcowym znakiem nowej linii):
źródło
C (nowoczesny Linux), 19 bajtów
Zrobiłbym mój słynny segfault, ale całkowicie ludzki go ukradł.
Wyjście (18 bajtów):
źródło
main(){main();}
)?main(){main();}
nie jest gwarantowane seg winy.Python 2, 35 bajtów
Podaje błąd:
źródło
JavaScript (Firefox), 31 bajtów
Zgłasza ten błąd:
Testowany w konsoli Firefox 54.0.1 w systemie Windows 7.
źródło
Python 2 ,
8779 bajtów-8 bajtów dzięki Zacharý i Erik the Outgolfer.
Wypróbuj online!
Komunikat o błędzie, 78 bajtów:
Zakładając, że kod jest przechowywany w pliku o nazwie
a
.To jest naprawdę fajne małe jajko wielkanocne w Pythonie. :RE
źródło
\s\sFile "<stdin>", line 1\nSyntaxError: not a chance
tylko 50 bajtów [\s
jest to spacja i\n
znak nowej linii], więc możesz otrzymać program 51-bajtowy.Haskell, 13 bajtów
Zapisz jako
t.hs
lub inną jednoznakową nazwę, skompilujghc
i uruchom. Komunikat o błędzie (z końcowym znakiem nowej linii):źródło
Taxi ,
3821 bajtówProdukuje:
Wypróbuj online!
-17 bajtów dzięki Inżynierowi Toastowi
Próbuje przejść na „abc”, który nie istnieje. Miałbyś
[abc]
gdzieś.źródło
Switch to plan "abc".
produkować do 21 bajtówerror: no such label
. To może być jedno z niewielu wyzwań związanych z golfem kodowym, w których Taxi pokonuje tradycyjne języki.> <> , 26 bajtów
Wypróbuj online!
Każdy komunikat o błędzie w Fish jest
something smells fishy...
, więc to po prostu przesuwa wskaźnik wystarczająco długo, aby był dłuższy, i próbuje duplikować górę stosu, który jest pusty w tym czasie.źródło
JavaScript (Firefox), 21 bajtów
Błąd (20 bajtów) :
TypeError: a is null
źródło
Powłoka systemu V, 25 bajtów
Komunikat o błędzie (23 bajty):
„Nie jest maszyną do pisania” lub
ENOTTY
jest kodem błędu zdefiniowanym werrno.h
systemach Unix. Służy to do wskazania, że w wywołaniu systemowym ioctl podano nieprawidłowy numer ioctl (kontrola wejścia / wyjścia). W moim systemie/usr/include/asm-generic/errno-base.h
mogę znaleźć następującą linię:W wersji 6 UNIX i starszych, operacje we / wy były ograniczone do szeregowo podłączonych urządzeń końcowych, takich jak teletype (TTY). Zwykle były one zarządzane za pomocą wywołań systemowych
gtty
istty
. Jeśli ktoś spróbuje użyć któregoś z tych wywołań systemowych na urządzeniu innym niż terminal,ENOTTY
zostanie wygenerowane.W dzisiejszych czasach nie ma oczywiście potrzeby korzystania z teletype. Kiedy
gtty
istty
zostały zastąpioneioctl
,ENOTTY
został zachowany. Niektóre systemy nadal wyświetlają ten komunikat; ale większość mówi zamiast tego „nieodpowiedni ioctl dla urządzenia”.źródło
QBasic, 11 bajtów
Istnieją dwa rozwiązania z 11 bajtami w QBasic, z których jedno może być dalej rozgrywane w golfa. Najkrótszy komunikat o błędzie QBasic ma
overflow
i można go wywołać jako taki:Wyrzuca to,
overflow
ponieważ maksimum dla liczby całkowitej (i%
) wynosi32676
. Nie mogłem grać w32677
golfa bez automatycznego rzucania QBasic za długo ...Kolejny błąd, przy 11 bajtach, to
out of data
. QBasic maDATA
instrukcje przechowujące dane w programie, do których później można uzyskać dostęp za pomocąREAD
instrukcji. Wydanie więcejREAD
niżDATA
s powoduje błąd:Zauważ, że instrukcja jest wypełniona komentarzem, aby uzyskać długość komunikatu o błędzie. Tak, mam komunikat o błędzie z krótszym programem i program z krótszym komunikatem o błędzie ...
źródło
C (nowoczesny Linux), 19 bajtów
Zasugerowałem to na czacie, ale nikt nie skorzystał z okazji. : P Podziękowania dla przezabawnej odpowiedzi MD XF .
Komunikat o błędzie, 18 bajtów
źródło
W_EXITCODE(0, 11) == 11
) od kodu wyjścia 139 (W_EXITCODE(139, 9) == 139 << 8
). Powłoki ustawione są w sposób$?
nieinwazyjnyWIFEXITED(wstatus) ? WEXITSTATUS(wstatus) : WTERMSIG(wstatus) + 128
, ale większość języków ujawnia różnicę.WIFEXITED(wstatus)
równoważnyDIVORCE(alimony)
?JavaScript (V8), 24 bajty
Błąd, 23 bajty:
Testowane na Nodejs v6.11.0 i Google Chrome v59.0.3071.115 .
Wypróbuj online!
Pamiętaj, że TIO rozszerza komunikat o błędzie.
źródło
TrumpScript , 30 bajtów
Komunikat o błędzie:
źródło
PowerShell ,
215189 bajtówWypróbuj online!
Więc PowerShell ma ... pełne ... komunikaty o błędach. Ponadto większość komunikatów o błędach innych niż składniowe to wyjątki czasu wykonywania, co oznacza, że nie powodują one śmierci, co ogranicza ten problem do konieczności znalezienia krótkiego błędu analizy.
I pomyśleć to jedna z najkrótszych, jeśli nie najkrótsza,@TessellatingHeckler wykazał to najkrótsza błąd parsowania, i wciąż waży188
bajtów tylko dla komunikatu o błędzie. Dlatego w zasadzie musimy dodać wystarczającą liczbę1
s, aby dotrzeć do189
bajtów „kodu”.Na
c:\a.ps1
przykład uruchomienie tego lokalnie zmniejszy liczbę bajtów o garstkę, ponieważ jest to tylko krótsza ścieżka pliku, ale wtedy nie jest dostępna w TIO.Powoduje błąd:
źródło
[]
wyglądać na krótszy błądMissing type name after '['
i w zależności od tego, jak dokładnie policzyć, może wynosić około 190 - tio.run/##K8gvTy0qzkjNyfn/PzqWy3Dogv//AQ (wzięty z ciągów parsera tutaj, który wygląda mi na najkrótszy błąd parsera([xml](gc .\ParserStrings.resx)).root.data.value | sort { $_.length } -Desc
).Commodore 64 Basic, 15 bajtów
Produkuje
(Zwróć uwagę na dwie spacje w komunikacie o błędzie, gdzie program ma trzy)
?SYNTAX ERROR
jest powiązany z?VERIFY ERROR
trzecim najkrótszym komunikatem o błędzie, jaki może wygenerować C64 Basic, i najkrótszym, który może być niezawodnie wywołany przez kod (najkrótszy komunikatBREAK IN 1
, wymaga interakcji użytkownika, podczas gdy?LOAD ERROR
wymaga wadliwej taśmy lub dyskietki i?VERIFY ERROR
wymaga obecności dyskietka lub taśma zawierająca plik, który nie pasuje do programu w pamięci RAM).źródło
R ,
2928 bajtów-1 bajt dzięki JarkoDubbeldam
Zgłasza błąd,
Error: object 'a' not found
który wynosi 27 bajtów.Wypróbuj online!
źródło
a #abcdefghijklmnopqrstuvwxy
BłądError: object 'a' not found
jest o jeden bajt krótszy.Rubinowy (
3332 bajty)32 bajty
Zgłasza błąd (zakładając, że w pliku o nazwie „a”):
31 bajtów
Edit : ogolone bajt off stosując
&
zamiast<<
dzięki Eric , który również pojawił się z jeszcze krótszym rozwiązania Ruby: http://codegolf.stackexchange.com/a/135087/65905źródło
&
nie. Schludny! Również dobre znalezisko z ucieczką heksów. Z trudem znajdowałem krótszy i nieśledzący komunikat o błędzie krytycznym inny niż błąd składniowy.Brainf ** k, 17 bajtów, ten interpreter
Brainf ** k jest tak prostym językiem, że prawie każdy tłumacz ma inny komunikat o błędzie. Ten wykorzystuje,
Memory Error: -1
gdy wskaźnik przesuwa się za bardzo w lewo i próbujesz wykonać inną operacjęźródło
Common Lisp , 20 bajtów
Wypróbuj online!
Komunikat o błędzie
źródło
TryAPL, 11 bajtów
Kod (11):
Błąd (10):
źródło
JavaScript (Firefox),
2927 bajtówwyrzuca
RangeError: invalid date
24 bajty. Testowany na Firefox 54.0.1 w systemie Windows 10.źródło
ZX Spectrum Basic, 9 bajtów
produkuje:
Wyjaśnienie:
Liczę (wyjątkowo) reprezentację programu ASCII dla celów długości, w tym końca linii (nie jest to tak naprawdę ważne, ponieważ zawsze możemy wstawić krótszy program spacjami).
Zwykle komunikaty o błędach ZX Spectrum są dłuższe i bardziej pomocne - procedura ROM pod 0x0008 oczekuje kodu błędu po wywołaniu kodu maszynowego na
RST 8
. I pobiera losowy (deterministyczny) bajt z ROM, co powoduje ten nonsensowny komunikat o błędzieM
.5
jest numerem błędu,,
jest dodawany przez procedurę drukowania błędów i0:1
jest wierszem: pozycja polecenia błędu.źródło
Bakłażan , 53 bajty
Wyjścia
SyntaxError: Invalid instruction (0) at character 0.
Wypróbuj online!
źródło
Perl 5 , 5 bajtów
Wysyła znak nowej linii dla jednego bajtu.
Wypróbuj online!
źródło
Perl 5 , 11 bajtów
Ponieważ nie jestem pewien, czy moja inna odpowiedź jest zgodna z regułami wyzwań, oto inna alternatywa.
Wyjście błędu:
Z końcowym znakiem nowej linii dla 6 bajtów.
Wypróbuj online!
Z jakiegoś powodu wewnętrzna funkcja interpretera Perla
Perl_mess_sv
zawiera:gdzie
CopLINE(cop)
pobiera numer bieżącego kontekstu kodu. Jeśli więc ten numer wiersza będzie miał wartość zero, Perl pomija dodawanie zwykłego" at <filename> line <n>"
komunikatu o błędzie.źródło
die
służy do wyjścia z programu.raise
?ArnoldC , 150 bajtów
Wypróbuj online!
Błąd wynosi 94 bajty (w tym końcowy znak nowej linii):
Zachowane, ponieważ myślę, że to jest bardziej zabawne - spoiler: to byli ci cholerni nastoletni dowcipnisie.
ArnoldC , 280 bajtów
Pseudo kod:
Wypróbuj online!
Generuje błąd „brak danych wejściowych”. (Prawie wszystkie inne błędy w ArnoldC obejmują duży kawałek płyty kotłowej):
279 bajtów (w tym końcowy znak nowej linii):
źródło
TI-Basic, 9 bajtów
Najkrótsze komunikaty o błędach są 8 bajtów każda:
ERR:DATE
,ERR:MODE
,ERR:STAT
, iERR:ZOOM
. Nie zastanawiałem się,ERR:DATE
ponieważ to nie działa na modelach bez wewnętrznego zegara. Poza tym nie zdecydowałem się naERR:ZOOM
to, ponieważ wydawało się to zbyt trudne do uruchomienia.Program (9 bajtów):
Komunikat o błędzie:
ERR:MODE
(8 bajtów)Program (9 bajtów):
Komunikat o błędzie:
ERR:STAT
(8 bajtów)źródło
Rubin, 25 bajtów
To było fajne ćwiczenie, dzięki! Prawdopodobnie istnieje sposób, aby uzyskać krótszy komunikat o błędzie za pomocą SegFault, ale nie mogłem go znaleźć.
Komunikat o błędzie:
24 bajty, w tym końcowy znak nowej linii.
Wypróbuj online!
Rubinowy, 26 bajtów
Oto moja poprzednia odpowiedź:
Komunikat o błędzie:
25 bajtów, w tym końcowy znak nowej linii.
źródło
C ++ (w wersji beta macOS High Sierra), 23 znaki
Wyjście: (22 znaków)
Nie pamiętam, czy poprzednie wersje systemu macOS zapewniały bardziej tradycyjną
Segmentation fault (core dumped)
odpowiedź, ale dodawanie spacji do kodu, aby je uzupełnić, jest dość trywialne.źródło