Написать метахин


19

Метахина - это программа, которая не является квинной, но вывод которой при запуске в качестве программы на том же языке - квин.

Целью этой задачи является написание метахина. Это , поэтому выигрывает самый короткий код, причем самый ранний ответ используется в качестве тай-брейка. Обратите внимание, что допустимы только полные программы из-за определения квин.

Правила для Quines

Только истинные quines принимаются. То есть вам нужно вывести весь исходный код дословно в STDOUT без :

  • чтение вашего исходного кода, прямо или косвенно.
  • полагаясь на среду REPL, которая просто оценивает и печатает каждое выражение, которое вы передаете.
  • полагаться на языковые функции, которые в некоторых случаях просто распечатывают источник.
  • используя сообщения об ошибках или STDERR, чтобы написать полностью или частично quine. (Вы можете писать что-то в STDERR или выдавать предупреждения / несмертельные ошибки, если STDOUT является действительным кванем, а сообщения об ошибках не являются его частью.)
  • исходный код, состоящий исключительно из литералов (будь то строковые литералы, числовые литералы и т. д.) и / или NOP.

Любой не подавляемый вывод (такой как уведомления об авторских правах, сообщения о запуске / завершении работы или задний перевод строки) может быть проигнорирован в выводе ради действительности квин.

пример

Игнорирование правила, которое запрещает программы, предназначенные только для литералов, и встроенные запросы, это было бы мета-квинью в Seriously:

"Q"

Программа состоит из единственного строкового литерала "Q", который неявно печатается при выводе. Когда output ( Q) выполняется, это quine ( Qэто встроенная функция quine).


2
Применимо ли правило литералов / комментариев / NOPs к выводу (то есть к реальной квине) метацитаты? В противном случае, напр. Tэто простой однобайтовый ответ Pyth.
Ручка двери

@ Doorknob Да, я уточню.
Мего

8
Я действительно не вижу, где трудная точка этого вызова. Разве стратегия «печатать строку, содержащую самую короткую из известных квин» не гарантированно выиграет для каждого языка?
Роковая

1
@Fatalize Ну, я думаю, что интересный вопрос, может ли это быть сделано в том же количестве или меньше байтов, чем сам квайн.
Мартин Эндер

3
@Fatalize Разве не возможно, что вы могли бы написать короткий метахин, который печатает длинный, но действительный квайн?
Rhyzomatic

Ответы:


15

CJam, 6 байтов

"_p"_p

Печать

"_p"
_p

который является самым коротким правильным Quine в CJam.

Проверьте это здесь.

объяснение

Обе программы работают точно так же, так как перевод строки внутри правильного quine запрещен и включен только потому, что его удаление из вывода обходится дороже. Как работают программы:

"_p"  e# Push this string.
_     e# Duplicate it.
p     e# Print a string representation of the top of the stack (i.e. the string with
      e# quotes) followed by a linefeed.
      e# The other copy is then printed automatically at the end of the program, without
      e# stringifying it.

Примечание

То же самое работает в GolfScript как

".p".p

какие отпечатки

".p"
.p

с завершающим переводом строки, который, в свою очередь, является одним из самых коротких из известных quines.


10

Pyth, 12 11 10 9 байт

Сбил еще один байт благодаря @ Pietu1998.

jN B".[9N

Это печатает

.[9N".[9N

который является quine в Pyth. Вы можете попробовать это здесь .


Является ли вывод новой записью для самой короткой пифы? Я не верю, что когда-либо видел это раньше.
ETHproductions

Я не мог найти это где-нибудь еще. Я придумал это, пытаясь получить метахин.
Rhyzomatic

1
Возможно, вы должны опубликовать это как ответ на первоначальный вызов
Quine

2
Вы можете получить это до 9 с помощью jN B".[9Nили .[9N"jN B. ( jN B"jN Bеще одна настоящая квинна в 9: раздвоение тождественной функции и присоединение ".)
PurkkaKoodari

@ Pietu1998 Спасибо! Я знал, что должен быть способ довести его до девяти. Есть ли в Pyth квины, которые короче 9 байт?
Rhyzomatic



4

Python 2, 29 байт

_="_=%r;print _%%_";print _%_

Оказывается, знаменитая короткая питон-квин легко превращается в метахиню :)

