mbomb007 попросив нас зробити програму самовираження . Це цікавий виклик, але я особисто не люблю заохочувати мої програми до самопошкодження. Мені подобається думати, що в основі кожної програми лежить красивий метелик, який чекає, коли вирветься.
Як такий, для мого першого в історії виклику Code Golf я закликаю обмінятися стеками, щоб перетворити метелика. Ваша програма повинна приймати власний код як введення та виведення з I am a caterpillar!
подальшим кодом для іншої програми на тій же мові (ви можете поставити роздільник між виходами чи ні ... але ми говоримо про метеликів, тому чіткість рахується!). Ця друга програма повинна вивестиI am a beautiful butterfly!
Метаморфоза: Ця програма повинна змінювати себе, саме тому вона передається сама як вхідна. Я не хочу нудної вкладеної програми, яка є не що інше, як твердження про друк з I am a caterpillar!
подальшим друком вихідного коду. Ви повинні метаморфізувати сам код, тому найбільш нудною прийнятною відповіддю є той, який друкує I am a caterpillar
, потім вириває рядок із вхідних даних (що трапляється з кодом) і друкує це. Звичайно, це дуже складна вимога до написання, тому слід розглядати її як "дух виклику". Формальна вимога буде встановлена у "Якщо вашій програмі буде надано випадковий рядок такої ж довжини, що і ваша програма, при друкуванні програми друк має бути меншим, ніж 5% I am a butterfly
."
Підсумок:
- Напишіть програму, яка при наданні власного коду як вхідного сигналу друкує
I am a caterpillar!
наступний блок вихідного коду (з роздільником між ними чи ні). - Цей другий блок вихідного коду, коли компілюється / інтерпретується як однакова мова, друкується
I am a beautiful butterfly!
- Якщо ваша програма не подається власним вихідним кодом як вхідним, а натомість їй надається випадкова рядок символів, що не відповідає її власному коду, результат повинен або не вдаватися до компіляції / інтерпретації, або не надрукувати
I am a butterfly!
принаймні 95% випадкових випадків рядки (дух: очікується, що ви прочитаєте власний вихідний код із вхідних даних і зшийте їх разом із метеликом).- Мені подобається, що ви цього не доказуєте, доки ви тримаєтесь духу метаморфози, змінюючи власний код, але якщо ви намагаєтеся грати в ігри із лазівками, щоб обійтись, використовуючи свої входи, сподівайтеся щоб довести це.
- Застосовуються стандартні лазівки
Я хотів би, щоб вони оцінювались за їх красою, але це рішуче некількісний підхід, тому звичайний маршрут "кількість байтів" можна використовувати для судження
Бонус : -20% - виберіть будь-яку 3 букву, яка не відповідає першим 3 буквам вашої програми. Якщо я запускаю програму гусениць, але змінюю вхід, щоб перші 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