tło
Cześć golfiści! Chciałbym nauczyć się wszystkich języków programowania! Ale mam trochę uwagi ... a kopiowanie wszystkich przykładów Hello World staje się nudne ... ale lubię ogień! ^ w ^
Wyzwanie
Oto plan! Chcę, żebyście wszyscy napisali najmniejszy kod, który skompiluje, wydrukuje Goodbye Cruel World!
, a następnie zawiesi. Lub jako bonusowe wyzwanie, drukuj Hello World!
i zawieszaj sięGoodbye Cruel World!
Zasady
- Twój wynik będzie całkowitą liczbą użytych znaków. Odpowiedź musi być całym programem wykonywalnym.
- Twój program musi wydrukować
Goodbye Cruel World!
dane wyjściowe, a następnie zawiesić się (nieoczekiwany błąd).- Aby uzyskać bonus punktowy, musisz
Hello World!
zamiast tego wydrukować, aby wydrukować , ale komunikat o błędzie musi również zawieraćGoodbye Cruel World!
. Jeśli ukończysz wyzwanie premiowe, możesz podzielić swój wynik przez 2. (Jeśli chcesz otrzymać bonus, dołącz!! Na końcu swojego wyniku!)
- Aby uzyskać bonus punktowy, musisz
- Dopóki standardowe wyjście nadal się drukuje, a standardowy błąd nadal się drukuje, kolejność nie ma znaczenia. Tak długo, jak żadne z nich nie może zablokować drugiego.
- Dane wyjściowe muszą zawierać treść powyższego;
"
nie powinien pojawić się na wyjściu. - Dane wyjściowe powinny zawierać określony ciąg i nic więcej.
- Raport o awarii może zawierać wszystko, ale aby ubiegać się o bonus, następujący regex powinien pasować
/Goodbye Cruel World!/mi
(inaczej: zawiera, ignoruje wielkość liter / otaczający tekst)) - Ciągi
Hello World!
iGoodbye Cruel World!
są wrażliwe na wielkość liter, ale poza tym powinien pojawić się dokładnie tak, jak powyżej. - Jeśli język ulega awarii (nie może zmienić kodu wyjścia), musi ulec awarii. W przeciwnym razie użyj standardowego „raportu o błędzie” (tj.
STDERR
) Dla języka.
Mogę zawiesić Python 3, więc dołączyłem przykładową odpowiedź na Python 3! Teraz pozwala wszystkim podpalić świat! ^ W ^
code-challenge
hello-world
Tezra
źródło
źródło
as a bonus twist challenge, print "Hello World!" and crash with "Goodbye Cruel World!"
?Odpowiedzi:
Galaretka , 12 bajtów
Wypróbuj online!
Wyjaśnienie:
Ponieważ dzielenie liczb całkowitych jest diademem, domyślnie przyjmuje bieżącą wartość łańcucha jako oba argumenty - co jest ciągiem. Awarie, ponieważ oczekuje liczb całkowitych.
źródło
A base-250 encoded string
To jest zarówno przerażające, że możesz to zrobić. X3C, 43 bajty
Drukuje łańcuch, a następnie próbuje użyć wartości zwracanej jako wskaźnika do innego łańcucha, który ma zostać wydrukowany, co powoduje błąd segmentacji.
Wypróbuj online!
C, 42 bajty
Dzięki @Ruslan!
Wypróbuj online!
Dla zabawy: C (w 64-bitowym systemie Linux), 149 bajtów
Zmodyfikowano z tego programu Hello World tutaj .
Wypróbuj online!
źródło
The answer must be a whole executable program.
main(i){i=puts("Goodbye Cruel World!")/0;}
usuwa jeden bajt.i
.puts("")/0;
jest poprawną składniowo instrukcją.SOGL ,
152517 bajtów / 2 = 8,5!Wyjaśnienie:
(Ab) wykorzystuje fakt, że SOGL używa STDERR jako wyniku debugowania, więc jest w nim dużo tekstu wraz z linią
Jeśli przesłałeś STDOUT szkicu przetwarzania do pliku, „Goodbye Cruel World!” będzie tam
źródło
Hello World!
iGoodbye Cruel World!
nie rozróżniają wielkości liter, ale poza tym powinny wyglądać dokładnie tak, jak powyżej. ”, Możesz zagrać w golfa,█
całkowicie pozbywając się tej funkcji i po prostu wypisując małe litery.> <> , 25 bajtów
Zasadniczo dodaje ciąg znaków do stosu (wstecz, ostatni weszło pierwsze wyszło), a następnie robi równowartość:
Gdy na stosie nie pozostały żadne znaki (wydrukowano cały ciąg), pęknięcie stosu powoduje błąd
źródło
#o<"Goodbye Cruel World!"
, co w zasadzie jest takie samo.sed, 32 bajty
i
wstawia linię iw
zapisuje do pliku./dev/full
w tym przypadku, ponieważ wszystkie zapisy do niego zwracająENOSPC
(„Brak miejsca na urządzeniu”).Jednak nadal potrzebuje jednego wiersza danych wejściowych do działania.
źródło
Lua,
31, 30 bajtówpo raz pierwszy drukuje „Goodbye Cruel World!” a następnie ulega awarii przy próbie dodania wartości zero i 0.
Wynik:
Kredyt dla GalladeGuy za 1 bajt mniej
źródło
a=-print"Goodbye Cruel World!"
Python 3 | Wynik:
24,5!2322!Wydrukuj „Hello World”, niż użyj niepoprawnego operatora „+” na „Goodbye Cruel World!” do elementu zwracanego NoneType. (wycięty \ n \ r z poprzedniej wersji)
Wypróbuj online!
Python 3 | Wynik:
3430Wydrukuj do widzenia, niż wykonaj niepoprawną operację jednorazową + na wyniku drukowania (NoneType)
Wypróbuj online!
źródło
+"Goodbye Cruel World!"
jest krótszy o 3 bajty i generuje błąd typu.print("Goodbye Cruel World!")/0
jest krótszy dla drugiego (3 bajty?)R,
2220! bajty(44/2)(40/2)Wypróbuj online!
Wynik:
Zaoszczędzono dwa punkty dzięki digEmAll
źródło
40/2
wypróbować online!AWK , 72 bajty, wynik 36!
Wypróbuj online!
AWK
nie lubi próbować dzielić przez 0.źródło
CJam , 34 bajty, wynik 17!
Wypróbuj online! (Zobacz Panel debugowania dla STDERR)
Wyjaśnienie
W TIO generuje ten komunikat o błędzie:
źródło
C Preprocesor, 27 bajtów
Wynik:
źródło
#Goodbye Cruel World!
APL (Dyalog) , 17,5 bajtów
Bez premii 20 bajtów
Wypróbuj online!
Zauważ, że kod nie jest cytowany, więc APL próbuje go wykonać, ale
World
nie jest zdefiniowany, powodując awarię BŁĄD WARTOŚCI z nieprawidłową linią kodu zawartą w komunikacie o błędzie.Z premią 35 ÷ 2 = 17,5 bajtów
Wypróbuj online!
Najpierw drukuje wymagany ciąg, a następnie ulega awarii, jak powyższy program.
Bardziej wyrafinowana wersja premiowa, 35 ÷ 2 = 17,5 bajtów
Wypróbuj online!
Drukuje pierwszy ciąg, następnie upuszcza pierwsze pięć znaków z tego (
5↓
), a następnie konkatenuje to (,
) z nowym prefiksem, a następnie próbuje wykonać (⍎
), powodując ten sam błąd, co powyżej.źródło
Bash
20.5!18,5!Nie zamierzam strzelać do galaretki, ale trochę zawstydzam się tym, że wybrałem szybki skrypt. 18.5 nie jest takie złe jak na język nie golfowy. (Uwaga: to musi być skrypt, interaktywne bash spróbuje zinterpretować
!
jako wyszukiwanie historii)Zwraca z kodem błędu 127 i:
Zgodnie z prośbą nie
"
ma ... nigdzie:)
. Jak zasugerowałemapricot boy
, sprawdzam teraz ostatni argument poprzedniego polecenia, aby zapisać 4 bajty.źródło
W=\ World\!;echo Hello$W;"Goodbye Cruel$W"
Goodbye\ Cruel\ !$
, nie w 100%, ale całkiem pewne, że!$
to „ostatnie słowo ostatniego polecenia”TeX, 19 lat!
Aby zmusić TeXa do utworzenia pliku dvi / pdf bez ręcznej interwencji, skompiluj z
-interaction=nonstopmode
.Drukuje
Hello World!
, zgłasza błąd podczas używania,#
gdy nie należy, a następnie kończy kompilację\bye
. Jednak to, co następuje po,\bye
jest nadal wyprowadzane w komunikacie o błędzie, więc dotyczy to premii.źródło
WinDBG (debugowanie lokalnego jądra systemu Windows XP / Vista), 33 bajty
Ostrzeżenie: spowoduje to awarię całego komputera, a nie tylko programu.
Debugowanie lokalnego jądra jest dozwolone tylko w systemach Windows XP i Vista (ale domyślnie nie jest włączone w systemie Vista). Okno dialogowe WinDBG dotyczące debugowania lokalnego jądra nie wspomina o żadnym innym systemie operacyjnym Windows, więc zakładam, że nie można nawet dla nich włączyć. Prawdopodobnie w przypadku innych systemów operacyjnych Windows możesz podłączyć się do zdalnego komputera w celu debugowania jądra, ale to zdalny komputer się zawiesi, więc nie sądzę, że to rozwiązanie się tam liczy.
źródło
JS (ES5), 46/2 = 23 bajty!
Alerty
Hello, World!
, a następnie błędy za pomocąUncaught TypeError: Cannot read property 'Goodbye Cruel World!' of undefined
źródło
PowerShell, 26 bajtów
Myślę, że dzielenie przez 0 jest najprostszym sposobem na zgłoszenie błędu.
PowerShell, 35/2 = 17,5 bajtów
przez TessellatingHeckler , zgłasza błąd w następujący sposób:
źródło
$w='World!'
(z!
)?"Hello World!";Goodbye Cruel World!
ma 17,5 bajtów, zgłasza wyjątek, ponieważ pożegnanie nie jest rozpoznawane jako polecenie, a komunikat wyjątku zawiera wiersz w całości, więc pasuje do wyrażenia regularnego ..'Goodbye Cruel World!';x
pozwoliłoby zaoszczędzić dwa bajty na 24Operacyjny język skryptowy Flashpoint , 45/2 = 22,5 bajtów
Zadzwoń z:
Wynik:
źródło
Fortran (GFortran) , 58/2 = 29 bajtów!
Wypróbuj online!
źródło
Node.js, wynik:
25,524,5!Oszczędność 1 punktu dzięki produktom ETH
Pełny składni poprawny program, który ulega awarii w czasie wykonywania, ponieważ
console.log()
nie zwraca funkcji.Wypróbuj online!
źródło
25.5
...: ((Gamma(26.5)
, jak w przypadku definicji Mathematica.X
(a może nawet nową linię)?Aceto , wynik: 21,5!
Drukuje
Hello World!
, a następnie ulega awariiźródło
Pyth,
2824 bajtówDrukuje ciąg, a następnie próbuje uzyskać pierwszy element pustej listy.
Spróbuj tego!
źródło
AHK, 50/2 = 25! (niekonkurujący)
Nie konkuruje, ponieważ dodatkowy wymóg unieważnił odpowiedź. Nie mogę znaleźć sposobu na skompilowanie go, wygenerowanie tekstu i awarię. Cokolwiek spróbuję, nie spełni przynajmniej jednego z tych wymagań.
To najbardziej nudne rozwiązanie, jakie mogłem wymyślić. W rzeczywistości nie ulega awarii, ale nie jest to technicznie wymagane. Wystarczy, że wyśle komunikat do okna debugowania. Robi to, ponieważ tak mówię.
źródło
Japt , 22 bajty
Wypróbuj online!
Zaoszczędzono 3 bajty dzięki obarakon i produktom ETH
źródło
Oc"<string>"
a następnie zastąpić bieżący ciąg skompresowaną wersją i otoczony backtickami.C #, 116/2 = 58 bajtów!
Wersja normalna dla
9487 bajtów:Zaoszczędź 7 bajtów dzięki @KevinCruijssen.
źródło
int n=0;n/=n;
jest krótszy dla twojej pierwszej odpowiedzi.int n=1/0;
, ale najwyraźniej nie jest to możliwe w języku C # (co jest właściwie dobrą rzeczą dla języka, ale złe dla kodegolfingu). Przy okazji, dlaczego premia nie jest u góry? Ten jest krótszy.Galaretka , 10,5! bajty
Wypróbuj online!
Wykorzystuje to niezdefiniowane zachowanie, używając ciągów Python (ciągów) zamiast ciągów Jelly (lista ciągów 1-znakowych). Konwersja odbywa się poprzez zmniejszenie ciągu galaretki przez dodanie, a Python
+
łączy dwa ciągi, więc dwa dodane razem są konkatenowane pod względem Pythona. Następnie używa odpowiedniej monady (zakresu), aby Python'sint
jest wywoływany w ciągu, co powoduje błąd, który zawsze będzie zawierałGoodbye Cruel World!
.Wyjaśnienie:
źródło
Rubinowy,
4342 bajtów / 2 = 21!Zapisane pół bajt za pomocą Alexis Andersen, zastępując
"String"/0
z-"String"
. Działa to tylko z wersjami Ruby niższymi niż 2.3, w których metoda Unary minus została faktycznie dodana do klasy String!Z Ruby <2.3:
Z Ruby> = 2.3:
źródło
-
ciągu zamiast/
np.-"Goodbye crueld World!"
x86-64 Kod binarny (z wywołaniami systemowymi Linuksa), 43 bajty
Demontaż:
Ten program łączy potrzebne dane (ciąg
"Goodbye Cruel World!\n"
) we własny kod. Ładuje wskaźnik do tego ciągu przy użyciurip
względnego adresowania i wywołujewrite
syscall bezpośrednio, a nie poprzez opakowanie glibc, więc jest całkowicie niezależny od pozycji, i możemy go łatwo przetestować, osadzając kod wconst
ciągu i rzutując ten ciąg na funkcję wskaźnik. Aby zawiesić program, kończę gohlt
instrukcją, która z uprawnieniami pierścienia 0 wyciszy procesor na zawsze (lub przynajmniej do następnego następnego przerwania), ale z uprawnieniami pierścienia 3 (typowymi dla programów użytkownika) otrzymamy znacznie mniej dramatycznySegmentation Fault
.Program testowy:
Wynik:
Zauważ, że 43-bajtowy kod jest kompletnym programem określonym przez wyzwanie, a nie tylko funkcją.
main
Prawidłowe działanie programu testowego nie zależy od funkcji programu testowego; nadal ładowałby ciąg i powodowałby awarię, gdyby został załadowany i bezpośrednio do niego załadowany.źródło
push
/pop
do załadowania rejestrów. Na przykład dwie pierwsze instrukcje mogą byćpush 1
+pop rax
, czyli o 1 bajt krócej. Następnie można zastąpić dwie następne instrukcjemov edi, eax
, która jest o 2 bajty krótsza. Ten sampush
/pop
lewę można zastosować do instrukcji 6 i 7:push 0x15
+pop rdx
.LOLCODE , I CAN HAZ 21 BYTES
Po prostu umieszcza nieprawidłowy operator przed ciągiem. Tutaj możesz przejść do trybu online.
źródło
Pyth , 38/2
= 19 bajtów!36/2 = 18 bajtów!Przetestuj online!
Objaśnienia
Drukuje
Hello World!
, a następnie spróbuj ocenićGoodbye Cruel World!
. Nie udaje się tego zrobić, ponieważ ten ciąg nie jest prawidłowym kodem.Wynik to:
źródło