En particulier, utilisez chacun de ces symboles au moins une fois dans votre code source:
! " # $ % & ' () * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
Les symboles à l'intérieur des commentaires, des littéraux de chaîne, des expressions régulières (ou tout autre type de littéral, etc.) ne comptent pas (mais leurs délimiteurs tels que /**/
ou ""
comptent).
Le programme ne doit effectuer aucune action. Il suffit de compiler et de ne rien faire lors de son exécution.
Si, pour une raison quelconque, certains symboles ne peuvent pas être utilisés dans la langue de votre choix, expliquez-le rigoureusement (ce qui et pourquoi doivent être exclus).
Mise à jour: quelques réponses utilisaient des symboles contenant des expressions régulières. Je considérerais cela un peu problématique, c'est la même chose que de les mettre dans des chaînes de caractères ou des commentaires (c'est pourquoi je mets etc. dans cette exigence). Veuillez essayer sans cela. J'ai également mis à jour l'exigence ci-dessus.
Mise à jour: gain de code le plus court (étiqueté comme code-golf ). Comme suggéré, nous aurons probablement besoin de quelques critères de départage. Je suggère que s'il y a égalité, celle gagnante est celle dans laquelle les symboles ASCII apparaissent le plus ordonnés possible. Formellement: filtrer la première occurrence de chacun des symboles répertoriés d'un programme. Cela se traduira par une permutation sur les symboles répertoriés. Le programme avec moins de nombre d'inversion de sa permutation gagne.
Mise à jour: je serais heureux de voir des solutions / plus dans les langages ordinaires / traditionnels, tels que C (++), Java, Scala, Haskell, etc.
la source
@%
ni le backtick peut apparaître en c sauf dans le cadre d'un littéral (dans des versions suffisamment nouvelles de c%
peut apparaître dans les digraphes). (et#
n'apparaît que dans les directives du préprocesseur, mais nous devrons simplement vivre avec cela)? Autrement dit, je demande que l'approche de Matt soit explicitement rendue légale.#
,@
et `ne sont pas légaux en dehors de toute sorte de littéralRéponses:
Brainf * ck, 32 caractères
Imprime un visage souriant (si votre console peut afficher le symbole ASCII 1)
Oui, une solution Branf * ck qui bat Golfscript! : P
Si vous n'insistez sur aucune sortie, échangez simplement le
+
et.
:la source
Perl, 32 caractères
pas de masquage de symboles dans les commentaires, les littéraux de chaîne ou les expressions régulières. utilise tous les symboles avec précision une seule fois.
La description
j'ai essayé d'indiquer la priorité de l'opérateur avec une indentation: les expressions les plus à droite sont évaluées avant celles à leur gauche
la source
`<@"^[(\{_},)]/+-~%'?&|:!*.=>
?$`
,@"
,%'
et*.
(un scalaire, tableau, hachage, et typeglob, respectivement), mais il est terriblement difficile d'être sûr. . .Espace, 32
tous les caractères non blancs sont ignorés, donc c'est en fait un programme vide
la source
Python 65
J'ai utilisé les caractères
?
et à l'$
intérieur d'un littéral de chaîne. Ces caractères ne sont pas autorisés en dehors des littéraux de chaîne ou des commentaires.la source
{[`'"$?'`,]}
n'est pas valide, car il crée un dictionnaire avec une clé sans valeur associée. Vous pouvez le rendre valide avec deux autres personnages comme ceci:{[`'"$?'`,]:0}
PHP, 32 caractères
Probablement un peu troll, ce programme PHP est également un QUINE , et utilise tous les symboles dans l'ordre exact où ils sont répertoriés.
Exécutée à partir de la ligne de commande, la sortie sera simplement le contenu du fichier, car il n'y a pas
<?php
d'invoquer l'interpréteur.la source
Perl 6 (43 caractères)
Définissons un opérateur infixe avec un nom assez inhabituel:
Ce n'est ni un littéral ni un littéral dans une RE ou quoi que ce soit caché dans un commentaire. Tu ne me crois pas? L'exécution du programme suivant produira "2":
Mais je suis tout à fait sûr que vous, les imbéciles, élargirez encore les règles pour exclure la redéfinition du langage lui-même afin de nous rendre mécontents. :(
la source
Haskell, 53
Nous pouvons faire un peu plus court
45
Toutefois , ce programme ne se termine pas, et utilise plus de caractères (
'!'
,'<'
,'|'
) dans le infix nouvellement défini.la source
k (33 caractères)
Très facile en k. Malheureusement,
"
doit être jumelé.la source
GolfScript (33 caractères)
"
doit être jumelé. Il a fallu un peu d'essais et d'erreurs pour qu'il ne produise rien - la plupart des autres positions du:'
résultat dans une sortie.la source
J, 33 caractères
'
doit être doublé pour éviter les erreurs de syntaxe.Ma première réponse manquait de symboles.
la source
C, 48 caractères
Type de tricherie.
la source
#define Q(_) "##_##"
...char*c=Q(~''*+,-./:<=>?[]
| \); `. Rien dans une chaîne, il est juste converti en un ... Ce serait plus long, bien sûr."";
), mais le$@
backtick semble désespéré.#define Q(_) #_
. Le préprocesseur serait traité"##_##"
comme un littéral de chaîne.Postscript - 32 caractères
Il en résulte un objet sur la pile, mais n'a aucun autre effet. Postscript autorise presque tous les caractères dans un identifiant, à l'exception de ceux
<>()[]{}/
qui sont des formes syntaxiques spéciales et%
qui introduisent un commentaire. Le programme est symbolisé commela source
C # (91 caractères)
Pour autant que je sache, le caractère $ n'est pas un caractère valide en dehors des littéraux de chaîne, donc je ne l'ai pas utilisé dans ma réponse.
EDIT : Merci à Peter Taylor , j'ai raccourci le code.
la source
#if A
...#endif
est plus courte que#region
...#endregion
. Et"x"[0]+
est plus court que[System.STAThread]
.PowerShell (52 caractères)
J'ai dû mettre le caractère ^ comme une chaîne littérale parce que pour autant que je sache, le caractère ^ n'est pas un caractère PowerShell légal en dehors des littéraux de chaîne. Corrigez-moi si je me trompe.
Le seul moyen que j'ai trouvé pour tenir dans le caractère : est d'utiliser l' opérateur :: pour appeler une méthode statique.
la source
Schéma, 41 caractères
Cela profite de l'incroyable tolérance de Scheme pour les caractères dans les noms de variables. Dans ce programme, je crée une variable avec le nom! $% & * +, -. /: <=>? @ [] ^ _ `{|} ~ Que Scheme accepte avec plaisir.
la source
Tcl 37 caractères
Définit une variable
!#$%&'()*+,-./:<=>?@[]^\_`|~
avec une chaîne videla source
C:
8356 caractèresLes signes at et les astuces ne font pas partie de la syntaxe C autorisée, je les ai donc mis entre guillemets.
la source
(b)
? C'est une syntaxe étrange et un gaspilleur de caractères.0.0
est beaucoup plus courte.main(_,$)
que sauvera un personnage.x?:y
, mais ce n'est pas le standard C.Lisp commun, 33 caractères
La partie principale de ce qui précède évalue (ou plutôt, évaluerait sinon pour l'
#+()
avant) au symbole nommé:Il
#+()
s'agit d'éviter la sortie. Je ne sais pas si la|foo|
syntaxe des symboles compte comme un littéral, mais les symboles sont utilisés comme noms de variable / fonction dans Common Lisp, et il y a déjà quelques réponses utilisant les caractères nécessaires dans ceux-ci.la source
Smalltalk (dialecte Squeak 4.x) 38 caractères
Implémentez cette méthode dans Object, la syntaxe est valide si les préférences autorisent l'affectation de soulignement (qui est le paramètre par défaut)
déclarer Z comme var globale dans le menu local s'il est interactif
Explications:
Merde, qui a dit que Smalltalk était lisible?
Notez que je n'ai pas triché, le seul caractère non valide `est mis dans un caractère littéral. EDIT voir ci-dessous, c'était une fausse affirmation (au moins dans Squeak)
Mais nous pouvons descendre à 34 caractères avec cette astuce
Cette fois:
À strictement parler, nous pouvons considérer cela comme de la triche ... Ce n'est pas une chaîne littérale, mais c'est toujours un littéral non vide ...
Je dois encore doubler la citation de commentaire "" (sauf si je crée un caractère littéral avec lui $ ", mais je dois ensuite doubler la citation de chaîne '')
Je dois encore utiliser une lettre pour le paramètre (_ n'est pas accepté même si nous définissons les préférences permettent de souligner dans le sélecteur sur true).
Ce qui est bien, c'est que nous pouvons même exécuter la méthode, par exemple envoyer le message à 1 avec l'argument 2:
EDIT Enfin en 35 caractères sans tricher
Remarques:
la source
R: 108 caractères
Clairement la soumission la plus longue, mais pour pouvoir utiliser des symboles
@
et$
dans R, nous devons créer un objet qui a des emplacements (indexés en utilisant@
) et des éléments nommés (indexés en utilisant$
).La solution la plus courte à laquelle j'ai pu penser a été de créer une nouvelle classe d'objet (
a=new(setClass("a",representation(b="list")))
), ce qui fait des ravages. Sinon, mis à part les classiques qui n'ont pas besoin d'explications (comme!=
,#
ou1:2
),crée un nouvel opérateur qui fait la même chose que l'opérateur
?
(c'est-à-dire qu'il appelle la page d'aide de l'élément qu'il précède).%*%
calcule le produit interne de deux matrices (ici de1^1
et.1
).Le symbole
_
ne fait rien (AFAIK) dans R mais est couramment utilisé dans les noms de variables ou de fonctions, comme c'est le cas ici.la source
TI-Basic, 36
la source
End
termine une instruction de boucle, pas le programme. Je pense que tu voulais direReturn
.