Seu chefe aprendeu recentemente dessa interessante linguagem de programação chamada inglês . Ele teve essa ideia "revolucionária", ele quer codificar com você para duplicar as taxas de produção! Como ele não é um especialista em tecnologia, ele quer que você escreva um compilador para que ele possa codificar também!
Agora, você é um programador preguiçoso e obviamente não escreverá um programa para compilar essa linguagem ridiculamente complexa. Em vez disso, você garantirá que sempre haja um erro no código do seu chefe, para que ele nunca chegue à compilação real e fique preso corrigindo erros gramaticais em vez de codificar.
O desafio é escrever um programa que possa ser executado no terminal e aceitar um caminho de arquivo como argumento. O programa deve:
- modifique a entrada do arquivo introduzindo um erro de digitação.
- Finja falhar na compilação devido ao erro de digitação que você introduziu.
- A execução do programa em cópias do mesmo arquivo não deve introduzir o mesmo erro de digitação duas vezes seguidas.
Para ilustrar o desafio, execute seu programa neste arquivo:
Take an array as input.
Sort the array.
Output the array.
deve produzir algo ao longo das linhas de
Error on line 1:
'Take an arqay as input.'
^
arqay is not a valid identifier.
e o arquivo que você pediu para o programa compilar agora deve ter a seguinte aparência:
Take an arqay as input.
Sort the array.
Output the array.
Aqui estão mais alguns detalhes sobre as especificações do programa:
Seu programa pode assumir que a troca de qualquer caractere no programa que seu chefe insira por um caractere aleatório diferente causará um erro gramatical. Seu programa não deve usar caracteres não alfabéticos para criar erros no código do seu chefe. Seu chefe nunca usaria um número ou símbolo e descobriria que algo está acontecendo. Seu programa deve introduzir apenas erros nas palavras do programa de seu chefe. Não altere os espaços nas frases ou na pontuação. Seu programa não deve alterar o caso do programa que seu chefe tenta compilar, significando erros como arQay
inválidos. Isso evita erros como em take
vez de Take
acontecer, ou em Array
vez de array
. Seu programa deve gerar o erro primeiro declarando em que linha está o erro:
Error on line <insert line number here>:
Em seguida, deve imprimir a linha com o erro dentro dos '
símbolos. Na próxima linha, ele deve colocar um ^
símbolo sob a palavra com o erro e, finalmente, deve ter algum texto descrevendo o erro (esta parte é sua, você pode dizer o que quiser lá, desde que descreva um erro).
Você pode assumir que o arquivo de entrada existe e não está vazio. Você também pode assumir que o arquivo de entrada não possui erros gramaticais antes de adicionar um.
Bônus:
-60 bytes se os erros introduzidos pelo código não forem completamente aleatórios, mas baseados em erros de digitação, como nesta pergunta.
-60 bytes para pelo menos 5 mensagens de erro diferentes, alternando aleatoriamente.
-60 bytes se o seu programa tiver uma chance de 1 em 100 ou menos para enviar alguma mensagem desmotivacional para o seu chefe.
EDIT: A contagem de bytes das mensagens não conta para a sua pontuação. (Obrigado a Martin Büttner por esta boa ideia)
Isso é código-golfe, a menor contagem de bytes ganha. Por favor, não jogue o conteúdo da mensagem de erro, seu chefe não ficará feliz se ele não entender as mensagens de erro e solicitará que você as corrija.