Напишіть Metaquine


19

Metaquine - це програма, яка не є quine, але вихід якої при запуску програми як на одній мові є quine.

Мета цього завдання - написати метакін. Це , тому найкоротший виграш коду, найраніша відповідь використовується як краватка. Зауважте, що прийнятні лише повні програми, що обумовлено визначенням квітки.

Правила для Quines

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

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

Будь-який непригнічуваний вихід (наприклад, повідомлення про авторські права, повідомлення про запуск / вимкнення або подача кінцевих рядків) може бути ігнорований у висновку заради дійсності квинти.

Приклад

Ігноруючи правило, яке забороняє програми, доступні лише буквально, та вбудовану анкету, це було б метакіном у Серйозно:

"Q"

Програма складається з однорядного літералу "Q", який неявно друкується на виході. Коли output ( Q) виконується, це quine ( Qце вбудована функція quine).


2
Чи застосовується також правило літералів / коментарів / НОП до результатів (тобто реальної квінти) метакватета? Інакше екс. T- це легкий 1-байтний відповідь Pyth.
Дверна ручка

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

8
Я насправді не бачу, де складний момент цього виклику. Чи не є стратегія "надрукувати рядок, який містить найкоротший відомий quine", що гарантовано виграє для кожної мови?
Фаталізувати

1
@Fatalize Ну, мабуть, цікаве питання полягає в тому, чи можна це зробити в тій же кількості або меншій кількості байтів, ніж сама квіне.
Мартін Ендер

3
@Fatalize Чи не можливо також, що ви могли написати короткий метакін, який друкує довгу, але дійсну квіну?
Rhyzomatic

Відповіді:


15

CJam, 6 байт

"_p"_p

Друкує

"_p"
_p

яка є найкоротшою належною квінкою в 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

із зворотним підводом, який, в свою чергу, є одним із найкоротших відомих лайків.


10

Піта, 12 11 10 9 байт

Збив ще один байт завдяки @ Pietu1998.

jN B".[9N

Це відбитки

