Escreva um programa que imprima a mensagem de erro de sintaxe do compilador ou intérprete. A mensagem de erro deve ser enganosa, para que os mantenedores de código levem dias para descobrir que o erro foi falsificado, ou seja, você deve ofuscar (e ocultar sua intenção). Além disso, o erro deve ser o mais exato possível e deve fazer referência ao código corretamente.
Para idiomas cumpridos, suponha que seu mantenedor de código faça compile program.p && ./program
na linha de comando para compilar E executar o programa, ou seja, ele não pode distinguir se a saída vem do compilador ou do próprio programa. Além disso, suponha que seu mantenedor de código ative as mensagens de erro de sintaxe.
Para referência, aqui está um exemplo que eu fiz: https://gist.github.com/359604
A DATA
seção codifica a sequência de mensagens de erro e o hash %abcdef
é a tabela de decodificação. O erro imprimiu referências às barras invertidas, o que faz com que um mantenedor de código tente contar as barras invertidas.
As inscrições serão classificadas por:
- O código tem uma intenção enganosamente óbvia
/6
- O código reproduz o erro corretamente
/16
(seu ponto começa com 16 e divide pelos fatores correspondentes para cada imprecisão)- Capitalização correta: 4
- Número correto da linha e número da coluna: 4
- Redação correta: 2 para cada palavra incorreta
- O número da linha referenciado engana o mantenedor do código
/3
Por exemplo,
./pythontest1.py: line 7: syntax error near token `('
./pythontest1.py: line 7: ` x=input("Enter a number:") #Number input'
obtém 8 (16/2) de correção por falta "inesperada" antes de "token", um interpretador Python normal exibe
./pythontest1.py: line 7: syntax error near unexpected token `('
./pythontest1.py: line 7: ` x=input("Enter a number:") #Number input'
Se o seu ponto "código reproduz erro corretamente" estiver abaixo de 1, sua entrada será desqualificada.
Em caso de empate, colocarei fatores adicionais de classificação.
fonte
Respostas:
Pitão
Este é um programa que deve colocar um nome de arquivo na linha de comando, avaliar a primeira linha e imprimir o resultado. Possui 2 bugs. O principal erro é que ele não deve ser usado
sys.argv[1]
,sys.argv[0]
por isso acaba avaliando o próprio programa, não o conteúdo do arquivo nomeado pelo primeiro argumento. O segundo erro é que o argumento paraprint_exc
imprimir apenas o quadro mais profundo da pilha, oculta o fato de que o erro ocorreu dentro doeval
. Como resultado, você recebe um erro como este:Parece muito com a primeira linha do programa com um erro de sintaxe. Não é tão correto quanto o arquivo
<string>
, nãofake_error.py
, mas, caso contrário, é indistinguível do caso em que, por exemplo, você escreveimport
errado.Ambos os erros são um tanto "disfarçados", pois podem ser acidentais.
fonte
raise
no Python 2, mas no IDLE, o IDE padrão do python, causa um erro interno na impressão de bobagens sobre filas.Traceback (most recent call last): ** IDLE Internal Exception: File "2.7/lib/python2.7/idlelib/run.py", line 325, in runcode exec code in self.locals File "2.7/lib/python2.7/idlelib/run.py", line 111, in main seq, request = rpc.request_queue.get(block=True, timeout=0.05) File "2.7/lib/python2.7/Queue.py", line 176, in get raise Empty
Me lembra uma piada prática.
fonte
BrainF ***
Não consigo encontrar o compilador específico que usei antes, mas garanto que essa é a mensagem de erro exata.
fonte
:)
Java
Não sabia se você pretendia realmente lançar uma exceção não tratada (como no exemplo) ou simular uma mensagem de erro. Se for esse o caso, isso deve funcionar:
C
(isso pressupõe que
stdio.h
#included)fonte
Idioma do Game Maker
fonte
ACTIONSCRIPT 3
fonte