Erstellen Sie das kürzestmögliche verschleierte Programm, das den Text "Hello World" anzeigt.
Um als verschleiertes Programm zu gelten, müssen mindestens zwei der folgenden Anforderungen erfüllt sein:
- Hat nicht die Zeichen:
h
,l
,w
undd
in jedem Fall - Hat nicht die Zeichen:
e
,o
,r
,0
, und1
in jedem Fall - Enthält nicht die Zeichen:
2
oder7
Eingabe:
keine
Ausgabe:
Hello World
code-golf
obfuscation
hello-world
restricted-source
Kevin Brown
quelle
quelle
import
in Python ist das nicht erlaubt.72
ist"H"
, warum ich diese beidenAntworten:
GolfScript, 17 Zeichen
Speichern Sie beim Testen dieser Übermittlung die Datei als Binärdatei und nicht als UTF-8. Probleme beim Neuerstellen der Datei? Hier ist der Hexdump davon:
quelle
Perl
Da die offensichtliche Antwort eine Art Verschiebung verwendet, fühle ich mich verpflichtet, etwas mit Acme :: EyeDrops zu posten , aber mit der zusätzlichen Kraft, die ich für ein wenig unterhaltsamer hielt.
Vorbehalt
Seit Perl Version 5.18 ist der Mechanismus, mit dem dieser Code ausgeführt werden kann, so leistungsfähig, dass er standardmäßig deaktiviert wurde, um Missbrauch zu verhindern. Daher können Sie
use re 'eval';
in den Versionen 5.18+ entweder das Skript ganz oben einfügen oder, wenn der Name des Skripts angegeben istworld.pl
, es wie folgt ausführenperl -Mre=eval world.pl
. Es ist bedauerlich, dass diese unansehnlichen Charaktere hinzugefügt werden müssen, aber c'est la vie. (Hinweis: Ich möchte betonen, dass für die Aktivierung dieser Funktion keine Bibliothek oder kein Addon verwendet wird. Der angezeigte Code ist gültiger Perl-Code. Der Mechanismus ist einfach nicht mehr standardmäßig aktiviert.)quelle
(?{ code })
, um benutzerdefinierten Perl-Code während des Regexp-Abgleichs auszuwerten. Der benutzerdefinierte Perl-Code druckt die Nachricht. Es ist schön, weil es keine der Regeln verletzt.C # (175 Zeichen)
Dies in C # zu tun, war eine ziemliche Herausforderung, da die Einschränkungen die Verwendung einer Vielzahl der gebräuchlichen Schlüsselwörter ausschließen. In C # ist es möglich, \ uxxxx Unicode-Escape-Sequenzen in Bezeichnern zu verwenden, aber leider nicht in Schlüsselwörtern.
Ich vermute, dass diese Lösung nur bei der Kompilierung mit .NET 4.0 funktioniert. Siehe Erklärung warum.
Erläuterung
quelle
Uri
anstelle vonobject
für verwendenb
. Sie können\xHH
Zeichenfolgen verwenden, anstatt\u00HH
sie eindeutig anzugeben (\x
variable Länge). Beim zweiten Gedanken brauchst du gar nichtsb
und kannst es einfachc
als erstes Argument wiederverwendenInvoke
. MSDN gibt an, dass bei statischen Methoden das erste Argument ignoriert wird. Das bringt es für mich auf 175.Invoke
etwas sein kann, muss es nicht einmal seinc
, es könnte sein0
... :)c
(was leider nicht funktioniert, danew
es ein erforderte
und.Split('x')
zu lang ist (kam um 177 heraus).GetMethods
. +1BrainFuck, 106 Schläge
Erfüllt alle Regeln und ist sicher verschleiert.
quelle
++++++++++[>++++++>+++<<-]>++++++++++++.---.+++++++..+++.>++.<++++++++.--------.+++.------.--------.
ist nur 100 Schläge, meins ist besser als deinsJavascript, 2595
Dies verstößt nur gegen Regel 2.
quelle
. That's followed by a comment and the expression
['_']" im ungültigen Kontext ein reguläres Ausdrucksliteral (dh "/ m m")) ~ ┻━┻ / ") zugewiesen . Dann wird der Variableno
(zusammen mit_
und(゚ー゚)
) der Wert 3 zugewiesen. Sie wird in diesem Sinne fortgesetzt, indem sie viele zusätzliche harmlose Arbeiten ausführt, die praktisch nicht ausgeführt werden, und auf Umwegen die beabsichtigte Arbeit (Aufrufalert("Hello world")
) in nicht offensichtlicher Weise ausführt Mode.Befunge-93 - 10x9 Block
Es tut uns leid. : D
Ich wollte hier nicht zu klein werden, ich habe versucht, den Code wirklich zu verschleiern , indem ich so viele Smileys und Geräusche wie möglich eingebunden habe ! : D
Sollte mit den Regeln 2 und 3 gehen.
quelle
Golfscript - 17 Zeichen
Einfacher zu kopieren / einfügen als bei Chris
Grundsätzlich eine um 1 Zeichen verschobene Caesar-Chiffre
quelle
e
drinPython
Regel I & III (34 Zeichen)
Regel I & III, alternativ (39 Zeichen)
Regel II & III (37 Zeichen)
Regel I und II (50 Zeichen)
Alle drei Regeln (58 Zeichen)
quelle
import codecs
bevor Sie könnencodecs.decode
JavaScript, 366 Zeichen
Nachdem ich die Perl-Lösung von Joel Berger gesehen hatte, fühlte ich mich gezwungen, selbst etwas ASCII-Kunst zu machen ... JavaScript, verwendet keine alphanumerischen Zeichen und hat im Gegensatz zur JSFuck-Ausgabe eine vernünftige Größe.
quelle
($)
verwandelt sich in()
(weil ich$
für Symmetrie hinzugefügt habe ).rot13 - 11 Zeichen
Uryyb Jbeyq
2019/2/12: Diese Antwort wird aus historischen Gründen aufbewahrt und ist nach den aktuellen Site-Regeln keine gültige Antwort mehr.
quelle
Bash,
3025 ZeichenVielen Dank an Peter Taylor für die Herestring-Nutzung.
quelle
tr G-t F-s<<<Ifmmp\ Xpsme
Scala, 39
Lösungen wie print ("Qnuux)` x {um "map (_- 9 toChar)) (35 Zeichen) verstoßen gegen die Regeln 1 und 2 (" toChar "enthält sowohl" h "als auch" r ") etwas zäh.
Endlich ist es soweit:
Verbesserungsvorschläge willkommen
quelle
TeX, 95 Bytes
Verstößt gegen die dritte Regel.
Führen Sie mit aus
tex filename.tex
, um eine DVI-Ausgabe oderpdftex filename.tex
ein PDF zu erhalten.quelle
> <> , 2 × 20 = 40 Zeichen
Verstößt gegen Regel II, da ich kein Zeichen ohne Verwendung von ausgeben kann
o
.quelle
Windows PowerShell, 91
959798Verstößt nur gegen Regel II.
Es ist sehr böse, dass bereits
char
zwei Regeln allein verletzt werden.Und yikes, dieser war schwer zu arbeiten.
$OFS
,''
dass beim Umwandeln eines Arrays in eine Zeichenfolge keine Leerzeichen zwischen Elementen angezeigt werden.char
war der schwierigste Teil von allen und ich verbringe einen ganzen Tag damit, nach einem Weg zu suchen. Ich habe den ganzen Rest gut zum Laufen gebracht, aber sobald ich Berechnungen an ihnen vorgenommen habe, habe ichint
s, nichtchar
s. Diese wieder in eine Schnur zu stecken, war ein bisschen schwierig.Ich habe einen Weg gefunden, um
Invoke-Expression
ohne dase
auch aufzurufen :Dem fehlten aber noch die Argumente. Und ich habe mein Ziel, alle drei Regeln zu erfüllen, bereits verworfen. Auch hat es mir beim Casting nicht besonders geholfen
char
.Mit einer neueren PowerShell-Version etwas verkürzt. Leider ergab sich jedoch keine sinnvolle andere Art, das Ergebnis zu erzielen.
quelle
PHP (16 Bytes)
Ich habe bemerkt, dass mein vorheriges PHP-Beispiel nicht genug verschleiert war, also sehen wir uns unverhohlenere Beispiele an (Warnung, Verschleierung!). Außerdem wird eklatant GolfScript kopiert, außer es kleiner zu machen (ist es überhaupt möglich?). Dieser Eintrag erfordert entweder PHP 5.4 oder
short_open_tag
aktiviert. Dabei wurde keine Regel verletzt. Tatsächlich enthält dieser Eintrag keine ASCII-Buchstaben oder -Ziffern.In diesem Beispiel wird keine der Regeln verletzt. Habe Spaß. Führen Sie den folgenden Befehl aus, um eine Datei zu generieren.
Für den Fall, dass Sie dem Ausführen von
printf
Befehlen nicht vertrauen , habe ich einen Base64-Dump der Datei vorbereitet.Wenn Sie denken, dass beide Methoden zum Generieren Regeln brechen, habe ich auch eine Datei auf Dropbox generiert .
Und es laufen zu lassen.
Die resultierende Datei sollte 16 Bytes haben. Viel Spaß beim Laufen. Bitte beachten Sie, dass bei
E_NOTICE
aktivierten Warnungen ein Hinweis angezeigt wird. Ignoriere es einfach, es zu reparieren würde verschwendenzwei Zeichenein Zeichen (ich kann schließlich@
Operator verwenden) und würde das Ergebnis von Base64 weniger gut aussehen lassen.quelle
Leerzeichen (167 Zeichen)
Um das WS-Programm zu erhalten, ersetzen Sie S, T, L durch ein Leerzeichen, einen Tabulator oder einen Zeilenumbruch in der folgenden Zeichenfolge:
oder laden sie das "raw" whitespace-only programm in der textdatei hello.ws herunter .
Bei Ausführung durch diesen WS-Interpreter gibt dieses Programm "Hello World" aus.
Erklärung (ignorieren Sie das Leerzeichen hier!):
Die "mittleren" Zeichenfolgen (z. B.
TSSTSSSL
) sind die ASCII-Codes (in Binärform, mit derS
Bezeichnung 0, mit derT
Bezeichnung 1) für die aufeinanderfolgenden Buchstaben in "Hello World". Das PräfixSSS
schiebt die darauf folgende (mit einem abgeschlosseneL
) Nummer auf den Stapel.TLSS
gibt das Zeichen aus, dessen ASCII-Code sich oben auf dem Stapel befindet. Schließlich muss nach diesem Tutorial ein Programm mit enden, damitLLL
der Interpreter es sauber beenden kann .NB: Ich gebe dies als separate Antwort ein, da der andere WS-Programmeintrag ein Programm mit 1287 Zeichen ist, das "Hallo Welt der Räume!" anstelle der erforderlichen "Hallo Welt".
quelle
Ruby - 63 Zeichen
quelle
puts "Gdkkn~Vnqkc".split("").map(&:succ)*''
- 43C 160 Zeichen
Funktioniert nur auf Little-Endian-Rechnern mit 4-Byte-Int .:
Erfüllt alle drei Regeln.
quelle
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 Zeichen verwenden.x[]={45483*39994-3958,48465*38543-5584,6584695-3333};main(){puts(x);}
- 69 Zeichen. Ich bin sicher, ich könnte ein paar mehr abnehmen, wenn ich mehr Zeit hätte, um die Literale noch ein bisschen besser zu verstehen. War eine lustige Art, ein paar Stunden zu verbringen, sowieso :)PHP, 28 Bytes
Nicht genau verschleiert, aber sehr kurz und offensichtlich :). Dies zeigt, dass Sie selbst beim Begrenzen von Zeichen sehr einfach Programme folgen können. Die Bedingungen 1 und 3 folgten. Einschränkung 2 wurde missbraucht.
Beachten Sie, dass dies
short_open_tag
festgelegt werden muss, es sei denn, Sie verwenden PHP 5.4 oder höher. Vielleicht sind einige Beispiele kürzer, aber ich denke, dass dieses Beispiel ziemlich kurz ist.quelle
Bash 28 Zeichen:
alternativ mit / bin / echo (18 Zeichen) *) siehe Diskussion unten.
Selbsttest:
Härter als gedacht! Werkzeuge, um Wörter auf den Kopf zu stellen. Die Werkzeuge denken, ein auf den Kopf gestelltes 'H' oder 'o' wird am besten als H oder o angezeigt. Dies würde im Widerspruch zu Gruppe 1 (Hlwd: 27: eor01) bzw. 3 stehen.
H kann mit angezeigt werden
aber 01 und 2 sind auch vergiftet. Gee! Das Bash-Build-Echo bietet jedoch nicht nur die Möglichkeit, oktale ASCII-Werte anzuzeigen, sondern auch hexadezimal:
Wenn wir jedoch bash als Programmiersprache verwenden, ist der Befehl echo Teil des Programms, der nicht nur zur Anzahl der Zeichen zählt, sondern auch die vergifteten Zeichen (hlwd: 27: eor01) eho aus den Gruppen 1 und 3 enthält.
Dies ist also der Moment, in dem das Echo gestorben ist. Zum Glück gibt es printf, das "% b" anzeigt.
Das r ist das einzige problematische Zeichen in printf und gehört zur Gruppe 3. Da 'o' zur letzten Gruppe gehört, können wir es in Hello und in World belassen , aber wir können das Omikron ο verwenden, das wie ein o oder aussieht °
°
.Links:
quelle
C (94)
Auf kleinen Endian-Maschinen:
Verstößt gegen Regel II, erfüllt aber den Rest.
quelle
JavaScript - 132 Zeichen
Pausen regiere ich
Verwendung :
quelle
1
durch!![]+![]
und0
durch""-""
brechen nicht Regel # 2.!![]+![]
? Warum nicht einfach4-3
?Dis ,
10283 ZeichenEntrollte die Codeschleife, da die Buchstaben mit weniger als fünf aufeinanderfolgenden Operationen erzeugt werden können. Durch Wiederverwendung des Akkumulatorwerts wurden einige Zeichen gespeichert: Zwei
l
sind aufeinanderfolgend,SPACE
können aus generiert werdeno
undd
können aus generiert werdenl
.Alte Version
Mit Kommentaren unten. Es verwendet eine Folge von fünf identischen Operationen, um alle Zeichen zu erzeugen
Hello World
: eine Drehung und vier Subtraktionen.quelle
C: 162 Zeichen (ohne unnötige Zeilenumbrüche)
Ich habe mich beim Schreiben für Lesbarkeit und Transparenz entschieden.
Es erfüllt alle drei Anforderungen.
quelle
7
, die Regel # 3 verletzt. Aber es wäre leicht, sie loszuwerden7
. Durch Hinzufügen einigerint
s und einiger zusätzlicher Klammern sowie durch Hinzufügenint puts(int*);
am Anfang wirdgcc -ansi -W -Wall
nur mit einer einzigen Warnung kompiliert : Die Steuerung erreicht das Ende der nicht ungültigen Funktion .Bash,
2420 ZeichenSie müssen das Paket "bsdgames" installiert haben.
Danke gnibbler :)
quelle
PostScript, 41 Zeichen
Verwendungszweck:
$ gs -q -dNOPROMPT -dNODISPLAY filename.ps
quelle
gsnd -q -- filename.ps
JavaScript, 66 Zeichen
Eine weitere JavaScript-Lösung, die diesmal gegen Regel 2 verstößt.
Das Obige folgt dem Konzept hinter der Antwort von hallvabo. Bevor ich zu diesem Ansatz kam, hatte ich die wohl eher verschleierte Version:
das bricht auch Regel # 2 und kommt bei 114 Zeichen. (Entfernen Sie den Wagenrücklauf in dieser zweiten Lösung, da er nur der Lesbarkeit halber vorhanden ist.)
quelle
unescape
.unescape
und vor über einem Jahrzehnt nur ein Jahr lang gespielt ... Was ist los mit mir?Haskell, 38
Die Bedingungen 1 und 3 folgten.
quelle
Fourier, 39 Bytes
Fourier ist immer verschleiert. Dies folgt allen Regeln.
Nervenzusammenbruch:
Dies könnte vielleicht ein wenig verfeinert werden.
quelle