mbomb007 nos pediu para criar um programa auto-mutilante . É um desafio interessante, mas eu pessoalmente não gosto de incentivar meus programas a se auto-mutilarem. Eu gosto de pensar que, no centro de todo programa, há uma linda borboleta esperando para sair.
Como tal, no meu primeiro desafio do Code Golf, desafio o Stack Exchange a metamorfosear uma borboleta. Seu programa deve aceitar seu próprio código como entrada e saída, I am a caterpillar!
seguido pelo código de outro programa no mesmo idioma (você pode colocar um divisor entre as saídas ou não ... mas estamos falando de borboletas, então a beleza conta!). Este segundo programa deve gerarI am a beautiful butterfly!
Metamorfose: Este programa deve se modificar, e é por isso que está sendo transmitido como entrada. Eu não quero um programa aninhado chato que não passa de uma declaração de impressão I am a caterpillar!
seguida pela impressão do código-fonte. Você deve metamorfosear o próprio código, para que a resposta mais chata e aceitável seja aquela que imprime I am a caterpillar
, depois rasga uma string da entrada (que por acaso é código) e imprime isso. Obviamente, esse é um pequeno requisito muito complicado de se escrever, por isso deve ser pensado como um "espírito do desafio". O requisito formal será definido como "Se o seu programa receber uma sequência aleatória do mesmo tamanho que o seu programa, deverá haver menos de 5% de chance de impressão I am a butterfly
quando o segundo programa for executado".
Resumo:
- Escreva um programa que, quando fornecido seu próprio código como entrada, imprima
I am a caterpillar!
seguido por um bloco de código-fonte (com um delimitador entre eles ou não). - Esse segundo bloco de código-fonte, quando compilado / interpretado como o mesmo idioma, imprime
I am a beautiful butterfly!
- Se o seu programa não receber seu próprio código-fonte como entrada e, em vez disso, receber uma sequência aleatória de caracteres que não corresponda ao seu próprio código, o resultado poderá falhar na compilação / interpretação ou não imprimir
I am a butterfly!
pelo menos 95% dos caracteres aleatórios. strings (espírito: espera-se que você leia seu próprio código fonte da entrada e costure-o em uma borboleta).- Fico confortável com você não provar isso, desde que mantenha o espírito da ideia de metamorfose, modifique seu próprio código, mas se estiver tentando jogar jogos de brecha para contornar as entradas, espere ter Para o provar.
- Aplicam-se brechas padrão
Eu gostaria que eles fossem julgados por sua beleza, mas essa é uma abordagem decididamente não quantitativa, para que a rota usual de "número de bytes" possa ser usada para julgar
Bônus : -20% - escolha qualquer sequência de 3 letras que não corresponda às 3 primeiras letras do seu programa. Se eu executar o programa caterpillar, mas modificar a entrada para que os 3 primeiros caracteres sejam alterados para os especificados, imprima I am Batman!
. Seja sempre o Batman. (As mesmas regras de cadeia aleatória se aplicam a essa ... metamorfose! )
Exemplo trivial (python):
"""
print "I am a beautiful butterfly!"
#print "I am Batman!"
"""
import sys
code = sys.stdin.read()
if code.startswith("YYZ"):
# swap the comments between the print statements
code = code.replace("#print", "_a").replace("print", "#print").replace("_a", "print")
code = [3:] # remove """ or XYZ
code = code.split('"""')[0]
print "I am a caterpillar!"
print code