Quelle: Dilbert, 8. September 1992
Ich hoffe, dem Klassiker "Hello World!" Programm.
Code ein Programm, das Hello World!
ohne ausgibt :
- String / Character Literale
- Zahlen (beliebige Basis)
- Vorgefertigte Funktionen, die "Hello World!"
- RegEx-Literale
Mit Ausnahme von "O" † und 0.
† "O" wird großgeschrieben, "o" ist nicht akzeptabel.
code-golf
hello-world
restricted-source
zzzzBov
quelle
quelle
"O"*
bedeutet , dass sie ein String-Literal mit einer beliebigen Anzahl von Os haben können, einschließlich Null. Ich glaube nicht, dass das die Absicht war. Bitte klären Sie.Antworten:
Windows PowerShell, viel zu viel
Ja, damals mussten wir eine »Hallo-Welt« mit (fast ausschließlich) Nullen schreiben ...
Im Ernst:
Windows PowerShell, 25
Kein String-Literal. Das
Hello World!
darin enthaltene Argument wird zufällig als Zeichenfolge analysiert, da sich PowerShell dort im Argument-Parsing-Modus befindet.quelle
C 327 Zeichen
Seltsamerweise verliert es nach der Vorverarbeitung nicht seine Schönheit:
quelle
BrainFuck, 102
111ZeichenErfüllt alle Regeln.
Dank geht an Daniel Cristofani .
quelle
0 and/or "O" must be used
. Für BrainFuck und golfscript ist es ein bisschen gemein, aber sie haben es nicht gerade schwer mit dieser Herausforderung.C 182 Bytes
quelle
C-Programm - 45
(Betrug)
Lexikalisch werden keine String-Literale oder Regex-Literale verwendet. Es nutzt die Stringifizierungsfunktion des C-Präprozessors.
s(x)
ist ein Makro, das sein Argument in einen String verwandelt.quelle
Haskell - 143 Zeichen
oy, das war wollig!
Keine Zahlen, keine numerischen Operationen, Variablen, die zur Unterhaltung umbenannt wurden.
Einige Ausführungen mögen nett sein:
o%y
,o&y
Undo!y
jeweils wendet die Funktiono
aufy
mehrere Male: 3, 9, und 29 - mal auf. 29?!?! Ja, 29!r
undw
sind das nächste und vorherige Zeichen, von denen bei Anwendung mit den oben genannten Funktionen höherer Ordnung alle benötigten Zeichen abgerufen werden können'O'
.Die Reihenfolge der benötigten Sprünge ist:
$
, umbenannt#
in!
für Umarmungen.quelle
r=succ
undw=pred
Verstöße gegen die Implementierung der Monomorphismus-Beschränkung durch Hugs. Wechseln zur x=succ x
undw x=pred x
es funktioniert (auf Kosten von 4 Zeichen). Dies scheinen Probleme in Umarmungen zu sein.Unary ,
10 1971137672766964589547169964037018563746793726105983919528073581559828 BytesIch bin überrascht, dass noch niemand dies getan hat ...
Es ist zu lang, um hier zu posten, aber es sind 1137672766964589547169964037018563746793726105983919528073581559828 Nullen.
Oder einfacher zu lesen: ~ 10 67 Nullen.
Vielen Dank an @dzaima für das Speichern von 10 197 Bytes
quelle
Mathematica 12 Zeichen
Nur Symbole, keine Zeichenketten.
Das ! ist ein Fakultätsoperator, aber da die Symbole Hello und World nicht definiert sind, wird die Eingabe unverändert zurückgegeben.
Wenn wir das Programm etwas modifizieren:
Dann wird gedruckt
12
(2 * 3!)quelle
i386-Assembly (Linux, gcc-Syntax),
440442435Heute ist mein Montagetag, und danach habe ich eine Weile genug.
Ich erlaubte mir Nummer 128, siehe unten Programm für die Diskussion, warum.Nichts Außergewöhnliches: Ich codiere nur "Hello World!" als Assembler-Opcodes, wo das ohne numerische Konstanten Sinn machte und im Rest mit Arithmetik gefüllt wurde.(Zusammenbauen mit
gcc -nostartfiles hello.S -o hello
, möglicherweise-m32
abhängig von Ihrem Bogen)Warum die Toleranz für 128? Ich brauche Syscalls, um etwas zu zeigen. Linux-Systemaufrufe erfolgen auf INT 80h (128 Dezimalstellen). Das einzige Operandenformat für INT ist das Sofortformat. Es ist also nicht möglich, dort etwas anderes als eine Konstante (für den Code) zu haben. Ich könnte (nachdem ich nüchtern geworden bin) versuchen, es als Funktion anderer symbolischer Konstanten im Code auszudrücken, wahrscheinlich n , aber das wird sehr langweilig , wenn man nicht viel davon gewinnt. Ich habe die Einschränkung für Zahlen gelesen, um ASCII-Codierung zu verhindern, und das tue ich hier definitiv nicht, deshalb fühle ich mich unschuldig genug, dies einzureichen. (FWIW, ich habe auch versucht, den Code selbst zu ändern, aber dieser Fehler ist aufgetreten.)Es sind jetzt auch keine 128 mehr vorhanden. Der Code ist rein!mov
mit CPP-Makros komprimiert ; die restlichen 128 beseitigt.quelle
Javascript - 305
Ein bisschen lang, aber ich mag die Methode.
quelle
OO
,OOO
aber das würde es natürlich länger machen.C # (131 Zeichen)
141 Zeichen142 ZeichenLesbar:
quelle
enum X{Hello,World,A,B=A<<A<<A}void Main(){var c=(char)X.B;(X.Hello.ToString()+c+++X.World+c).Dump();}
.ToString()
->+""
spart einige cahrsJavaScript, 88
99
Vielen Dank an @Timwi für die Vorschläge
Ternärer Operator entfernt:
103
aliasiert
String.fromCharCode
117
If-else auf Ternäroperator umgestellt
125
Ich behalte das
"O"
Recht, ein "O" im Programm zu haben.133
quelle
GolfScript, 63 Zeichen
Was, noch kein GolfScript-Eintrag?
Dieser verwendet ein einzelnes numerisches Literal
0
und eine Variable mit dem NamenO
(in der die Nummer gespeichert wird3
). Alles andere ist Arithmetik und Stapelmanipulation. Die ZeichenfolgeHello World!
wird zeichenweise aus ihren ASCII-Codes aufgebaut.So funktioniert das:
quelle
Brainfuck, 111 Bytes
Algorithmus erklärt
Längere Version ohne Schleife, 389 Bytes:
quelle
Lua
1449786 ZeichenEin anderer Ansatz basiert auf der Tatsache, dass Tabellenschlüssel auch Zeichenfolgen sind und dass #Hello == #World == 32 == string.byte '\ n'
145 char Lösung
Hat Delta-Codierung der Bytes, dann einige Primzahlen etc etc :)
Golf Version:
Kommentiert:
Bearbeiten: Mehrere O-Strings geändert und weitere Optimierungen gefunden.
quelle
Python (
126130)quelle
''
ist nicht erlaubt.[:0]
.J 250
Ich hatte viel zu viel Spaß damit, und ich habe ein bisschen mehr gelernt, um zu booten. Auch
ooo ooo ooo
kann der dümmste Code , den ich je geschrieben habe.quelle
QR mit Halbblöcken
(169)121 ZeichenMit QR-Code unter Verwendung von UTF-8-Halbblöcken:
Leider wird dies dort nicht gut wiedergegeben. Es gibt ein kleines Snippet mit passendem Style Sheet, aber .. Nein! Die hier dargestellte Sprache ist kein HTML! Die hier präsentierte Sprache ist QR Code ! (HTML und CSS werden hier nur verwendet, um den Präsentationsfehler zu umgehen!)
Code-Snippet anzeigen
QR mit Halbblöcken (169)
Im Idealfall könnte dies so aussehen:
quelle
zbar
unter Linux zu sehen. (Beispiel:xwd | xwdtopnm | zbarimg /dev/stdin
)Code golf!
ein Zeichen nicht wörtlich?postscript
,svg
oder andere Präsentation Sprachen bereits dort verwendet !? Eine Art zu kodieren ist sowieso eine Sprache ... Ich denke!Scala (
357423361 Zeichen)Leider nicht die kürzeste Antwort, aber in der Hoffnung, Bonuspunkte für die Verwendung von
'O'
und zu erhalten'0'
Vorher:
Alte (illegale) Version:
quelle
""
) und Zeichenfolgen / Zeichenliterale mit dem Zeichen Null ('0'
) sind nicht zulässig. Nur die Zeichenfolge"O"
(Großbuchstabe O) und die Nummer0
sind.C (oder C ++) (Körpersegment: 49) (Betrug)
Kompilieren Sie beim Kompilieren in eine aufgerufene Binärdatei.
Hello\ World\!
Der Code lautet:Das
strrchr
Segment muss den vollständigen Pfad entfernen, wenn der übergebene Programmname den vollständigen Pfad enthält. Außerdem müssen keine Argumente übergeben werden .Eine typische Kompilierungszeile könnte sein:
gcc -o Hello\ World\! foo.c
quelle
C ++, 141,
146Das erste Mal, wenn Sie eines dieser Programme ausprobieren, kann sich wahrscheinlich noch einiges verbessern:
BEARBEITEN:
Hat den Divide-Trick von einem anderen Post gestohlen, kann nicht glauben, dass ich nicht daran gedacht habe :(
quelle
std::
Haskell - 146
Ich dachte, Pattern Matching würde Haskell einen großen Schritt nach oben bringen, insbesondere weil Sie Potenzen von zwei wie folgt initialisieren können:
Wie in der Haskell-Antwort von MtnViewMark (die übrigens viele, viele positive Stimmen verdient) und anderen Antworten zu sehen ist, kann eine bessere Komprimierung erzielt werden, wenn mehr als nur
+
und verwendet werden-
.quelle
Clojure - 46 Zeichen
Beachten Sie, dass
Hello
undWorld!
Symbole sind, keine Literale jeglicher Art.quelle
C ++
quelle
100
verstößt gegen die Regel über Zahlen. Bitte ersetzen Sie es durch etwas amüsanteres.Line 7: error: ISO C++ forbids declaration of 'main' with no type
int
g ++PHP - 49 Zeichen
Änderungsprotokoll :
quelle
<?$a=-~-~-~0;echo Hello.chr($a.$a-1).World.chr($a.$a);
funktioniert, aber es ist 54 Zeichen.1
da drin gelassen . Dort gehe ich meine eigenen Regeln brechen ...<?$a=-~-~-~0;echo Hello,chr($a.~-$a),World,chr($a.$a);
ist, was ich hätte verwenden sollen, immer noch 54 Zeichen.Python, 106
quelle
Perl, 186 Bytes
Jedes Zeichen wird über seine Ordnungszahl gedruckt, die der Länge eines Arrays entspricht. Der Aufbau der Arrays wird über die binäre Darstellung der Zeichenzahlen optimiert.
Ungolfed:
quelle
Java 389 Zeichen
eine unnötige Erklärung entdeckt
History ist in der Edit History nun die original ungolfed version lesbar:
quelle
Perl 6 , 199 Bytes
(Zeilenumbrüche werden hinzugefügt, um die Breite zu verringern, sind jedoch nicht erforderlich, werden also nicht gezählt.)
Hello World!
ist als eine Liste von Listen der Potenzen von 2 jedes Buchstabens codiert.Es gibt genau einen Ort, an dem ich ein Literal habe
0
, das für etwas anderes als a verwendet wird0
. Es wird verwendet, um eine Liste mit einem Element zu erstellen, die sofort in die Zahl1
mit dem numerischen Präfixoperator (+[0]
) umgewandelt wird.quelle
JavaScript 662 Zeichen
Was ist mit dem Missbrauch von Array-Literalen, nur um eine unäre Basis zu haben? Dieses Programm hat den Vorteil, dass es nicht verwendet wird
0
.quelle
0
. Was istO_O=0;
?O_O=[].length
kann so geschrieben werdenO_O=false
, dass es um 4 abnimmt.