Re: Мультиквайн - вынос мозга в избранное  новое ответить всё   подписка   модер. 
От: Кодт модератор 
Дата: 14.11.09 18:26
Оценка:5 (1)
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Прога представляет собой код на ruby, который выдает на выходе код на питоне, который выдает на выходе код на перле, который выдает на выходе код на луа, который выдает на выходе код на окамле, который выдает на выходе код на хаскелле, который выдает код на си, который выдает код на яве, который выдает код на брейнфаке, который выдает код на вайтспейсе, который выдает код на анлямбде, который выдает код на руби (в доме, который построил Джек, ага).


KV>Собственно, этюд заключается в том, чтобы понять — как оно вообще работает


Запустить интерпретаторы оных языков и последовательно посмотреть, что там творится.

Общая идея, как сделать квайн первого ранга (из себя в себя) — несложная.
начало
  "начало",
  "вывод начала (1 строка)",
  "вывод строк с кавычками",
  "вывод конца (3-5 строки)"
  "конец"
вывод начала (1 строка)
вывод строк с кавычками
вывод конца (3-5 строки)
конец

Строки в кавычках составляют словарь операторов языка программы (язык программы является подмножеством языка программирования).
На самом деле, там немножко хитрее, потому что для вывода кавычек внутри строк придётся либо упражняться с подстановками, либо нарезать строку на более мелкие куски.

Для квайна второго ранга нам потребуются два комплекта операторов
начало
  "начало",             "nachalo"
  "вывод nachala",      "vyvod начала"
  "вывод s kavychkami", "vyvod с кавычками"
  "вывод konca",        "vyvod конца"
  "конец",              "konec"
вывод nachala (стр.1б)
вывод s kavychkami (с учётом экранирования на втором языке)
вывод konca (стр.3б,4б,5б)
конец

Ну и так далее, очевидно, для произвольного ранга: "вывод nachala", "vyvod BEGIN", "print начала"...
Перекуём баги на фичи!