Задание
В этой задаче ваша задача состоит в том, чтобы написать три программы, которые образуют своего рода взаимную квиноподобную систему. Давайте называть программы A
, B
и C
. Если одна из программ получает источник другой программы в качестве входных данных, она должна выводить источник третьей программы. Например, если A
задано B
как вход, оно выводит C
. Если программы дают свой собственный источник в качестве входных данных, то они должны выводить три строки "three"
, "mutual"
и "quines"
(без кавычек). Во всех случаях они могут вывести один дополнительный завершающий символ новой строки. Для любых других входных данных программы могут делать что угодно, включая сбой.
пример
Например, предположим, что исходные коды A
, B
и C
есть aSdf
, ghJk
и zxcV
. Тогда программы должны вести себя следующим образом.
Source Input Output
--------------------
aSdf aSdf three
aSdf ghJk zxcV
aSdf zxcV ghJk
ghJk aSdf zxcV
ghJk ghJk mutual
ghJk zxcV aSdf
zxcV aSdf ghJk
zxcV ghJk aSdf
zxcV zxcV quines
Правила и оценки
Решения A
, B
и C
могут быть либо функции или полные программы, но они должны быть полностью независимыми: не общий код не допускается.
Применяются стандартные лазейки и правила quine , поэтому программы никак не могут получить доступ к своим исходным кодам.
Ваша оценка - это общее количество байтов A
, B
и чем C
меньше оценка, тем лучше.
public static void main
где-то имеют какую- то часть.) Или просто то, что вы не можете написать функцию, которая вызывается всеми тремя?Ответы:
CJam,
16514711410899 байтСпасибо @ MartinBüttner за предложение, которое помогло сэкономить 48 байт!
Попробуйте онлайн в интерпретаторе CJam .
верификация
идея
Множество {0, 1, 2, 3} является группой в операции ^ (двоичное исключающее ИЛИ), где каждый элемент имеет свою собственную инверсию.
Если все три программы идентичны, за исключением первого символа (элемент {0, 1, 2, 3} ), мы можем легко различить и распечатать их:
Мы начинаем с XORing цифры в начале исходного кода и ввода.
Если результат в 0 , источник и вход совпадают.
Таким образом, мы печатаем одно из трех слов, выделенных этой общей цифрой.
Если результат не равен 0 , это элемент {1, 2, 3} , которого нет ни в источнике, ни во входе.
Таким образом, мы печатаем его, а затем остальную часть ввода.
Как это работает
источник