Utwórz możliwie najkrótszy zaciemniony program, który wyświetla tekst „Hello World”.
Aby zostać uznanym za zaciemniony program, musi spełniać co najmniej dwa z następujących wymagań:
- Nie zawiera znaki:
h
,l
,w
id
w każdym przypadku - Nie zawiera znaki:
e
,o
,r
,0
, i1
w każdym przypadku - Nie zawiera znaków:
2
lub7
Wejście:
brak
Wynik:
Hello World
code-golf
obfuscation
hello-world
restricted-source
Kevin Brown
źródło
źródło
import
w pythonie nie jest dozwolone.72
jest"H"
dlatego wybrałam te dwaOdpowiedzi:
GolfScript, 17 znaków
Podczas testowania tego zgłoszenia proszę zapisać plik jako zwykły plik binarny, a nie UTF-8. Masz problem z odtworzeniem pliku? Oto zrzut heksowy:
źródło
Perl
Ponieważ oczywista odpowiedź wymaga jakiegoś przesunięcia, czuję się zobowiązana do opublikowania czegoś przy użyciu Acme :: EyeDrops , jednak z dodatkową mocą, którą moim zdaniem powinna być trochę fajniejsza.
Zastrzeżenie
Od wersji 5.18 Perla mechanizm pozwalający na uruchomienie tego kodu stał się tak potężny, że został domyślnie wyłączony, aby zapobiec niewłaściwemu użyciu. Dlatego w wersjach 5.18+ możesz albo dodać
use re 'eval';
do początku skryptu, albo, jeśli skrypt jest nazwanyworld.pl
, możesz go uruchomić w podobny sposóbperl -Mre=eval world.pl
. To niefortunne, że te brzydkie postacie muszą zostać dodane, ale c'est la vie. (Uwaga: chcę podkreślić, że włączenie tej funkcji nie wymaga użycia biblioteki lub dodatku, wyświetlany kod jest prawidłowym kodem Perla, mechanizm po prostu nie jest już domyślnie włączony).źródło
(?{ code })
do oceny niestandardowego kodu Perla podczas dopasowania wyrażenia regularnego. Niestandardowy kod Perla drukuje wiadomość. To miłe, ponieważ nie narusza żadnej z zasad.C # (175 znaków)
Wykonanie tego w języku C # było sporym wyzwaniem, ponieważ ograniczenia wykluczają jakiekolwiek użycie często używanych słów kluczowych. W języku C # możliwe jest użycie \ uxxxx sekwencji ucieczkowych Unicode w identyfikatorach, ale niestety nie w słowach kluczowych.
Podejrzewam, że to rozwiązanie działa tylko po skompilowaniu z .NET 4.0. Zobacz wyjaśnienie dlaczego.
Wyjaśnienie
źródło
Uri
zamiastobject
dlab
. Można go używać\xHH
w ciągach zamiast w\u00HH
miejscu, w którym jest jednoznaczny (\x
ma zmienną długość). Z drugiej strony, wcale nie potrzebujeszb
i możesz po prostu użyć goc
jako pierwszego argumentuInvoke
. MSDN stwierdza, że w przypadku metod statycznych pierwszy argument jest ignorowany. Dla mnie to sprowadza się do 175.Invoke
może być cokolwiek, nie musi tak byćc
, może być0
... :)c
(który niestety nie działa, ponieważnew
wymaga użyciae
i.Split('x')
jest zbyt długi (wyszło na 177).GetMethods
. +1BrainFuck, 106 uderzeń
Spełnia wszystkie zasady i na pewno jest zaciemniony.
źródło
++++++++++[>++++++>+++<<-]>++++++++++++.---.+++++++..+++.>++.<++++++++.--------.+++.------.--------.
to tylko 100 uderzeń, moje jest lepsze niż twojeJavaScript, 2595
To tylko łamie zasadę 2.
źródło
. That's followed by a comment and the expression
['_']` w pustym kontekście. Następnie zmiennejo
(wraz z_
i(゚ー゚)
) przypisywana jest wartość 3. Kontynuuje ona w tym duchu, wykonując mnóstwo dodatkowej nieszkodliwej pracy, która jest właściwie bezoperacyjna, i wykorzystując metody ronda do wykonywania zamierzonej pracy (dzwonieniealert("Hello world")
) w sposób nieoczywisty moda.Befunge-93 - blok 10x9
Przepraszam. :RE
Nie zamierzałem tutaj robić małych rozmiarów, starałem się naprawdę OBFUSCATE kod, włączając jak najwięcej uśmiechniętych buziek i hałasu! :RE
Powinny być zgodne z regułami 2 i 3.
źródło
Golfscript - 17 znaków
Łatwiej skopiować / wkleić niż Chris
Zasadniczo przesunięcie szyfru cesarskiego o 1 znak
źródło
e
w sobiePyton
Reguła I i III (34 znaki)
Reguła I i III, alternatywa (39 znaków)
Reguła II i III (37 znaków)
Reguła I i II (50 znaków)
Wszystkie trzy zasady (58 znaków)
źródło
import codecs
zanim będziesz mógłcodecs.decode
JavaScript, 366 znaków
Po zobaczeniu rozwiązania Perla Joela Bergera poczułem się zmuszony, by sam zrobić trochę piękna ASCII ... JavaScript, nie używa alfanumerycznych i w przeciwieństwie do wyjścia JSFuck jest właściwie rozsądny.
źródło
($)
wyłączonymi białymi spacjami i ostatnimi zamienionymi na()
(ponieważ dodałem$
dla symetrii).rot 13 - 11 znaków
Uryyb Jbeyq
2019/2/12: Ta odpowiedź jest przechowywana z powodów historycznych i nie jest już prawidłową odpowiedzią zgodnie z obowiązującymi zasadami witryny.
źródło
Bash,
3025 znakówZ podziękowaniami dla Petera Taylora za użycie sznurka.
źródło
tr G-t F-s<<<Ifmmp\ Xpsme
Scala, 39
Rozwiązania takie jak print (mapa „Qnuux)„ x {um ”(_- 9 toChar)) (35 znaków) nie spełniają reguł 1 i 2 („ toChar ”zawiera zarówno„ h ”, jak i„ r ”), co sprawia, że jest to trochę trudne.
Wreszcie wymyślił:
Sugestie dotyczące ulepszeń mile widziane
źródło
TeX, 95 bajtów
Łamie trzecią zasadę.
Uruchom z,
tex filename.tex
aby uzyskać wyjście DVI lubpdftex filename.tex
plik PDF.źródło
> <> , 2 × 20 = 40 znaków
Narusza Regułę II, ponieważ nie mogę wydać postaci bez użycia
o
.źródło
Windows PowerShell, 91
959798Narusza tylko zasadę II.
To bardzo złe, które już samo
char
narusza dwie zasady.I tak, ten ciężko pracował.
$OFS
się''
tak podczas rzucania tablicę na ciąg znaków bez spacji między pojawiają przedmiotów.char
faktycznie było najtrudniejsze ze wszystkich i spędziłem około dnia na poszukiwaniu sposobu. Cała reszta działała ładnie, ale kiedy wykonam na nich obliczenia, mam,int
a niechar
s. Umieszczenie ich z powrotem w sznurku było trochę trudne.Znalazłem sposób na wywołanie
Invoke-Expression
bez potrzebye
:ale wciąż brakowało argumentów. Do tego czasu odrzuciłem swój cel, jakim jest spełnienie wszystkich trzech zasad. Nie pomogło mi to również w castowaniu do
char
.Trochę skrócono dzięki nowszej wersji PowerShell. Niestety nie pojawił się żaden użyteczny inny sposób tworzenia wyniku.
źródło
PHP (16 bajtów)
Zauważyłem, że mój poprzedni przykład PHP nie był wystarczająco zaciemniony, więc zobaczmy bardziej rażąco zaciemnione przykłady (ostrzeżenie, zaciemnianie!). Również rażąco kopiuje przykład GolfScript, z wyjątkiem zmniejszania go (czy to w ogóle możliwe?). Ten wpis wymaga PHP 5.4 lub jest
short_open_tag
włączony. Dokonując tego, nie złamano żadnej zasady. W rzeczywistości ten wpis nie zawiera żadnych liter ani cyfr ASCII.Ten przykład nie łamie żadnej reguły. Baw się dobrze. Aby wygenerować plik, uruchom następujące polecenie.
Lub, jeśli nie ufasz uruchomieniu
printf
polecenia, przygotowałem zrzut pliku Base64.Jeśli uważasz, że obie metody generowania go łamią reguły, wygenerowałem również plik na Dropbox .
I żeby to uruchomić.
Wynikowy plik powinien mieć 16 bajtów. Miłej zabawy. Pamiętaj, że jeśli masz
E_NOTICE
włączone ostrzeżenia, pojawi się powiadomienie. Po prostu zignoruj to, naprawienie go zmarnujedwie postaciejedna postać (w końcu mogę użyć@
operatora) i sprawiłaby, że wynikowy Base64 wyglądałby mniej niesamowicie.źródło
Biała spacja (167 znaków)
Aby uzyskać program WS, zamień odpowiednio znaki S, T, L na spację, tabulator lub liniowy w następującym ciągu:
lub pobierz „surowy” program tylko do białych znaków w pliku tekstowym hello.ws .
Po uruchomieniu przez tego interpretera WS , program ten wypisuje „Hello World”.
Objaśnienie (zignoruj tutaj białe znaki!):
„Środkowe” ciągi znaków (np.
TSSTSSSL
) To kody ascii (binarnie, zS
oznaczeniem 0,T
oznaczeniem 1) dla kolejnych liter w „Hello World”. PrefiksSSS
wypycha następującą po nim liczbę (zakończoną znakiem anL
) na stos.TLSS
wypisuje znak, którego kod ascii znajduje się na górze stosu. Wreszcie, zgodnie z tym samouczkiem , program musi kończyćLLL
się czystym wyjściem przez tłumacza.NB: Podaję to jako osobną odpowiedź, ponieważ druga pozycja programu WS to program o długości 1287 znaków, który wypisuje „Witaj, świecie przestrzeni!” zamiast wymaganego „Hello World”.
źródło
Ruby - 63 znaki
źródło
puts "Gdkkn~Vnqkc".split("").map(&:succ)*''
- 43C, 160 znaków
Działa tylko na maszynach little-endian z 4-bajtowym int:
Spełnia wszystkie trzy zasady.
źródło
p[];main(){p={(5*5*5*5*5*64+96696)*(443+5688),(5*3*4*3+4-3)*(66*45*6-6*6-4+3)*83*(3+4),6544494+36868};puts(p);}
- 111 znaków.x[]={45483*39994-3958,48465*38543-5584,6584695-3333};main(){puts(x);}
- 69 znaków. Jestem pewien, że mógłbym ogolić jeszcze kilka, mając więcej czasu na matematyzację literałów. W każdym razie był to świetny sposób na spędzenie kilku godzin :)PHP, 28 bajtów
Nie do końca zaciemnione, ale bardzo krótkie i oczywiste :). Pokazując, że nawet przy ograniczaniu znaków możesz bardzo łatwo śledzić programy. Przestrzegano ograniczeń 1 i 3. Ograniczenie 2 zostało naruszone.
Pamiętaj, że wymaga
short_open_tag
to ustawienia, chyba że używasz PHP 5.4 lub nowszego. Może niektóre przykłady są krótsze, ale myślę, że ten przykład jest dość krótki.źródło
bash 28 znaków:
alternatywnie z / bin / echo (18 znaków) *) patrz dyskusja poniżej.
Autotest:
Trudniej niż myślisz! Narzędzia do obracania słów do góry nogami, narzędzia uważają, że „H” lub „o” odwrócony do góry nogami najlepiej wyświetla się jako H lub o. Byłoby to w konflikcie z grupą 1 (Hlwd: 27: eor01) odpowiednio 3.
H można wyświetlić za pomocą
ale 01 i 2 są również zatrute. Ojej! Ale echo kompilacji bash ma nie tylko opcję wyświetlania ósemkowych wartości ascii, ale także szesnastkową:
Ale jeśli użyjemy bash jako języka programowania, polecenie echo jest częścią programu, który nie tylko liczy się do liczby znaków, ale także zawiera zatrute znaki (hlwd: 27: eor01) eho z grup 1 i 3.
To jest moment, w którym echo umarło. Na szczęście istnieje printf, który zna „% b” do wyświetlenia.
R jest jedyną problematyczną postacią w printf i należy do grupy 3. Ponieważ „o” jest w ostatniej grupie, moglibyśmy zostawić go w Hello i in World, ale możemy użyć omicronu ο, który wygląda jak o, lub °
°
.Spinki do mankietów:
źródło
C (94)
Na małych komputerach Endian:
Narusza regułę II, ale spełnia resztę.
źródło
JavaScript - 132 znaki
Łamie zasadę I.
Zastosowanie :
źródło
1
przez!![]+![]
i0
przez""-""
się nie łamią reguły # 2.!![]+![]
? Dlaczego nie tylko4-3
?Dis ,
10283 znakówRozwinięto pętlę kodu, ponieważ litery można wygenerować za pomocą mniej niż pięciu kolejnych operacji. Zapisano kilka znaków, ponownie wykorzystując wartość akumulatora: dwa
l
są kolejno,SPACE
mogą być generowane zo
id
mogą być generowane zl
.Stara wersja
Z komentarzami poniżej. Używa sekwencji pięciu identycznych operacji do wygenerowania wszystkich znaków
Hello World
: jeden obrót i cztery odejmowania.źródło
C: 162 znaków (bez niepotrzebnych znaków nowej linii)
Podczas pisania wybrałem czytelność i przejrzystość.
Spełnia wszystkie trzy wymagania.
źródło
7
, co narusza zasadę nr 3. Ale łatwo byłoby się go pozbyć7
. Ponadto, dodając kilkaint
s, dodając kilka dodatkowych nawiasów i dodającint puts(int*);
na początku, kompiluje sięgcc -ansi -W -Wall
tylko z jednym ostrzeżeniem: kontrola osiąga koniec funkcji nie-void .Bash,
2420 znakówMusisz mieć zainstalowany pakiet „bsdgames”.
Dzięki gnibbler :)
źródło
PostScript, 41 znaków
Stosowanie:
$ gs -q -dNOPROMPT -dNODISPLAY filename.ps
źródło
gsnd -q -- filename.ps
JavaScript, 66 znaków
Kolejne rozwiązanie JavaScript, tym razem łamiące zasadę nr 2.
Powyższe jest zgodne z ideą stojącą za odpowiedzią hallvabo. Zanim przyjąłem to podejście, miałem znacznie bardziej zaciemnioną wersję:
co również łamie zasadę nr 2 i występuje przy 114 znakach. (Usuń powrót karetki w tym drugim rozwiązaniu, ponieważ jest ono tam tylko dla czytelności).
źródło
unescape
.unescape
i grałem tylko rok ponad dziesięć lat temu ... Co jest ze mną nie tak?Haskell, 38
Przestrzegano ograniczeń 1 i 3.
źródło
Fourier, 39 bajtów
Fourier jest zawsze zaciemniony. Jest to zgodne ze wszystkimi zasadami.
Awaria:
Można to trochę ulepszyć.
źródło