En particular, use cada uno de estos símbolos al menos una vez en su código fuente:
! " # $ % & ' () * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
Los símbolos dentro de comentarios, literales de cadena, expresiones regulares (o cualquier otro tipo de literales, etc.) no cuentan (pero sus delimitadores como /**/
o ""
sí cuentan).
El programa no debe realizar ninguna acción. Solo tiene que compilar y no hacer nada cuando se ejecuta.
Si por alguna razón algunos de los símbolos no se pueden usar en el idioma de su elección, explíquelos rigurosamente (qué y por qué deben excluirse).
Actualización: algunas respuestas usaron símbolos con expresiones regulares. Consideraría esto un poco problemático, es lo mismo que ponerlos en literales de cadena o comentarios (es por eso que puse etc. en ese requisito). Por favor intente sin esto. También actualicé el requisito anterior.
Actualización: el código más corto gana (etiquetado como code-golf ). Como se sugirió, lo más probable es que necesitemos algunos criterios de desempate. Sugiero que si hay un empate, el ganador es aquel en el que los símbolos ASCII aparecen lo más ordenados posible. Formalmente: filtre la primera aparición de cada uno de los símbolos enumerados de un programa. Esto dará como resultado una permutación en los símbolos enumerados. El programa con menos número de inversión de su permutación gana.
Actualización: me encantaría ver algunas / más soluciones en lenguajes regulares / convencionales, como C (++), Java, Scala, Haskell, etc.
fuente
@%
ni el backtick puede aparecer en c excepto como parte de un literal (en versiones suficientemente nuevas de c%
puede aparecer en dígrafos). (y#
solo aparece en las directivas de preprocesador, pero tendremos que vivir con eso)? Es decir, pido que el enfoque de Matt se haga explícitamente legal.#
,@
y `no son legales fuera de ningún tipo de literalRespuestas:
Brainf * ck, 32 caracteres
Imprime una cara sonriente (si su consola puede mostrar el símbolo ASCII 1)
¡Sí, una solución Branf * ck que supera a Golfscript! :PAG
Si insiste en que no hay salida, simplemente cambie el
+
y.
:fuente
Perl, 32 caracteres
sin símbolos ocultos en comentarios, literales de cadena o expresiones regulares. usa todos los símbolos con precisión una vez.
Descripción
He intentado indicar la precedencia del operador con sangría: las expresiones de la derecha se evalúan antes que las de la izquierda
fuente
`<@"^[(\{_},)]/+-~%'?&|:!*.=>
?$`
,@"
,%'
, y*.
(un escalar, matriz, hachís, y typeglob, respectivamente), aunque es muy difícil estar seguro. . .Espacio en blanco, 32
todos los caracteres que no son espacios en blanco se ignoran, por lo que este es realmente un programa vacío
fuente
Python 65
Usé los caracteres
?
y$
dentro de una cadena literal. Estos caracteres no son legales fuera de los literales de cadena o comentarios.fuente
{[`'"$?'`,]}
no es válido, ya que crea un diccionario con una clave sin valor asociado. Puede hacerlo válido con dos caracteres más como este:{[`'"$?'`,]:0}
PHP, 32 caracteres
Probablemente un poco troll, este programa PHP también es un QUINE , y utiliza todos los símbolos en el orden exacto en que se enumeran.
Ejecutado desde la línea de comando, la salida será simplemente el contenido del archivo, ya que no hay
<?php
que invocar al intérprete.fuente
Perl 6 (43 caracteres)
Definamos un operador infijo con un nombre bastante inusual:
No es un literal ni un literal en un RE ni nada oculto en un comentario. ¿No me crees? Ejecutar el siguiente programa generará "2":
Pero estoy bastante seguro de que ustedes, nitpickers, extenderán aún más las reglas para excluir la redefinición del lenguaje en sí mismo para hacernos perl lubbers infelices. :(
fuente
Haskell, 53
Podemos hacer esto un poco más corto
45
sin embargo, este programa no finaliza, y utiliza más caracteres (
'!'
,'<'
,'|'
) en el infija recién definida.fuente
k (33 caracteres)
Muy fácil en k. Lamentablemente
"
debe ser emparejado.fuente
GolfScript (33 caracteres)
"
tiene que ser emparejado Tomó un poco de prueba y error lograr que no produjera nada, la mayoría de las otras posiciones del:'
resultado en alguna salida.fuente
J, 33 caracteres
'
debe duplicarse para evitar errores de sintaxis.A mi primera respuesta le faltaban algunos símbolos.
fuente
C, 48 caracteres
Tipo de trampa.
fuente
#define Q(_) "##_##"
...char*c=Q(~''*+,-./:<=>?[]
| \); `. Nada en una cadena, solo se convierte en uno ... Sería más largo, por supuesto."";
), pero el$@
retroceso parece inútil.#define Q(_) #_
. El preprocesador lo trataría"##_##"
como un literal de cadena.Posdata - 32 caracteres
Da como resultado un objeto en la pila, pero por lo demás no tiene efectos. Postscript permite casi cualquier carácter en un identificador, excepto aquellos
<>()[]{}/
que son formas de sintaxis especiales y%
que introduce un comentario. El programa se tokeniza comofuente
C # (91 caracteres)
Hasta donde sé, el carácter $ no es un carácter válido fuera de los literales de cadena, por lo que no lo usé en mi respuesta.
EDITAR : Gracias a Peter Taylor , acorté el código.
fuente
#if A
...#endif
es más corto que#region
...#endregion
. Y"x"[0]+
es más corto que[System.STAThread]
.PowerShell (52 caracteres)
Tuve que poner el ^ carácter como un literal de cadena porque, hasta donde yo sé, el carácter ^ no es un carácter legal de PowerShell fuera de los literales de cadena. Corrígeme si estoy equivocado.
La única forma en que he encontrado que cabe en el carácter : es usar el operador :: para hacer una llamada a un método estático.
fuente
Esquema, 41 caracteres
Esto aprovecha la increíble tolerancia de Scheme para los caracteres en nombres variables. En este programa, creo una variable con el nombre! $% & * +, -. /: <=>? @ [] ^ _ `{|} ~ Que Scheme acepta felizmente.
fuente
Tcl 37 caracteres
Define una variable
!#$%&'()*+,-./:<=>?@[]^\_`|~
con una cadena vacíafuente
C:
8356 caracteresLos signos at y backticks no son parte de la sintaxis C permitida, por lo que los puse entre comillas.
fuente
(b)
? Es una sintaxis extraña y un derroche de personajes.0.0
es mucho más corta.main(_,$)
que salvará a un personaje.x?:y
, pero no es el estándar C.Lisp común, 33 caracteres
La parte principal de lo anterior evalúa (o más bien, evaluaría si no fuera por el
#+()
frente) al símbolo llamado:El
#+()
es para evitar la salida. No estoy seguro de si la|foo|
sintaxis de los símbolos cuenta como un literal, pero los símbolos se usan como nombres de variables / funciones en Common Lisp, y ya hay algunas respuestas que usan los caracteres necesarios en esos.fuente
Smalltalk (Squeak 4.x dialecto) 38 caracteres
Implemente este método en Object, la sintaxis es válida si las Preferencias permiten la asignación de subrayado (que es la configuración predeterminada)
declarar Z como var global en el menú emergente si es interactivo
Explicaciones:
Maldición, ¿quién dijo que Smalltalk era legible?
Tenga en cuenta que no hice trampa, el único carácter no válido `se pone en un carácter literal. EDITAR ver a continuación, esta fue una afirmación falsa (al menos en Squeak)
Pero podemos reducirlo a 34 caracteres con este truco
Esta vez:
Hablando estrictamente, podemos considerar esto como trampa ... No es una cadena literal, pero sigue siendo un literal no vacío ...
Todavía tengo que hacer doble comentario entre comillas "" (a menos que haga un carácter literal con $ ", pero luego necesito duplicar la comilla de cadena '')
Todavía tengo que usar una letra para el parámetro (_ no se acepta incluso si establecemos Preferencias permitir subrayado en selector en verdadero).
Lo bueno es que incluso podemos ejecutar el método, por ejemplo, enviar el mensaje a 1 con el argumento 2:
EDITAR Finalmente en 35 caracteres sin hacer trampa
Notas:
fuente
R: 108 caracteres
Claramente, el envío más largo, pero para poder usar símbolos
@
y$
en R, necesitamos crear un objeto que tenga ranuras (indexado usando@
) y elementos nombrados (indexado usando$
).La solución más corta que se me ocurrió fue crear una nueva clase de objeto (
a=new(setClass("a",representation(b="list")))
), que tiene su costo. De lo contrario, aparte de los clásicos que no necesitan explicaciones (como!=
,#
o1:2
),crea un nuevo operador que hace lo mismo que el operador
?
(es decir, llama a la página de ayuda del elemento que precede).%*%
calcula el producto interno de dos matrices (aquí de1^1
y.1
).El símbolo
_
no hace nada (AFAIK) en R, pero se usa habitualmente en nombres de variables o funciones, como es el caso aquí.fuente
TI-Basic, 36
fuente
End
finaliza una declaración de bucle, no el programa. Creo que quisiste decirReturn
.