Su tarea es crear un programa (utilizando solo caracteres ASCII imprimibles y / o pestañas y líneas nuevas) que imprima exactamente los caracteres en el espacio ASCII imprimible ( 0x20
a 0x7e
) que no aparecen en el código fuente de su programa (en cualquier orden, sin embargo muchas veces que quieras).
El código más corto para hacer esto en cualquier idioma gana.
code-golf
self-referential
Joe Z.
fuente
fuente
0x20
de0x7e
, que se definen como los "caracteres ASCII imprimibles". Técnicamente, las pestañas y las nuevas líneas son en realidad caracteres de control.Respuestas:
GolfScript,
1512 caracteresBasado en la respuesta de Jan Dvorak con algunos giros y también en el estilo de Peter Taylor .
fuente
Polyglot, 95
tclsh
,bash
,sh
,ksh
, etc)main()
se necesita. Gracias a urogenNo hace nada.
fuente
#undef X;whatever junk you want
funciona.#
para comentarios como Ruby y Perl)PHP 5.2, 4
Guardar como un archivo llamado
NYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.php
en algún lugar/home
.short_open_tag
necesita estarOn
en tuphp.ini
.El resultado es:
fuente
:
en la salida.JavaScript - 88
imprime "bcdfghijkmnpquvxyz"
fuente
"!#$%&*+,-13:<=>?@[\]^_`{|}~AERTOWS";alert('BCDFGHIJKMNPQUVXYZ'.toLowerCase()+95*72)
porque95*72
=6840
y mover los caracteres desperdiciados a una cadena le permite usar las comillas en lugar de desperdiciarlas. Además de eso, esconder personajes en un comentario se siente cursi.Espacio en blanco,
6157 caracteresNo es el más corto, pero probablemente tiene la lógica más simple (en realidad es solo un bucle).
Aquí está completamente comentado, donde S es espacio, T es tabulación, L es avance de línea:
Gracias a @res por la corrección a lo anterior (duplicado adicional requerido para la instrucción de bifurcación) y por números más pequeños para empujar en la pila.
fuente
SSSTSSSSSL LSSSL SSSTL TSSS SLS SLS TLSS SSSTTTTTTSL TSST LTTSL LLL
.LSSSL
convierteLSSL
y seLTTSL
convierteLTTL
) y elimina la salida al final (los tresLLL
). Pruébelo en línea sin procesar 52 bytes o aquí con resaltado y explicación .C,
837469 caracteresRealmente intenté descifrarlo por debajo de 80 caracteres, pero no pude lograrlo. Finalmente decidí publicar lo que tengo, asumiendo que yo (u otra persona) descubriré la solución de 79 caracteres diez minutos después de publicar esto.De acuerdo, no fueron diez minutos, pero funcionó en principio.Tenía muchas ganas de publicar una versión que no tenía que tener un espacio gratuito en el código fuente, pero que aterrizó en una órbita de atractor extraño, rebotando entre un puñado de soluciones. Después de muchos minutos de tratar de empujar a uno de ellos a una solución estable, me di por vencido y agregué el espacio.
fuente
Golfscript,
2624 caracteresToma un script de generación de rango, lo duplica, lo ejecuta, lo resta de su resultado, luego resta el código de sustracción del resultado y el otro carácter de comillas.
fuente
''+
, escape del programa antes de restar, coloque un noop.;
(no encontró una mejor manera de cubrir el punto), use el bloque de código en lugar de la cadena ->{126,33>`-.;}.~
que es 16 caracteresPescado - 80
Cuando el pez comete errores, imprime "algo huele a pescado ...". Como z es una mala instrucción, se equivoca de inmediato
fuente
Sé que no está ganando ningún concurso. Solo quería probarlo en un idioma que normalmente no se usa, solo por diversión.
Java -
209195152140 caracteresCon saltos de línea y pestañas
Tenga cuidado si ejecuta: el programa no termina. Jaja
Explicación
for(char c=0;;c++)
: Dado que achar
puede tratarse como unint
, lo uso para mi ventaja aquí para incrementar todos los valores posibles dec
. Omito la condición de terminación en el ciclo (la que iría entre los dos puntos y comas) para guardar los caracteres, ya que no se especificó que el programa tenía que terminar. :)"publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:""
: Lamentablemente, no es un enfoque muy elegante, pero hace el trabajo. Enumere manualmente todos los caracteres presentes en el código fuente como unString
literal, luego verifique si la corrientechar c
ocurre dentro de él conindexOf()
. Si laindexOf()
llamada regresa-1
, no existe y, por lo tanto, deberíamos imprimirla. El resto solo usa el operador ternario para ahorrar en caracteres y espacio.fuente
Perl, 49 caracteres
Este es un desafío interesante: es una especie de anti-quine, y he logrado acortar el programa un par de veces al aumentar el rango de caracteres que aparecen en él.
fuente
Rubí,
817868666257Simplemente se controla a sí mismo. Caracteres duplicados eliminados manualmente.
¡Gracias a Josh por guardar 4 caracteres y minitech por guardar 5 caracteres!
fuente
(?!..?~).map{|x|$><<x if/[()ifmap{}|x?!.~\/\\\[\]$><]/!~x}
(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}
$><<((32..126).map(&:chr)-IO.read(__FILE__).chars).join
55 bytes con un enfoque diferente.Befunge (48)
Salidas: {zyxwvutsrqponmlkjihgfedcba` _ ^] [ZYXWVUTSRQPONMLKJIHGFEDCBA240
fuente
No es muy serio, pero tuve que intentarlo:
JSFuck (138152)
(fuente compilada aquí)
Fuente original:
Imprime todos los caracteres excepto () + []!
fuente
(x)
<=>[x][+[]]
, aumenta el tamaño del código pero hace que el alfabeto sea más pequeño.Gosh, lo hiciste difícil para APL (¿es eso deliberar?)
Así que decido ignorar todas las reglas !!!
APL (Dyalog),
310Imprime el vector atómico (que incluye todos los caracteres ASCII imprimibles)
Resulta que olvidé por completo la parte "sin" ...
Pero esa es una solución fácil
~'AV'''
significa excluir (~
) los caracteres A, V y comillas simples (se escaparon como comillas simples duplicadas)Con respecto a la impresión que no es ASCII, bueno, estoy ignorando todas las reglas.
fuente
0x20
a0x7e
) que no aparecen en el código fuente de tu programa" Creo que la salida puede no contener caracteres fuera del espacio ASCII imprimible ("exactamente" es la palabra clave) , y su programa contiene 'A' y 'V', por lo que no deben imprimirse.~
al conjunto de caracteres excluidos. ;-) Por cierto, una solución J similar seríaa.-.'a.-'''
GolfScript (
1816 caracteres)Demostración en línea con una línea adicional que verifica la corrección y genera el número de caracteres por error.
(Tengo varias alternativas equivalentes.
@`^
Se puede reemplazar con\\`
;#
se puede reemplazar con`
o]
. La combinación correcta se puede usar con el truco de Howard para igualar su puntaje de 15 porque las barras invertidas no necesitan escapar en bloques como lo hacen en los literales de cadena:{),\`^32>].~}.~
Pero Howard merece el crédito por ese truco).fuente
}~
- aún mejor para los bloques de código, vea mi nueva respuesta ;-)Brainfuck, 173
Bastante largo, podría intentarlo más tarde.
fuente
J (
5240)Editar: Duh, se olvidó de
e.
Versión antigua:
Otra variante (misma longitud pero menos salida):
fuente
Python 3 -
6861... gracias a @WolframH por las mejoras.
exec(x)
en una nueva línea y guardar la;
enx
. Además, en Python 3, puede usarx=r"print(*set(map(chr,range(32,127)))-set(x+'=\"'))"\nexec(x)
61 caracteres (imprime múltiples espacios, lo cual está permitido).PowerShell: 96
Debe guardarse y ejecutarse como un script.
diff
es un alias incorporado paraCompare-Object
.gc
es un alias incorporado paraGet-Content
.$MyInvocation.InvocationName
obtiene la ruta completa al script que se está ejecutando.32..126
es el equivalente decimal para0x20..0x7e
y, por lo tanto, crea una matriz de los códigos decimales ASCII que estamos buscando.[char[]]
toma el contenido del siguiente objeto y los coloca en una matriz, dividiéndolos y convirtiéndolos en caracteres ASCII. Entonces, ahora tenemos dos conjuntos de caracteres ASCII: uno extraído de este script y el otro definido por los criterios de desafío.-Pa
conjuntosCompare-Object
en formato "Passthru", por lo que solo los elementos que se encuentran diferentes entre las entradas se emiten en la consola; los indicadores de qué elementos estaban en qué entrada todavía se almacenan en los datos del objeto, pero no se muestran.|?{$_.SideIndicator-eq'=>'}
Compare-Object
salida de tuberías aWhere-Object
, que lo filtra solo a los elementos que son exclusivos de la segunda entrada.fuente
PHP - 92
Salida:
nada
El OP pide imprimir todos los caracteres no utilizados, bueno, solo los uso todos
fuente
<?='A"$%&\'()*+[,.]/0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#'
?!;>Xn
Javascript, 92
fuente
fuente
Java - 126 caracteres
minimizado:
no minimizado:
Este es un problema interesante, porque los tokens individuales podrían beneficiarse de su forma más larga porque reutiliza los caracteres. Por ejemplo, normalmente
String[]
sería más corto, peroString...
elimina la necesidad de los corchetes en la cadena condicional.Descubrí que el truco era tratar de usar caracteres al principio y al final del rango para que pueda excluirlos de la salida simplemente alterando el inicio y el final de su ciclo.
Para Java, un carácter clave para excluir es
"
, porque tener eso en la cadena requiere escapar, lo que agrega\
a su programa, que debe ir en la cadena, que agrega\\
. Al eliminar"
de su cadena condicional, elimina 4 caracteres. Esto se puede conseguir asegurándose de que utilicey
!
e iniciar el bucle desde#
.Todas las letras minúsculas aparecen cerca del extremo superior del rango, la única
{
,|
,}
y~
viene después de ellos. Debido a la verbosidad de Java, la mayoría de las letras minúsculas se usan solo para la repetitiva. Del mismo modo,{
y}
son triviales para un programa Java, porque la repetitiva los requiere.|
se puede usar si tiene una condición o, pero no pude encontrar una manera de aprovechar una que conduzca a un programa más corto que simplemente usarla|
como operador bit a bit. El|0
me hace sentir un poco sucio, porque es la única parte que es un nop sólo para obtener el carácter de allí.~0
rendimientos-1
, lo cual es útil porque eso es lo que debemos verificarindexOf
. La combinación de esto con el uso!=
del bucle condicional elimina el<
carácter por completo, lo que significa que no necesita ir dentro de la cadena condicional.fuente
sh (47)
Utiliza el enfoque autorreferencial. Se supone
/dev/urandom
que finalmente generará cada octeto al menos una vez. No terminaSi suponemos que
man
está instalado, podríamos utilizar la página deascii(7)
manual (y así tener un programa de finalización) ( 44 caracteres, gracias @fennec).fuente
man
yzsh
estamos instalados,man zshall
parece cumplir con los criterios. Podría agregar eso como una variación.man ascii
Podría ahorrarte otra carta, creo.tr
estas usando GNUtr
trata el-
in "cat $0
" como un operador de rango, que rompe la salida.ascii
programa está instalado, puede usarlo en lugar deman ascii
.BitShift , 1038 bytes
BitShift es un lenguaje que solo admite
0
y1
como sintaxis. Pensé que sería fácil imprimir todos los demás caracteres, pero como realmente no es compatible con el bucle, terminó siendo un enorme 1038 bytes.Sin embargo, creo que no es realmente posible ir más pequeño que esto ...
Huellas dactilares
Pruébalo aquí
fuente
Definitivamente la solución más larga aquí, pero codificar en Lino siempre es divertido:
Linóleo -
655523 caracteresNo hay comentarios, solo lee la fuente compilada en binario. ¡Guardar como
a.txt
o no se compilará!fuente
Brainfuck,
133123114110 bytesUn poco más de ajustes con una solución anterior (antes de darme cuenta de que la siguiente era más pequeña, aunque esto fue antes de que hiciera una gran optimización). Esto funciona almacenando 4 conjuntos de números ASCII e imprimiéndolos con algunos bucles complicados, y luego da los caracteres que faltan después (es decir, los que están entre números ASCII no válidos).
Presentación original
Hace lo siguiente:
fuente
Haskell (70)
La aburrida solución duplicado-caracteres-en-programa-en-una-cadena, resta del conjunto universal. Lejos de ser un ganador de codegolf, aunque es sorprendentemente legible por su longitud.
(Ahora con sustracción de lista en lugar de
filter
/notWith
.)fuente
import Data.List
aimport List
runhaskell
: "No se pudo encontrar el módulo 'Lista'". Sin embargo, noté que contaba mal la cantidad de caracteres, así que lo corregí.J - 21
escriba esto en un archivo llamado
5
en el directorio actual. Luego carga, ejecuta el script con0!:1<'5'
O 25 sin el truco del archivo:
fuente
'
, que no se elimina de la salida.Clojure (
142, 106103)formateado:
Creo que esto lo hace, puede necesitar algunos ajustes. salida:
ejecuta la cadena, que es un código evaluable de clojure, en sí misma. La cadena tiene algunos comentarios al final para que los caracteres se usen fuera de la cadena (método principal, etc.)
fuente
Pitón 2, 69
Utilizo la secuencia más larga (que puedo encontrar) de caracteres continuos que puedo imprimir y agrego los otros como comentario después del código.
fuente