Escreva um script que funcione bem quando uma linha em branco estiver presente no fluxo da lógica do programa, mas quebre ou cause comportamento inesperado ao remover essa linha.
Evite brechas comuns e respostas estúpidas. Seu programa deve fazer algo "útil", mesmo que tudo o que faça seja adicionar alguns números inteiros.
A remoção de uma linha vazia de uma sequência multilinha não conta, a menos que a saída esperada dessa sequência multilinha não deva mudar tecnicamente (por exemplo: se você estiver removendo todas as linhas em branco correspondentes ^$
).
Tolos em espaços em branco também não são permitidos; não faça coisas estranhas com retornos de carro, guias, espaços etc.
popularity-contest
underhanded
Naftuli Kay
fonte
fonte
Respostas:
Javascript
Abre um pop-up de alerta com "Olá, mundo!" se a linha em branco existir, o alerta será "0".
Demo
Explicação:
arguments.callee
é uma referência à função anônima de execução automática.Anexar um array em branco (
[]
) converte a função em uma string, fornecendo seu código fonte.indexOf
retorna-1
se a sequência não for encontrada.Executar uma operação não bit a bit (
~
) resulta em-1
transformação0
, que é um valor falsey.fonte
arguments.callee
contém a fonte da função.arguments.callee
.arguments.callee
. Até o torna mais curto.C
Este programa mágico de 8 bolas ainda funcionará sem a linha em branco, mas será um pouco mais decisivo - nenhuma das respostas neutras aparecerá na saída.
Explicação
fonte
Befunge-93
Meu primeiro programa befunge :)
Ele lê dois números da entrada e imprime sua soma. Se você excluir a linha vazia, ela não imprimirá nada.
Explicação:
v
define uma direção descendente para executar o código&
lê um número inteiro+
adiciona os números juntos#
pula o próximo comando.
imprime um número inteiro da pilha@
finaliza o programaConforme escrito,
#
pula a linha vazia e continua com.
. Comprar quando você exclui a linha vazia,.
é ignorado.Parece haver um bom intérprete em http://befunge.aurlien.net/
fonte
Ruby / Shell
Funciona bem se uma nova linha estiver no topo, caso contrário, a primeira linha de comentário será interpretada pelo shell como um shebang malformado.
fonte
ruby youranswer.rb
, ele não procuraria um shebang porque ele já está sendo executado no intérprete de rubi, mas se você executou como./youranswer.rb
ele não funcionaria porque não há shebang ..ruby youranswer.rb
, o que pode ser útil para definir as opções de linha de comando necessárias no arquivo. Assim, sem a nova linha Receboruby: no Ruby script found in input (LoadError)
Scala
Se você remover a linha em branco, nenhuma saída será impressa. Qual é o melhor, pois sua pilha transbordaria se você realmente pagasse
IntWrapper
.fonte
GolfScript
Calcula o MDC de dois números inteiros diferentes de zero. A remoção da linha em branco interrompe o programa.
Experimente online.
Como funciona
Esta é uma implementação GolfScript do algoritmo euclidiano:
Há apenas um pequeno problema:
fonte
#
,{
e}
não podem ser usados como nomes de variáveis, como eles são parte da sintaxe. Qualquer outro token é bom, incluindo cadeias..:-1
armazena a entrada-1
, e não o sinal de menos em si? Hmm ...Sintaxe de modelo do MediaWiki
Definir modelo: Foo as
Em outra página,
fonte
LaTeX (backref)
O código LaTeX a seguir usa uma citação e a citação contém uma lista de páginas, onde a entrada é citada. Aqui está a primeira página. O pacote
hyperref
também adiciona links em PDF, a referência de volta à página é vermelha, o link de citação é verde.Mas o LaTeX não requer a linha vazia, a linha vazia parece supérflua e o exemplo ainda funcionará sem
hyperref
e a linha vazia:Mas os links e as referências anteriores se foram, então os reinserimos:
Mas agora o exemplo está quebrado e não será mais compilado :
O que aconteceu? O pacote
hyperref
(ou pacote mais precisobackref
, carregado porhyperref
) deseja chegar ao final da entrada da bibliografia para adicionar a lista de referências anteriores. Mas a sintaxe no LaTeX fornece apenas o início da entrada até\bibitem
, o final pode estar em qualquer lugar. Neste pacote de emergênciabackref
, adicionou uma restrição que\bibitem
deve terminar a entrada com uma linha vazia. Em seguida, o pacote pode ser redefinido\bibitem
para colocar as referências anteriores no final da entrada.Como a linha vazia está ausente, o TeX continua procurando, mas encontrou o final do arquivo e emite a mensagem de erro.
fonte
C (semi-ofuscado)
Este pequeno programa pega um número na linha de comando e calcula seu fatorial. No entanto, ele também contém a funcionalidade de IA de ponta para verificação em tempo de execução de que os padrões de codificação da empresa, incluindo o uso correto de espaços em branco e linhas em branco, estão sendo seguidos. A remoção de uma linha em branco acionará o algoritmo para rejeitar o programa insuficientemente sustentável.
Não há continuações de linha ou trigrafs em lugar nenhum Eu acredito que é válido ANSI C99.
Devido à matemática avançada envolvida, se você compilar
gcc
, lembre-se de usar-lm
.Spoiler
fonte
tcc -run
vfry
não é expandido na definição da função realmente me surpreendeu.C
Este programa funciona conforme o esperado (conforme descrito nos comentários), a menos que a linha em branco anterior
foo = 5;
seja removida.Infelizmente, encontrei um erro quase exatamente assim no código de produção uma vez.
Este exemplo usa o
do { ... } while (0)
idioma para criar uma instrução multilinha em uma macro (consulte https://stackoverflow.com/questions/257418/do- while -0- what - is - it - good-for ). Ele também usa o caractere barra invertida para espalhar#define
várias linhas, convenientemente alinhadas e fora da vista. No entanto, ele também faz duas coisas meio erradas:while (0)
, enquanto o idioma geralmente omite esse#define
Com isso, remover a linha em branco antes
foo = 5;
faz com que a atribuição seja executada após aprintf
, mas também após cada chamada daFROB
macro. Como resultado, a saída após remover a linha em branco é:fonte
C / C ++
Retorna sucesso e pode ser usado como uma implementação para true . Se a linha vazia for removida, você poderá usá-la como uma implementação para false .
fonte
PowerShell
Esta função adicionará dois números.
A remoção da linha em branco fará com que a função falhe com:
Unexpected token '$b' in expression or statement.
Explicação
fonte
TeX
Sem a linha vazia, "olá" não é impresso.
Explicação
O TeX trata a linha vazia como uma quebra de parágrafo e
\everypar
é executada no início de um novo parágrafo.fonte
Java
fonte
Math.pow
?Math.pow
e imprimir o resultado também está fazendo algo , não é?Perl 5
Este código é impresso
Hello, World!
. A remoção da linha em branco gera um erro de sintaxe.Explicação:
fonte
Lote
Este código será exibido
Hello
na próxima linhaWorld
. Quando uma ou as duas linhas em branco são removidas, ela não produz nada.Há uma explicação aqui .
fonte
Rubi
A exclusão da primeira linha causará erro:
fonte
Python
Não sei se isso se encaixa nas brechas padrão, olhei para a lista e não vi isso.
A execução regularmente retorna
Executando-o sem a linha em branco na linha 4, ou seja, como abaixo:
não retorna nada.
fonte
Python 2.x
Este programa gera o quinto caractere da string inserida.
Isso não está de forma alguma oculto. Se você remover a linha vazia, ele fornecerá o quarto caractere e o sexto se você adicionar um.
fonte
Tcl
Uma função que adiciona dois números (e verifica se a nova linha foi excluída):
Não há nada a esconder aqui, faz o que diz, por isso não estou estragando a explicação. A função
info
é um canivete suíço de introspecção (o que outras línguas chamam de reflexão).info body
retorna o código fonte de uma função (se não estiver escrito em C ou assembly).Eu tenho que admitir que isso me deixou perplexo até ver a solução javascript.
fonte
C
Com a linha em branco,
a
é a variável local a e sem o parâmetro macro ...fonte
Tecnicamente, não é um problema de "código", mas um problema de servidor. Se isso for enviado ao Apache a partir de um script CGI (que pode ser gerado com qualquer idioma que você desejar), ele enviará uma resposta HTTP para o cliente:
Por outro lado, isso falhará, pois está faltando o espaço em branco após o cabeçalho.
fonte
Javascript
A função
whereami
responde com a posição da linha de chamada, em relação à sua própria posição no código-fonte.Se qualquer linha em branco na
whereami
função for removida. A saída éNaN line(s) confusing me
. (Adicionar linhas não quebra)fonte
Perl
fonte
Escript
Devido a um erro na
escript
implementação, o escript válido deve ter pelo menos três linhas e a primeira linha deve ser shebang ou vazia. Portanto, o script a seguir deve ter duas linhas vazias, onde a primeira deve ser a primeira:Ou deve ser quebrado em duas linhas, mas ainda precisa ter a primeira linha vazia.
Caso contrário, você receberá
fonte
Rubi
Imprime
2+2=4
, mas gera um erro de sintaxe sem a terceira linha em branco.%q
permite que qualquer caractere que não seja palavra sirva como delimitador de sequência, até mesmo o caractere de nova linha. Portanto, as três primeiras linhas de código são realmente equivalentesprint %q"2+2="
ou justasprint "2+2="
. Como a nova linha posterior2+2=
está sendo usada como um delimitador de cotação, ela também não é analisada como um delimitador de linha ; portanto, você precisa de outra imediatamente após.fonte
Insônia (ambas as versões)!
Este código imprime um ~ (não pergunte por que, insônia é estranha). Se você remover a linha em branco, ela imprimirá ÿ.
A propósito, a primeira letra é um espinho .
fonte
C ++
Este é um truque clássico e bastante idiota. Você saberá o que é quando vê-lo, isso está aqui apenas por uma questão de conclusão. Como tal, estou marcando isso como uma resposta do wiki da comunidade.
Por que isso funciona
fonte
??/
significa\
, então??//
significa\/
, e como a linha não termina em\
, não há continuação de linha. A segunda é que o comportamento é exatamente o mesmo, independentemente dereturn 0;
ser executado, porque esse é o comportamento padrão quando a execuçãomain
atinge o fechamento}
.I know people always use this in these kinds of question
é por isso que nós fizemos isso uma brecha padrãoCole isso em um arquivo html e abra-o no seu navegador. É bem simples, mas um pouco complicado, porque pega o número de linhas em branco no documento e indexa uma matriz para chamar uma função que mostra um alerta.
Essa é a quebra de regras limítrofes. Tecnicamente, o JavaScript não possui cadeias de linhas múltiplas, e é o único motivo para isso funcionar.
Como você pode ter um erro de sintaxe em uma tag de script sem interferir nas outras tags de script, isso mostra um resultado positivo apenas se houver um erro na página. O erro impede que o segundo alerta seja acionado porque está na mesma tag de script.
fonte
Rubi
O segredo é que a nova linha é realmente uma guia, depois uma nova linha. Não sei se isso conta, mas achei que era um cutelo. O personagem após o
%
também é uma guia, mas por algum motivo, ele não aparece como um. Estou usando a notação de porcentagem de Ruby para criar uma string, que adiciona os 2 primeiros argumentos passados ao script. Há mais sobre isso aqui: http://teohm.com/blog/2012/10/15/start-using-ruby-percent-notation/fonte
\n
deve estar presente e deve ser crucial para que o programa funcione conforme o esperado.