И, поскольку нам не нужно беспокоиться о сопоставлении завершающего символа новой строки, метахин на самом деле короче!


Снова бей меня к этому :( Я думал об обертке, но твоя лучше
Эрик Аутгольфер

3

Japt, 15 13 байт

Q+"+Q ³s7J" ²

Проверьте это онлайн!

Эта программа выводит

"+Q ³s7J"+Q ³s7J

которая является самой короткой из известных ква в Японии.

Как это устроено

Q+"..." // Take a quotation mark plus this string.  "+Q ³s7J
²       // Repeat it twice.                         "+Q ³s7J"+Q ³s7J
        // Implicit output

Неконкурентная версия, 11 байт

Q+"+Q ²é" ²

Я только что добавил é команду «Повернуть». Так

"+Q ²é"+Q ²é

теперь действующий квайн.


1

Руби, 25 23

puts"puts <<2*2,2
"*2,2

Создает классический рубиновый HEREdoc quine

puts <<2*2,2
puts <<2*2,2
2

Старое решение

_='_=%p;$><<_%%_';$><<_%_

Генерирует себя за исключением случаев, когда одинарные кавычки заменяются на двойные.



1

Рыба (> <>), 17 байт

Это работает с использованием классической рыбной квинны, "r00g!;oooooooo|но добавляет a, {который сдвигает весь стек влево, так что исходная программа не является квинной, а выводится при запуске.

"{r00g!;oooooooo|

Выходы:

"r00g!;oooooooo|

который является рыбой


1

Желе , 3 байта (не конкурирует)

К сожалению, необходимые атомы примерно на 2 недели моложе задачи.

Metaquine

”Ṙv

Попробуйте онлайн!

Как это устроено

”Ṙv  Main link. No arguments.

”Ṙ   Set the left argument and the return value to the character 'Ṙ'.
  v  Dyadic eval; evaluate the return value with the left argument as argument.
     Executing the atom Ṙ on the argument 'Ṙ' prints a string representation of
     the character, i.e., the string "”Ṙ".
     Finally, v returns its unaltered argument, which is printed implicitly.

Куайн

”ṘṘ

Попробуйте онлайн!

Как это устроено

”ṘṘ  Main link. No arguments.

”Ṙ   Set the left argument and the return value to the character 'Ṙ'.
  Ṙ  Print a string representation of the character, i.e., the string "”Ṙ".
     (implicit) Print the unaltered return value.

Так как второй выводит первые два символа ( ”Ṙ), по нашему определению это правильный quine.


1

Октопен-Бару, 22 байта

** Не конкурирующий ответ

愛[35211].pack歩U')

Рубиновый вывод

puts [35211].pack(' U')

Какие выводы . Который является куиной в Октопен-Бару!


1

7 , 2 байта, задание на языковые постдаты

Длина программы составляет два байта, и ее можно интерпретировать несколькими способами; как шестнадцатеричный дамп:

00000000: 4ff4                                     O.

как кодовая страница 437:

O⌠

или, что наиболее читаемо, в восьмеричном (который обычно использует 7):

237723

Попробуйте онлайн!

Работа этого очень проста: это стандартная 7-квина с элементом стека no-op, вставленным между двумя половинами, чтобы сделать его разным (в этом контексте 7разделяет элементы стека). (Я мог бы также вставить это в начале 723723. Я не мог бы интерпретировать это в конце, потому что конечные 7 подобны конечному пробелу и игнорируются в упакованном кодировании, таким образом, это не будет отличаться от выходной программы. )

Кстати, эта программа представляет собой в шестнадцатеричном формате, но это в основном совпадение.


1

Недогрузка, 11 байт

(:aSS)::aSS

Довольно просто Он распечатывает (:aSS):aSS, что является стандартной формой недогрузки.


1

Брахилог , 12 байт

"~k;?w₁"gjw₃

Попробуйте онлайн!

Одна из 132 вариаций метахина одинаковой длины на лебеде, которую я перевел с фатализированной Brachylog v1 (без мошенничества). Я на самом деле написал (не в гольф, и в целом глупо) программу, чтобы распечатать все из них:

{[[";?","gj","jḍ"],"₁₃₅₇"]j∋ᵐ{ḍ≠&};"\"~~k~ww~w\"~ww~w~n"}ᶠ{lw" metaquines generated:
"ẉ&}w₁ᵐ

Попробуйте онлайн!

Есть две части исходного Куайн , которые могут быть заменены: несущественно ;?может быть изменен gjили jḍ, и может быть изменен на , или . Если мы сохраним или изменим их вне строкового литерала одним способом и внутри строкового литерала другим способом, то вывод не будет соответствовать источнику, потому что любые варианты, присутствующие в строковом литерале, будут напечатаны как внутри, так и вне его , в результате чего получился quine, который не был начальным запуском программы.

;?, gjИ jḍявляются взаимозаменяемыми , поскольку все три пары строка буквальным с самим собой: за счет компоновки программы, входная переменная ?унифицирована со строкой, так что ;?пар строка с самим собой; независимо от макета, gjоборачивает строку в список, который затем соединяется с собой; аналогично jḍобъединяет строку с собой, а затем разбивает ее пополам.

wИндексы с нечетными номерами являются взаимозаменяемыми, поскольку, хотя первоначально они wмогли принимать только 0 или 1, при 0 при печати ввода в w1 и при печати 1 первого элемента, отформатированного со вторым, инвентаризация индекса для wвыросла во что-то, что внешне функционирует как битовое поле: младший бит нижнего индекса кодирует, является ли он прямым или отформатированным, средний бит кодирует, является ли выходная переменная изwявляется неограниченным или установленным на вход, а старший бит кодирует, выполняется ли печать немедленно или задерживается до конца программы, чтобы ее можно было отследить. (Эти подписки были моим первым и пока самым большим вкладом в брахилог.) Поскольку квин и метахин не используют выходную переменную и не возвращают, все четыре нечетных индекса эквивалентны.


0

Befunge-93, 22 байта

"+1_@#`+39:,g0:">:#,_@

Я просто взял стандартный quine, поместил его в кавычки, перевернул его (чтобы он правильно загружался в стек), а затем добавил в конце стопку.

Это 8 символов, добавленных к обычной квине, поэтому очень возможно, что есть лучшее решение.


Не могли бы вы просто взять стандартную квинну и добавить новую строку? Новая строка исчезнет на этапе синтаксического анализа, и у вас останется только стандартный quine (который напечатает сам).

0

Turtlèd , 52 байта (неконкурентный)

На 1 меньше, чем оригинал

@##'@r,r,r-{ +.r_}r{ +.r_}"#'@r,r,r-{ +.r_}r{ +.r_}"

Работает так же, за исключением того, что в конце у него нет символа, при запуске у него будет символ в конце, который не влияет на вывод, потому что он записывает # в #. Обратите внимание, что вывод немного отличается от квин, который я создал для вызова квин, но работает так же: «пишет #, который является его собственным последним символом, подобно квине, которую я сделал. Посмотрите объяснение там .


0

Луа, 45 байт

Код Куайна не мой.

s="s=%qprint(s:format(s))"print(s:format(s));

приведет к

s="s=%qprint(s:format(s))"print(s:format(s))

который является квайн. Рад ;является необязательным в Lua.


0

Напористый , 7 байтов

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

Это стандартная квинна, но с удаленными символами новой строки. Символы новой строки ничего не значат в Pushy, но являются стандартным разделителем оператора печати и, следовательно, необходимы для истинного quine.

95 34_"

Попробуйте онлайн! Это выводит:

95 34
_»

Который является самой короткой Пушистой куайной - объяснение того, как это работает, можно найти здесь .

Альтернативно, H5-34_"работает для того же количества байтов.


0

Пена , 14 байт

[. .'|: ~|]: ~

Здесь печатается вторая пена Quine, которую можно найти здесь . Это на самом деле короче, потому .что всегда будет ставить пробел между каждым элементом, но столбец на третьем токене позволяет мне опустить пробел перед ним.


Я удалил неконкурентную часть, потому что новые языки не являются автоматически неконкурентоспособными в соответствии с политикой сайта.
Mego

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.