.[9N".[9N

яка є царицею в Піті. Ви можете спробувати тут .


Чи є вихід новим записом для найкоротшого Pyth quine? Я не вірю, що я його бачив раніше.
ETHproductions

Я не міг її знайти більше ніде. Я придумав це, намагаючись дістати метахін.
Римоматик

1
Можливо, ви повинні опублікувати це як відповідь на оригінальний виклик
quine

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

@ Pietu1998 Дякую! Я знав, що повинен бути спосіб отримати його до 9. Чи є в Pyth королеви, короткі на 9 байт?
Різоматик


6

Javascript ES6, 21 байт

$=_=>`$=${$};$()`
$()

Тривіально.


3
Щасливий 3к !!!!!!!
Conor O'Brien

2
@ ConorO'Brien Вау, багато респ. 3k факториал - це вже більше, ніж Джон Скіт ...
NoOneIsHere

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

Створює класичну квітку Ruby HEREdoc

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

Старе рішення

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

Згенерує себе, за винятком одиничних лапок, замінених подвійними.



1

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

Це працює за допомогою класичної рибної лайки, "r00g!;oooooooo|але додає а{ що зміщує весь стек вліво, щоб оригінальна програма не була королевою, але це результат при запуску.

"{r00g!;oooooooo|

Виходи:

"r00g!;oooooooo|

яка риб’яча королева!


1

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

На жаль, необхідні атоми приблизно на 2 тижні молодші за виклик.

Метахін

”Ṙ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.

Оскільки другий друкує перші два символи ( ”Ṙ), то це наше правильне квіта за нашим визначенням.


1

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

** Не конкуруюча відповідь

愛[35211].pack歩U')

Вихід Ruby

puts [35211].pack(' U')

Які виходи . Яка квітка в Октопен-Бару!


1

7 , 2 байти, виклик після публікації мови

Програма має два байти і може бути інтерпретована кількома способами; як шестигранний дамп:

00000000: 4ff4                                     O.

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

O⌠

або, що найчастіше, у восьмеричному (який використовує 7 улюблених):

237723

Спробуйте в Інтернеті!

Опрацювання цього дуже просте: це стандартний 7-квіновий з елементами без стека, вставленим між двома половинками, щоб зробити його різним (у цьому контексті 7розділяє елементи стека). (Я також міг би вставити його на початку 723723. Я не міг інтерпретувати це в кінці, тому що трейлінг 7 - це як трейлінг пробілу, і ігнорується в упакованому кодуванні, таким чином, він не буде відрізнятися від вихідної програми. )

До речі, ця програма є шістнадцятковим , але це здебільшого просто збіг.


1

Низький навантаження, 11 байт

(:aSS)::aSS

Досить просто. Він роздруковує (:aSS):aSS, що є стандартною ангіною Underload.


1

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

"~k;?w₁"gjw₃

Спробуйте в Інтернеті!

Один із 132 варіантів метакіну однакової довжини на лайці, який я переклав з братики Fatalize's Brachylog v1 (не обманюючий). Насправді я написав програму (без гольфу та загальну дурність), щоб надрукувати їх усі:

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

Спробуйте в Інтернеті!

Є дві частини вихідного Куайн , які можуть бути замінені несуттєво: ;?може бути змінений gjабо jḍ, і може бути змінений , або . Якщо ми будемо зберігати або змінювати їх поза рядковим літералом по-іншому, а всередині літерального рядка по-іншому, то вихід не буде відповідати джерелу, оскільки те, які варіанти були присутні в літеральному рядку, буде надруковано як усередині, так і зовні , в результаті чого з'явилася квінка, яка не була початковою програмою.

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

Непарні чисельні wпідписки є взаємозамінними, оскільки, хоча спочатку вони wмогли приймати лише 0 або 1, при 0 друкуванні вхідw та 1 друком першого елемента, відформатованого другим, інвентаризація індексів дляw перетворився на щось, що зовні функціонує як бітове поле: низький біт індекса кодує, чи є він прямим чи форматованим, середній біт кодує, чи є вихідна змінна зwне обмежений або встановлений на вхід, і високий біт кодує, чи буде друк зроблено негайно, або якщо він затриманий до кінця програми, тому він може бути предметом зворотного відстеження. (Ці підписки були моїм першим і поки що найбільшим внеском до Brachylog.) Оскільки quine та metaquine не використовують вихідну змінну і не відслідковують, всі чотири непарні підписки є рівнозначними.


0

Befunge-93, 22 байти

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

Я просто взяв стандартну quine, поставив її в лапки, перевернув її (щоб вона була завантажена на стек правильно), а потім додала стек-друк наприкінці.

Це 8 символів, доданих до звичайної quine, тому дуже можливо, що є краще рішення.


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

0

Turtlèd , 52 байти (неконкурентоспроможний)

На 1 менше, ніж оригінальна квітка

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

Працює так само, за винятком того, що він не має символу в кінці, коли він буде запущений, він буде мати символ в кінці, що не впливає на вихід, тому що він пише # on на #. Зверніть увагу, вихід має трохи відрізнятися від quine, яку я зробив для завдання quine, але працює так само: "пише #, який є його останнім символом, як і quine, яку я зробив. Ознайомтеся з поясненням там .



0

Пустотливий , 7 байт

Неконкурентований, оскільки мова передує виклику.

Це стандартна квітка, але вилучені нові рядки. Нові рядки нічого не означають у Pushy, але є стандартним роздільником для оператора друку, і тому потрібні для справжньої лайки.

95 34_"

Спробуйте в Інтернеті!Це виводи:

95 34
_ "

Яка найкоротша Pushy quine - пояснення, як це працює, ви можете знайти тут .

Крім того, H5-34_"працює для одного і того ж рахунку байтів.


0

Піна , 14 байт

[. .'|: ~|]: ~

Це друкує другу пеночку, яку можна знайти тут . Це насправді коротше, тому що .завжди буде розміщуватися пробіл між кожним елементом, але смужка в третьому маркері дозволяє мені опустити простір перед ним.


Я видалив біт, що не конкурує, оскільки нові мови автоматично не є конкуруючими відповідно до політики сайту.
Мего

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.