Квінт з подвійною щілиною


11

Мета:

Кодуйте дві програми, де кожна з програм виводить обидва вихідні коди з переплетеними символами, як блискавка, Quine з двома щілинами. Вихід з подвійної щілини Quine починається з першого символу з вихідного коду першої програми. Якщо вихідний код однієї з програм коротший за довжиною, ніж інший, то решта виводу повинна бути заповнена рештою більш тривалого вихідного коду.

Правила:

  1. Ви можете використовувати будь-яку мову програмування для обох програм, не потрібно однакову мову програмування для обох.
  2. Ваші програми не повинні приймати будь-які дані з файлу, імені файлу, мережі, іншої програми чи іншого.

Обов’язкові критерії:

  • Є улов, десь на виході слово QUINEвеликими літерами повинно існувати безперебійно.
  • Вам потрібно вказати, якими двома мовами програмування ви користуєтесь. Якщо ви використовуєте однакову мову програмування для обох, вам потрібно вказати лише одну мову програмування.
  • Обидві програми повинні мати можливість виконувати або інтерпретувати відповідно незалежно від іншої програми.

Приклад:

Маючи цей приклад вихідного коду програми один :

"QIE"

Маючи в цьому прикладі вихідний код програми два :

"UN"

Тоді дійсний вихід з двома щілинами Quine з обох програм повинен бути:

""QUINE""

Це код-гольф, найменше байтів при підсумовуванні довжини обох вихідних кодів, і, очевидно, також тривалість виходу кожної програми, виграє!


Кожна окрема програма також не повинна бути королевою, правда? І чи повинна кожна програма містити принаймні одного символу?
mbomb007

@ mbomb007 Це правильно. Кожна окрема програма повинна виводити обидва символи вихідного коду, як блискавку, від початку до кінця. Ну, я думаю, вам потрібен принаймні 1 байт мовою програмування, щоб вивести QUINE? Вихід з обох програм повинен бути однаковим.
Plarsen

Я не впевнений, що я розумію, що решта результатів повинна бути правильно заповнена рештою довшого вихідного коду . Як би Aі XYZпереплуталися? AXYZ?
Денніс

@Dennis Так само .+або zпрацює
Optimizer

@Dennis Правильно. Що залишилося від більш тривалого вихідного коду, коли коротший обсяг байтів повинен бути доданий до виводу обох програм.
Плорсен

Відповіді:


9

CJam, 49 47 байт

{`:_"__~~e#QUINE"}_~

і

{`:_"__~~e#QUINE"}_~e#QUINE

обидва друку

{{``""__~~""++::__""ee##QQUUIINNEE""}}__~~e#QUINE

Спробуйте в Інтернеті: програма 1 , програма 2 , підтвердження валідності

Як вони працюють

{                }   e# Push a code block.
                  _~ e# Execute a copy.
 `                   e# Convert the code block into a string.
  :_                 e# Duplicate each character of the resulting string.
    "__~~e#QUINE"    e# Push this string.

Програма 1 закінчується тут і містить рядкове подання всього її вихідного коду (який кожен символ повторюється двічі), а також рядка e # QUINE на стеці.

Програма 2 додатково розбирає e#QUINE, що є коментарем.

В обох випадках CJam друкує два рядки автоматично, що призводить до вищезгаданого виводу.


4

Серйозно, 46 56 42 байти

QUNX;RZtdXεj.ƒ£REIQ

Шестнадцятковий дамп:

51554e583b525a746458ee6a2e7f9f9c524549510a

Друга програма - це точно перевернута програма. Він містить невидимий символ, але кількість байтів правильна. Обидві програми виводять цей паліндромний рядок:


QQUINEXR;£RƒZ⌂t.djXεεXjd.t⌂ZƒR£;RXENIUQQ

(Чомусь він показує невидимий символ, коли виводить його в мій термінал. Я не дуже розумію, що цей байт 7F.)

Як це працює:

Q                     Push the source to the stack
 U                    Nop
  NX                  Push and pop lyrics to 99 bottles of beer
    ;R                Make a copy of the source reversed.
      Z               Zip them together.
       t              Completely flatten the list.
        dX            Delete the trailing newline
          εj          Join it into a string.
            .         Print it with a trailing newline.
             ⌂        (This is that 7F byte that won't show up. It halts.)

Решта програми не виконується.

Тоді інший напрямок:

\n                   Nop
  Q                  Push the source code.
   IE                Nops
     R               Reverse source code to get source of first program
      £              Eval it into a function
       ƒ             Call it.

На даний момент ми запускаємо першу програму вище, тому виконання триває, як описано там.

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

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


@Денніс ти це протестував на комп’ютері? Це може бути артефактом мого власного середовища побудови.
Кінтопія

@Dennis nvm ти маєш рацію. Усі способи виходу серьезно додають лінійку передач. Я можу це виправити ціною 8 байт. Схоже, ваш метод буде коротшим (що сумно, оскільки цей метод крутіший IMO).
Кінтопія

1

GolfScript, 46 байт

{`{.}%"..~~QUINE"}.~

і

{`{.}%"..~~QUINE"}.~QUINE

обидва друку

{{``{{..}}%%""....~~~~QQUUIINNEE""}}..~~QUINE

Спробуйте в Інтернеті: програма 1 , програма 2 , підтвердження валідності

Як це працює

{`{.}%"..~~QUINE"}.~

{                }    # Push a code block.
                  .~  # Execute a copy.
 `                    # Convert the code block into a string.
  {.}%                # Duplicate each character of the resulting string.
      "..~~QUINE"     # Push that string.

Вихідний код програми 2 додатково розбирає QUINE\n, що є двома невизначеними лексемами.


1

Perl, 61 + 60 = 121 байт

Програма 1:

$x=q<print"\$x=q<$x>;eval\$x#"=~s/./$&$&/gr,QUINE>;eval$x#QIE

Програма 2:

$x=q<print"\$x=q<$x>;eval\$x#"=~s/./$&$&/gr,QUINE>;eval$x#UN

Я думав, що підкажу це не гольф-мовою. Це в основному просто універсальний конструктор quine в Perl, модифікований для подвоєння кожного символу перед його друком та додаванняQUINE до кінця. Тоді нам залишається лише вставити коментар в кінці коду, щоб компенсувати доданий текст.

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

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