Quines это весело. Полиглоты тоже веселые. Полиглоты Quine существуют, но мы можем поднять планку еще выше.
Напишите файл, содержащий действительную программу для языков α, β и γ. Когда файл исполняется (возможно, после его компиляции) как языковая программа α или β, выходные данные программы должны иметь ту же форму, что и действительное представление для этого конкурса. Если ваш файл выполняется как программа на языке γ, он должен вывести число. Значение этого числа - цепочка предыдущих выполнений программы, интерпретируемая как двоичное число.
Это объяснение может быть немного трудно понять, поэтому вот пример. Пусть Α, Β и Γ - функции, которые выполняют свой ввод как язык α, β или γ соответственно. запрограммируйте и верните выходные данные этих программ. Пусть х будет действительным представлением на этот конкурс. Тогда следующее выражение, где мы обрабатываем x на языке β, α, β, α, α, β и γ в этом порядке, даст 41, поскольку 41 10 = 101001 2 .
Γ (Β (Α (Α (Β (Α (Β ( x ))))))))
Вы не можете предполагать, что предпоследнее выполнение в цепочке является выполнением на языке β. Для случая, когда ваше оригинальное представление выполняется непосредственно как языковая программа γ, оно должно вывести 0.
Ваша программа должна вести себя корректно до 16 сборников в цепочке; то есть наибольшее число, которое ваша программа может распечатать в конце, составляет 2 15 - 1. Конечно, вашей программе разрешено поддерживать более длинные цепочки компиляции.
Это конкурс популярности для поощрения творческих решений. Представление с наибольшим количеством голосов выигрывает.
источник
magic += Number(System.env.lang_version[-1])
a,b,c
или1,2,3
=)Ответы:
Питон 2, Питон 3,> <> (Рыба)
Объяснение Python
Интерпретаторы Python 2 и Python 3 работают аналогично, за исключением того, что
v=int(1/2*2)
переменная получает разные значения (0
и1
), так как Python 2 использует деление с плавающей запятой, а Python 3 использует целочисленное деление.При каждом запуске они добавляют выражение
+0*2
или+1*2
в первую строку (после#;n
) и вx
строку (после последней команды записи). Интерпретатор> <> использует первое дополнение, а Питоны используют второе для создания правильных квиней.Код после
B(A(B(B(x))))
:> <> (Рыба) объяснение
Когда вы запускаете интерпретатор> <>, указатель кода отскакивает от
#
переносов вокруг первой строки и начинается с конца первой строки, а заголовок West начинает помещать числа в стек. Если оператор приходит (+
или*
), он выталкивает два верхних элемента из стека и возвращает результат. С помощью этого метода мы получаем представление base2 предыдущих прогонов (13
в предыдущем примере). Это желаемое число, поэтому мы выводим его с помощьюn
и заканчиваем с;
.источник