Verwenden Sie jedes dieser Symbole mindestens einmal in Ihrem Quellcode:
! " # $ % & ' () * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
Symbole in Kommentaren, String-Literalen, Regexps (oder anderen Arten von Literalen usw.) zählen nicht (aber ihre Begrenzer wie /**/
oder ""
zählen).
Das Programm sollte keine Aktion ausführen. Es muss nur kompiliert werden und beim Ausführen nichts tun.
Wenn aus irgendeinem Grund einige der Symbole nicht in der Sprache Ihrer Wahl verwendet werden können, erklären Sie dies genau (was und warum muss ausgeschlossen werden).
Update: Einige Antworten verwendeten Symbole mit regulären Ausdrücken. Ich halte das für etwas problematisch, es ist dasselbe wie das Einfügen in Zeichenkettenliterale oder Kommentare (deshalb setze ich usw. in diese Anforderung ein). Bitte versuchen Sie es ohne diese. Ich habe auch die obigen Anforderungen aktualisiert.
Update: Kürzester Code gewinnt (markiert als Code-Golf ). Wie vorgeschlagen, werden wir höchstwahrscheinlich ein paar Kriterien brauchen, nach denen der Gleichstand gewährleistet ist. Ich schlage vor, dass bei einem Gleichstand die ASCII-Symbole so geordnet wie möglich angezeigt werden. Formal: Filtern Sie das erste Vorkommen aller aufgelisteten Symbole aus einem Programm heraus. Dies führt zu einer Permutation der aufgelisteten Symbole. Das Programm mit der geringeren Inversionszahl seiner Permutation gewinnt.
Update: Ich würde mich freuen, einige / mehr Lösungen in regulären / Standard-Sprachen zu sehen, wie C (++), Java, Scala, Haskell usw.
quelle
@%
das Backtick kann in c erscheinen, außer als Teil eines Literales (in ausreichend neuen Versionen%
kann c in Digraphen erscheinen). (und#
erscheint nur in Präprozessor-Direktiven, aber damit müssen wir einfach leben)? Das heißt, ich fordere, dass Matts Ansatz ausdrücklich legalisiert wird.#
,@
und `außerhalb jeglicher Art von Literal nicht legalAntworten:
Brainf * ck, 32 Zeichen
Druckt ein Smiley-Gesicht (wenn Ihre Konsole das ASCII-Symbol 1 ausgeben kann)
Ja, eine Branf * ck-Lösung, die Golfscript schlägt! : P
Wenn Sie auf keine Ausgabe bestehen, tauschen Sie einfach das
+
und aus.
:quelle
Perl, 32 Zeichen
Keine versteckten Symbole in Kommentaren, String-Literalen oder regulären Ausdrücken. Verwendet alle Symbole genau einmal.
Beschreibung
Ich habe versucht, die Priorität eines Operators durch Einrückung anzuzeigen: Die Ausdrücke ganz rechts werden vor den Ausdrücken ganz links ausgewertet
quelle
`<@"^[(\{_},)]/+-~%'?&|:!*.=>
?$`
,@"
,%'
, und*.
(ein Skalar, Array, Hash und Typeglob, respectively), obwohl es sicher zu sein , furchtbar schwer. . .Leerzeichen, 32
Alle Zeichen, die keine Leerzeichen sind, werden ignoriert. Dies ist also ein leeres Programm
quelle
Python 65
Ich habe die Zeichen
?
und$
in einem String-Literal verwendet. Diese Zeichen sind außerhalb von Zeichenfolgenliteralen oder Kommentaren nicht zulässig .quelle
{[`'"$?'`,]}
ist nicht gültig, da ein Wörterbuch mit einem Schlüssel ohne zugeordneten Wert erstellt wird. Sie können es mit zwei weiteren Zeichen wie{[`'"$?'`,]:0}
PHP, 32 Zeichen
Wahrscheinlich ein kleiner Troll, ist dieses PHP-Programm auch eine QUINE und verwendet alle Symbole in der exakten Reihenfolge, in der sie aufgelistet sind.
Die Ausgabe wird über die Befehlszeile ausgeführt und entspricht einfach dem Inhalt der Datei, da
<?php
der Interpretor nicht aufgerufen werden kann.quelle
Perl 6 (43 Zeichen)
Definieren wir einen Infix-Operator mit einem eher ungewöhnlichen Namen:
Es ist weder ein Literal noch ein Literal in einer RE oder irgendetwas, das in einem Kommentar verborgen ist. Du glaubst mir nicht? Das Ausführen des folgenden Programms gibt "2" aus:
Aber ich bin mir ziemlich sicher, dass Ihr Nitpicker die Regeln weiter ausdehnen werdet, um eine Neudefinition der Sprache selbst auszuschließen und uns Perlgummis unglücklich zu machen. :(
quelle
Haskell, 53
Wir können das etwas kürzer machen
45
aber dieses Programm nicht beenden, und Verwendungen mehr Zeichen (
'!'
,'<'
,'|'
) in der neu definierten Infix.quelle
k (33 Zeichen)
Sehr einfach in k.
"
Muss leider gepaart werden.quelle
GolfScript (33 Zeichen)
"
muss gepaart werden. Es dauerte ein wenig Versuch und Irrtum, bis es nichts ausgab - die meisten anderen Positionen des:'
Ergebnisses in irgendeiner Ausgabe.quelle
J, 33 Zeichen
'
muss verdoppelt werden, um Syntaxfehler zu vermeiden.Bei meiner ersten Antwort fehlten einige Symbole.
quelle
C 48 Zeichen
Art zu betrügen.
quelle
#define Q(_) "##_##"
...char*c=Q(~''*+,-./:<=>?[]
| \); `. Nichts in einer Zeichenkette, es wird nur in eins umgewandelt ... Es wäre natürlich länger."";
), aber$@
Backtick scheint hoffnungslos.#define Q(_) #_
. Der Präprozessor würde dies"##_##"
als String-Literal behandeln.Postscript - 32 Zeichen
Führt zu einem Objekt auf dem Stapel, hat aber sonst keine Auswirkungen. Postscript erlaubt fast jedes Zeichen in einem Bezeichner, mit Ausnahme
<>()[]{}/
der speziellen Syntaxformen und%
der Einführung eines Kommentars. Das Programm ist als tokenizedquelle
C # (91 Zeichen)
Soweit ich weiß, ist das $ -Zeichen kein gültiges Zeichen außerhalb von String-Literalen, daher habe ich es in meiner Antwort nicht verwendet.
EDIT : Dank Peter Taylor habe ich den Code verkürzt.
quelle
#if A
...#endif
ist kürzer als#region
...#endregion
. Und"x"[0]+
ist kürzer als[System.STAThread]
.PowerShell (52 Zeichen)
Ich musste das ^ -Zeichen als String-Literal eingeben, da das ^ -Zeichen meines Wissens kein zulässiges PowerShell-Zeichen außerhalb von String-Literalen ist. Korrigiere mich, wenn ich falsch liege.
Die einzige Möglichkeit, in das : -Zeichen zu passen, besteht darin, den :: -Operator zu verwenden, um eine statische Methode aufzurufen.
quelle
Schema, 41 Zeichen
Dies nutzt die unglaubliche Toleranz von Schema für Zeichen in Variablennamen. In diesem Programm erstelle ich eine Variable mit dem Namen! $% & * +, -. /: <=>? @ [] ^ _ `{|} ~, Die das Schema gerne annimmt.
quelle
Tcl 37 Zeichen
Definiert eine Variable
!#$%&'()*+,-./:<=>?@[]^\_`|~
mit einer leeren Zeichenfolgequelle
C:
8356 ZeichenAt-Zeichen und Backticks sind nicht Teil der erlaubten C-Syntax, daher habe ich sie in Anführungszeichen gesetzt.
quelle
(b)
? Es ist seltsame Syntax und eine Verschwendung von Zeichen.0.0
ist sie viel kürzer.main(_,$)
wird einen Charakter retten.x?:y
, aber es ist nicht Standard C.Common Lisp, 33 Zeichen
Der Hauptteil des Obenstehenden bewertet (oder würde es eher bewerten, wenn nicht für das
#+()
davor) das Symbol mit dem Namen:Die
#+()
Ausgabe soll vermieden werden. Ich bin nicht sicher, ob die|foo|
Syntax für Symbole als Literal gilt, aber Symbole werden in Common Lisp als Variablen- / Funktionsnamen verwendet, und es gibt einige Antworten, in denen bereits die erforderlichen Zeichen verwendet werden.quelle
Smalltalk (Squeak 4.x Dialekt) 38 Zeichen
Implementieren Sie diese Methode in Object. Die Syntax ist gültig, wenn Voreinstellungen Unterstreichungszuweisung zulassen (dies ist die Standardeinstellung).
deklarieren Sie Z als globale Variable im Popup-Menü, falls interaktiv
Erklärungen:
Verdammt, wer hat gesagt, dass Smalltalk lesbar ist?
Beachten Sie, dass ich nicht geschummelt habe, das einzige ungültige Zeichen wird in ein wörtliches Zeichen geschrieben. EDIT siehe unten, das war eine falsche Aussage (zumindest in Squeak)
Mit diesem Trick können wir es aber auf 34 Zeichen bringen
Diesmal:
Streng genommen können wir das als Betrug ansehen ... Es ist keine wörtliche Zeichenfolge, aber es ist immer noch eine nicht leere wörtliche Zeichenfolge ...
Ich muss das Anführungszeichen "" immer noch verdoppeln (es sei denn, ich mache ein wörtliches Zeichen mit $ ", aber dann muss ich das Anführungszeichen '' verdoppeln).
Ich muss immer noch einen Buchstaben für den Parameter verwenden (_ wird nicht akzeptiert, auch wenn Wir setzen Preferences allow underscore in selector auf true.
Was schön ist, ist, dass wir sogar die Methode ausführen können, zum Beispiel die Nachricht mit Argument 2 an 1 senden:
EDIT Endlich in 35 Zeichen ohne zu schummeln
Anmerkungen:
quelle
R: 108 Zeichen
Die längste Einreichung, aber um Symbole
@
und$
in R verwenden zu können, müssen wir ein Objekt erstellen, das Slots (indiziert mit@
) und benannte Elemente (indiziert mit$
) hat.Die kürzeste Lösung, die ich mir vorstellen konnte, bestand darin, eine neue Objektklasse (
a=new(setClass("a",representation(b="list")))
) zu erstellen , die ihren Tribut fordert. Ansonsten trennen Sie sich von den Klassikern, die keine Erklärungen benötigen (wie!=
,#
oder1:2
).Erstellt einen neuen Operator, der das Gleiche tut wie der Operator
?
(dh er ruft die Hilfeseite des Elements auf, dem er vorangeht).%*%
berechnet das innere Produkt zweier Matrizen (hier von1^1
und.1
).Symbol
_
tut nichts (AFAIK) in R, wird aber routinemäßig in Variablen- oder Funktionsnamen verwendet, wie es hier der Fall ist.quelle
TI-Basic, 36
quelle
End
Beendet eine Schleifenanweisung, nicht das Programm. Ich denke du meintestReturn
.