Предположим, у вас есть 2 языка, A
и B
. Строка s
является полухинией, A
и B
если она удовлетворяет следующим условиям:
s
это квин на языкеA
.s
полиглот вA
аB
.- Результатом работы
s
в качествеB
программы является другая строкаs'
, которая представляет собой квинусB
.
Цель этой задачи состоит в том, чтобы написать полуколину на двух разных языках. Это код-гольф , поэтому выигрывает самый короткий код, причем самый ранний ответ используется в качестве тай-брейка.
Правила для Quines
Принимаются только настоящие квины. То есть вам нужно вывести весь исходный код дословно в STDOUT без :
- чтение вашего исходного кода, прямо или косвенно.
- полагаясь на среду REPL, которая просто оценивает и печатает каждое выражение, которое вы передаете.
- полагаться на языковые функции, которые в некоторых случаях просто распечатывают источник.
- используя сообщения об ошибках или STDERR, чтобы написать полностью или частично quine. (Вы можете писать что-то в STDERR или выдавать предупреждения / несмертельные ошибки, если STDOUT является действительным кванем, а сообщения об ошибках не являются его частью.)
Кроме того, ваш исходный код не должен состоять исключительно из литералов (будь то строковые литералы, числовые литералы и т. Д.) И / или NOP. Например, `12
это полиглот в Jelly и Pyth, но в Jelly это NOP и числовой литерал, поэтому он недопустим.
Любой не подавляемый вывод (например, уведомления об авторских правах, сообщения о запуске / завершении работы или задний перевод строки) может быть проигнорирован в выводе ради действительности квин.
Правила для полиглотов
Используемые два языка должны быть совершенно разными. В частности:
- Они не должны быть разными версиями одного и того же языка (например, Python 2 против Python 3).
- Они не должны быть разными диалектами одного и того же языка (например, Паскаль против Дельфи).
- Один язык не может быть подмножеством другого (например, C против C ++ 1 ).
- Один язык не может быть тривиальной производной другого (например, Matlab против Octave 2 , брейнфук против boolfuck против TinyBF против ShadyAsFuck против всех других тривиальных производных мозга).
Разные правила
- Вы не можете принимать входные данные от STDIN (или любого другого источника). Если выбранный вами язык должен принимать входные данные, то либо вход должен быть пустым (пустая строка, по трубопроводу
/dev/null
и т. Д.), Либо вывод программы не должен зависеть от ввода. - Для этого испытания вы должны написать полную программу. Запрещается запрашивать дополнительный код для запуска решения (например, присваивать и вызывать лямбда-функцию, определенную в решении).
1: Да, я знаю, что C на самом деле не является подмножеством C ++. Это достаточно близко, чтобы считаться одним для полиглотов, поэтому я считаю это для этой задачи.
2: Как и в пункте 1 выше, хотя Octave технически не на 100% совместим с Matlab, он был разработан для совместимости и достаточно близок, чтобы использование полиглота Matlab / Octave могло бы упростить задачу.