Escriba un script que funcione bien cuando haya una línea en blanco en el flujo de la lógica del programa, pero se rompa o cause un comportamiento inesperado cuando se elimine esa línea.
Evite las lagunas estándar y las respuestas estúpidas. Su programa debe hacer algo "útil", incluso si todo lo que hace es agregar algunos enteros.
Eliminar una línea vacía de una cadena multilínea no cuenta, a menos que el resultado esperado de esa cadena multilínea no cambie técnicamente (es decir, si está eliminando todas las líneas en blanco que coinciden ^$
).
Foolery de espacios en blanco tampoco está permitido; no hagas cosas raras con retornos de carro, tabulaciones, espacios, etc.
popularity-contest
underhanded
Naftuli Kay
fuente
fuente
Respuestas:
Javascript
Abre una ventana emergente de alerta con "¡Hola, mundo!" si existe la línea en blanco, de lo contrario alerta "0".
Manifestación
Explicación:
arguments.callee
es una referencia a la función anónima de ejecución automática.Agregar una matriz en blanco (
[]
) convierte la función en una cadena, que le proporciona su código fuente.indexOf
devuelve-1
si no se encuentra la cadena.Realizar una operación no bit a bit (
~
) da como resultado que-1
se convierta0
, lo cual es un valor falso.fuente
arguments.callee
contiene la fuente de la función.arguments.callee
.arguments.callee
. Incluso lo hace más corto.do
Este programa mágico de 8 bolas seguirá funcionando sin la línea en blanco, pero será un poco más decisivo: ninguna de las respuestas neutrales aparecerá en la salida.
Explicación
fuente
Befunge-93
Mi primer programa de befunge :)
Lee dos números de la entrada e imprime su suma. Si elimina la línea vacía, no imprime nada.
Explicación:
v
establece una dirección hacia abajo para ejecutar el código&
lee un número entero+
agrega los números juntos#
omite el siguiente comando.
imprime un número entero desde la pila@
finaliza el programaTal como está escrito,
#
salta la línea vacía y continúa con.
. Comprar cuando elimina la línea vacía,.
se omite.Parece que hay un buen intérprete en http://befunge.aurlien.net/
fuente
Ruby / Shell
Funciona bien si una nueva línea está en la parte superior; de lo contrario, la primera línea de comentarios es interpretada por el shell como un shebang con formato incorrecto.
fuente
ruby youranswer.rb
, no buscaría un shebang porque ya se está ejecutando en el intérprete de ruby, pero si lo ejecutó como./youranswer.rb
no funcionaría en absoluto porque no hay shebang ..ruby youranswer.rb
, lo que puede ser útil para configurar los modificadores de línea de comandos necesarios en el archivo. Así que sin la nueva línea que obtengoruby: no Ruby script found in input (LoadError)
Scala
Si elimina la línea en blanco, no se imprimirá ninguna salida. Lo cual es lo mejor, ya que su pila se desbordaría si realmente llamara
IntWrapper
.fuente
GolfScript
Calcula el MCD de dos enteros distintos de cero. Eliminar la línea en blanco interrumpe el programa.
Pruébalo en línea.
Cómo funciona
Esta es una implementación de GolfScript del algoritmo euclidiano:
Solo hay un pequeño problema:
fuente
#
,{
y}
no puede usarse como nombres de variables, ya que son parte de la sintaxis. Todos los demás tokens están bien, incluidas las cadenas..:-1
almacena la entrada-1
, no el signo menos en sí? Hmm ...Sintaxis de plantilla de MediaWiki
Definir plantilla: Foo como
En otra pagina
fuente
LaTeX (backref)
El siguiente código de LaTeX utiliza una cita y la cita contiene una lista de páginas, donde se cita la entrada. Aquí está la primera página. El paquete
hyperref
también agrega enlaces PDF, la referencia de la página es roja, el enlace de la cita es verde.Pero LaTeX no requiere la línea vacía, la línea vacía parece superflua y el ejemplo seguirá funcionando sin ella
hyperref
y la línea vacía:Pero los enlaces y la referencia anterior se han ido, por lo que los reinsertamos:
Pero ahora el ejemplo está roto y ya no se compilará :
¿Que pasó? El paquete
hyperref
(o el paquete más precisobackref
, que se carga porhyperref
) quiere llegar al final de la entrada de la bibliografía para agregar la lista de referencia posterior. Pero la sintaxis en LaTeX solo proporciona el comienzo de la entrada\bibitem
, el final puede estar en cualquier lugar. En este paquete de emergencia sebackref
ha agregado una restricción que\bibitem
tiene que finalizar la entrada con una línea vacía. Entonces el paquete puede redefinir\bibitem
para colocar las referencias al final de la entrada.Como falta la línea vacía, TeX sigue buscándola, pero en su lugar encontró el final del archivo y emite el mensaje de error.
fuente
C (semi-ofuscado)
Este pequeño programa toma un número en la línea de comando y calcula su factorial. Sin embargo, también contiene funciones de inteligencia artificial de vanguardia para la verificación del tiempo de ejecución de que se siguen los estándares de codificación de la compañía, incluido el uso correcto de espacios en blanco y líneas en blanco. Al eliminar una línea en blanco, el algoritmo rechazará el programa que no se puede mantener lo suficiente.
No hay continuaciones de línea ni trigrafos en ningún lado. Creo que es válido ANSI C99.
Debido a las matemáticas avanzadas involucradas, si compila con
gcc
, recuerde usar-lm
.Spoiler
fuente
tcc -run
vfry
no se expande en la definición de la función realmente me dejó perplejo.do
Este programa funciona como se esperaba (como se describe en los comentarios) a menos que la línea en blanco antes
foo = 5;
se elimine la .Lamentablemente, una vez encontré un error casi exactamente como esto en el código de producción.
Este ejemplo usa el
do { ... } while (0)
idioma para crear una declaración multilínea en una macro (consulte https://stackoverflow.com/questions/257418/do-while-0-what-is-it-good-for ). También utiliza el carácter de barra diagonal inversa para extender una#define
sobre varias líneas, convenientemente alineadas fuera de la vista. Sin embargo, también hace dos cosas mal:while (0)
, mientras que el idioma generalmente omite esto#define
Con esto en su lugar, la eliminación de la línea en blanco antes de
foo = 5;
causas que la asignación que se ejecutará después de laprintf
, sino también después de cada invocación de laFROB
macro. Como resultado, el resultado después de eliminar la línea en blanco es:fuente
C / C ++
Devuelve el éxito y se puede usar como una implementación para true . Si se quita la línea en blanco que se puede utilizar como una aplicación de falso en su lugar.
fuente
Potencia Shell
Esta función agregará dos números.
Eliminar la línea en blanco hará que la función falle con:
Unexpected token '$b' in expression or statement.
Explicación
fuente
Texas
Sin la línea vacía, "hola" no se imprime.
Explicación
TeX trata la línea vacía como un salto de párrafo y
\everypar
se ejecuta al comienzo de un nuevo párrafo.fuente
Java
fuente
Math.pow
.Math.pow
e imprimir el resultado también está haciendo algo , ¿no?Perl 5
Este código se imprime
Hello, World!
. Eliminar la línea en blanco da un error de sintaxis en su lugar.Explicación:
fuente
Lote
Este código saldrá
Hello
y en la siguiente líneaWorld
. Cuando se eliminan una o ambas líneas en blanco, no genera nada en absoluto.Hay una explicación aquí .
fuente
Rubí
La eliminación de la primera línea causará un error:
fuente
Pitón
No sé si esto cae dentro de las lagunas estándar, miré la lista y no vi esto.
Ejecutar esto regularmente regresa
Ejecutarlo sin la línea en blanco en la línea 4, es decir, como a continuación:
no devuelve nada
fuente
Python 2.x
Este programa genera el quinto carácter de la cadena ingresada.
Esto no está oculto de ninguna manera. Si elimina la línea vacía, le da el cuarto carácter y el sexto si agrega uno.
fuente
Tcl
Una función que agrega dos números (y comprueba si se ha eliminado la nueva línea):
No hay nada que ocultar aquí, hace lo que dice, así que no estoy estropeando la explicación. La función
info
es una navaja suiza de introspección (lo que otros lenguajes llaman reflexión).info body
devuelve el código fuente de una función (si no está escrito en C o ensamblado).Tengo que admitir que esto me dejó perplejo hasta que vi la solución de JavaScript.
fuente
do
Con la línea en blanco,
a
es la variable local a y sin ella es el parámetro macro ...fuente
Técnicamente no es un problema de "código", sino uno de servidor. Si se envía a Apache desde un script CGI (que se puede generar con cualquier idioma que desee), enviará una respuesta HTTP al cliente:
Por otro lado, esto fallará ya que le falta el espacio en blanco después del encabezado.
fuente
JavaScript
La función
whereami
responde con la posición de la línea de llamada, en relación con su propia posición en el código fuente.Si
whereami
se elimina alguna línea en blanco en la función. La salida esNaN line(s) confusing me
. (Agregar líneas no lo rompe)fuente
Perl
fuente
Escript
Debido a un error en la
escript
implementación, el escript válido debe tener al menos tres líneas de largo y la primera línea debe ser shebang o vacía. Entonces, el siguiente script debe tener dos líneas vacías donde la primera tiene que ser la primera:O debe dividirse en dos líneas, pero aún debe tener la primera línea vacía.
De lo contrario, obtendrá
fuente
Rubí
Imprime
2+2=4
, pero da un error de sintaxis sin la tercera línea en blanco.%q
permite que cualquier carácter que no sea de palabra sirva como delimitador de cadena, incluso el carácter de nueva línea. Entonces, las primeras tres líneas de código son en realidad equivalentesprint %q"2+2="
o simplementeprint "2+2="
. Como la nueva línea posterior2+2=
se está utilizando como delimitador de comillas, no se analiza también como un delimitador de línea , por lo que necesita otra inmediatamente después.fuente
Insomnio (ambas versiones)!
Este código imprime un ~ (no pregunte por qué, el insomnio es extraño). Si elimina la línea en blanco, imprime un ÿ en su lugar.
Por cierto, esa primera letra es una espina .
fuente
C ++
Este es un truco clásico y bastante tonto. Sabrás lo que es cuando lo veas, esto es solo para completarlo. Como tal, estoy marcando esto como una respuesta wiki comunitaria.
Por que esto funciona
fuente
??/
significa\
, así que??//
significa\/
, y como la línea no termina\
, no hay continuación de línea. El segundo es que el comportamiento es exactamente el mismo independientemente de sireturn 0;
se ejecuta, porque ese es el comportamiento estándar cuando la ejecución demain
llega al cierre}
.I know people always use this in these kinds of question
por eso lo convertimos en una escapatoria estándarPegue esto en un archivo html y ábralo en su navegador. Es bastante simple, pero un poco complicado porque toma el número de líneas en blanco en el documento e indexa una matriz para llamar a una función que muestra una alerta.
Este es el incumplimiento de la regla límite. Técnicamente, JavaScript no tiene cadenas multilínea, que es la única razón por la que esto funciona.
Debido a que puede tener un error de sintaxis en una etiqueta de script sin interferir con las otras etiquetas de script, esto muestra un resultado positivo solo si hay un error en la página. El error evita que se active la segunda alerta porque está en la misma etiqueta de script.
fuente
Rubí
El secreto es que la nueva línea es realmente una pestaña, luego una nueva línea. No sé si esto cuenta, pero pensé que era ingenioso. El carácter después del
%
también es una pestaña, pero por alguna razón no aparece como tal. Estoy usando la notación porcentual de Ruby para hacer una cadena, que agrega los primeros 2 argumentos pasados al script. Hay más sobre eso aquí: http://teohm.com/blog/2012/10/15/start-using-ruby-percent-notation/fuente
\n
debe estar presente y debe ser crucial para que el programa funcione como se espera.