Напишіть напівхін


10

Припустимо, у вас є 2 мови Aта B. Рядок s- це напівквіток в, Aі Bякщо він відповідає наступним умовам:

  1. sє лайкою в мові A.
  2. sявляє собою поліглот в Aі B.
  3. Висновок запуску sяк Bпрограми - це інший рядок s', який є quine in B.

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

Правила для Quines

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

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

Крім того, ваш вихідний код не повинен складатися виключно з літералів (будь то рядкові літерали, числові літерали тощо) та / або NOP. Наприклад, `12це поліглот в Jelly і Pyth, але в Jelly це NOP і числовий буквал, тому він недійсний.

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

Правила для поліглотів

Дві використовувані мови повинні бути чітко різними. Зокрема:

  • Вони не повинні бути різними версіями однієї мови (наприклад, Python 2 проти Python 3).
  • Вони не повинні бути різними діалектами однієї мови (наприклад, Pascal vs. Delphi).
  • Одна мова не може бути підмножиною іншої (наприклад, C проти C ++ 1 ).
  • Одна мова не може бути тривіальним похідним від іншої (наприклад, Matlab vs. Octave 2 , brainfuck vs Billfuck vs TinyBF vs ShadyAsFuck проти всіх інших тривіальних похідних brainfuck).

Різні правила

  • Ви не можете приймати дані від STDIN (або будь-якого іншого джерела). Якщо обрана мова повинна приймати введення, то або вхід повинен бути порожнім (порожня рядок, трубопровід /dev/nullтощо), або вихід програми не повинен залежати від введення.
  • Для цього завдання ви повинні написати повну програму. Потрібен додатковий код для запуску рішення не допускається (наприклад, призначення та виклик функції лямбда, визначеної в рішенні).

1: Так, я знаю, що C насправді не є підмножиною C ++. Це досить близько, щоб вважати його одним з метою поліглотів, тому я вважаю це завданням.

2: Як і пункт 1 вище, хоча Octave технічно не на 100% сумісний з Matlab, він був розроблений таким чином, щоб бути сумісним і досить близьким, що дозволяти поліглоту Matlab / Octave би реалізувати виклик.


Чи дозволені блоки копіювання ESMin?
lirtosiast

@ThomasKwa Я не знайомий з ESMin, тож чи не могли б ви мені швидко пройти?
Мего

Існує команда запустити блок копіювання, який отримує вихідний код всього минулого. Я думаю, що інші мови для гольфу JS теж можуть мати його.
lirtosiast

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

1
@Downgoat Поки він не порушує жодних інших правил, абсолютно. Зловживання примхами - це якась мета цього сайту :)
Mego,

Відповіді:


6

GolfScript + Fission , 19 18 байт

{".~
'!+OR"
2<}.~

Подаючий рядок подачі необхідний.

Це справжня квитка в GolfScript. Спробуйте в Інтернеті!

У Fission він друкує

'!+OR"

що є справжньою квінкою у Fission . Спробуйте в Інтернеті!

Пояснення

У GolfScript будь-яка форма

{...}.~

являє собою quine до тих пір, поки ...залишає рядок з ".~"на стеці. .Дублює блок, таким чином, що є одна копія , яка друкується в кінці кінців, і ~виконує його, тому ми можемо використовувати його вміст для друку .~себе. У цьому випадку блок висуває рядок

".~
'!+OR"

а потім усікає його до перших двох символів с 2<.

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


6

Ruby + (JavaScript або Python 3), 76 байт

Це ще одне завдання, яке можна вирішити, використовуючи мою нову улюблену мову, майже поширену підмножину Ruby, JavaScript та Python 3; і зважаючи на те, що у нас поки що немає відповідей на екзотеричних мовах, і багатьом людям подобається бачити не-гольф-мовні рішення, я подумав, що я докладу. Ще краще, що однакова відповідь вирішує виклик різними способами одночасно.

Ось s:

s="'";d='"';n='print("s="+d+s+d+";d="+s+d+s+";n="+s+n+s+";eval(n)")';eval(n)

Це лайка в Рубі. Це не лайка в JavaScript або Python 3; якщо запустити його на будь-якій з цих мов, його вихід s'має новий штрих і, таким чином, відрізняється:

s = "'"; d =' "'; n =' print (" s = "+ d + s + d +"; d = "+ s + d + s +"; n = "+ s + n + s +" ; eval (n) ") '; eval (n)

Однак, s'це поліглот-квінка в JavaScript та Python 3! (Як зазвичай для мене, я використовую реалізацію JavaScript Rhino, як для зручності (оскільки він працює з командного рядка, а не потрібен браузер), так і тому, що у нього є дивна стандартна бібліотека, в яку printзаписується до стандартного виводу.) Обидві мови виробляються s'в результаті запуску будь-якої програми.

Як бонус, ця програма також вирішує проблему в зворотному порядку. Якщо ви вирішите запустити s'в Ruby, вона знову надрукує оригінальну програму s. Таким чином, s'є коректною (але трохи довшою, 77 байт) відповіддю на питання.

На цьому етапі я майже починаю думати, що «відмінності в тому, чи закінчується вихідний рядок новим рядком, достатнім для того, щоб рахувати дві програми як різні», слід вважати стандартною лазівкою, враховуючи, що це, здається, другий набір мов (за межами добре відомого GolfScript / CJam), в якому можна вивести трюк.


2

Vitsy (безпечний режим) та Y, 9 байт, неконкурентоспроможний.

' Ugrd3*Z

У Віци це квін. У Y це відбитки Ugrd3*Z'; при запуску це друкує Ugrd3*Z', що є квинтом у Y. Y, однак ставить питання.

Що бачить Віті:

 ' Ugrd3*Z
 '         Heyyyy a string! Let's do this!
  ........ Capturing a string! Oh, not done? Hm, let's go back to the start.
 '         There we go.
           (space) ...
   U       (no op)
    g      use count, disabled in safe mode
     r     reverse stack
      d3*  push a '
         Z print it all!

Що бачить Y:

' Ugrd3*Z
'         Push a space.
  U       Wrap around and capture.
   g      Print that. (Nothing else is printed.)

1
Зауважте, що це працює лише в безпечному режимі, або, вірніше, він має деякі ... ненавмисні побічні ефекти в небезпечному режимі.
Аддісон Кримп

1

CJam + GolfScript, 9 байт

"0$p"
0$p

Це quine у ​​CJam. У GolfScript він виводить себе з новим рядком, який є кінцевим в GolfScript.

Я не впевнений, чи варто вважати CJam тривіальною похідною GolfScript. Але я думаю, що вони зовсім інші і принаймні не банальні.

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