mbomb007 попросил нас сделать самоуничижительную программу . Это интересная задача, но я лично не люблю поощрять свои программы к самоповреждениям. Мне нравится думать, что в основе каждой программы лежит красивая бабочка, ожидающая своего появления.
Таким образом, для моего первого испытания Code Golf я ставлю задачу Stack Exchange метаморфизировать бабочку. Ваша программа должна принимать собственный код в качестве входных и выходных данных, I am a caterpillar!
за которым следует код для другой программы на том же языке (вы можете поместить разделитель между выходными данными или нет ... но мы говорим о бабочках, поэтому красивость имеет значение!). Эта вторая программа должна выводитьI am a beautiful butterfly!
Метаморфоза: эта программа должна изменить себя, поэтому она передается в качестве ввода. Я не хочу скучную вложенную программу, которая является не чем иным, как оператором печати, I am a caterpillar!
за которым следует печать исходного кода. Вы должны метаморфировать сам код, поэтому самый скучный приемлемый ответ - это тот, который печатает I am a caterpillar
, затем вырывает строку из ввода (которая оказывается кодом) и печатает ее. Конечно, это очень сложное требование, чтобы писать, поэтому его следует воспринимать как «дух вызова». Формальное требование будет установлено на «Если вашей программе задана случайная строка той же длины, что и ваша программа, то I am a butterfly
при запуске второй программы вероятность печати будет менее 5% ».
Резюме:
- Напишите программу, которая при вводе своего собственного кода в качестве входных данных печатает,
I am a caterpillar!
а затем блок исходного кода (с разделителем между ними или нет). - Этот второй блок исходного кода при компиляции / интерпретации на том же языке печатает
I am a beautiful butterfly!
- Если ваша программа не вводит свой собственный исходный код в качестве входных данных, а вместо этого получает случайную строку символов, которая не соответствует ее собственному коду, результат должен либо не скомпилироваться / интерпретировать, либо не распечатать
I am a butterfly!
хотя бы для 95% случайных чисел strings (spirit: от вас ожидают, что вы прочитаете свой собственный исходный код из входных данных и соедините его в бабочку).- Мне удобно, если вы не докажете это, пока вы придерживаетесь идеи метаморфозы, модифицируете свой собственный код, но если вы пытаетесь играть в лазейки, чтобы обойти свои входные данные, ожидайте, что получите чтобы доказать это.
- Применяются стандартные лазейки
Я бы хотел, чтобы об этом судили по их красоте, но это явно не количественный подход, поэтому для оценки можно использовать обычный маршрут «число байтов».
Бонус : -20% - выберите любую 3-буквенную строку, которая не соответствует первым 3 буквам вашей программы. Если я запускаю программу Caterpillar, но изменяю ввод, чтобы первые 3 символа были заменены указанными, I am Batman!
вместо этого выведите . Всегда будь Бэтменом. ( Для этой метаморфозы применяются те же правила случайных строк! )
Тривиальный пример (питон):
"""
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