Мета-боулинг Гольф

22

Ваша задача - создать самую короткую программу (A), которая выводит другую программу (B) с самыми уникальными байтами, которая, в свою очередь, выводит исходную программу (A). По сути, вы играете в гольф одну половину пары программ Уроборос (также называемых периодическими итерациями) и играете в другую половину. А и В могут быть на разных языках.

Правила и оценки

Ваш окончательный счет <number of unique bytes in B> / <number of bytes in A>. Самый высокий балл выигрывает. Следует отметить, что теоретический максимальный балл составляет 256.

  • Программа A должна быть длиной не менее одного байта
  • Программа B не может состоять полностью из no-ops, то есть как минимум один символ должен каким-то образом влиять на вывод.
  • Стандартные правила Quines применяются к обеим программам. Примечательно, что ошибки квин не допускаются ни в одном случае.

Для согласованности формата ответа начните свой ответ примерно так:

# <Language for A> & <Language for B>, Score: <B score> / <A score> = <combined score>
Beefster
источник
Чтобы это стало понятно, я думаю, вам нужно немного уточнить второй пункт. Что значит для персонажа быть неактивным?
Пшеничный волшебник
Под уникальными байтами вы подразумеваете общие байты или сходство между ними?
KrystosTheOverlord
@KrystosTheOverlord, это будет просто в программе B, без отношения к программе A. Например, aaaaaимеет один уникальный байт и abcdeимеет 5 уникальных байтов.
Beefster
1
Я просто жду программ, где программа А находится в унарном или языковом формате
Воплощение неведения
4
@EmbodimentofIgnorance Программа A оценивается с точки зрения количества байтов, а не уникальных байтов. Lenguage / Unary забил бы ужасно
Джо Кинг

Ответы:

14

Japt & Japt , оценка: 255/38 = 6,71

Программа А :

"iQ ²¯24
G²õ@i'#+Xd"iQ ²¯24
G²õ@i'#+Xd

Программа B имеет длину более 8 КБ, такую ​​длинную, что разрывается ссылка, поэтому я не буду вставлять все это. Вот пример:

#þ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#ÿ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#Ā"iQ ²¯24
G²õ@i'#+Xd"iQ ²

Я не смог найти способ заставить NULработать байт, поэтому в программе B всего 255 уникальных символов. Программа B, по существу, состоит из 255 копий одной программы, где каждый раз изменяется один нерелевантный байт, а первые 254 выполнения игнорируются.

Для пояснения я начну с этой упрощенной версии A, чтобы результирующий B был легче обсуждать.

"iQ ²¯23
3õ@i'#+Xd"iQ ²¯23
3õ@i'#+Xd

Эта программа основана на базовых способностях Japt с поддержкой полезной нагрузки . Строка в начале содержит дубликат остальной части программы, iQ ²вставляет кавычки и дубликаты, чтобы создать строковое представление всей программы, а затем ¯23обрезает себя и все после нее. Результирующая строка является программой, которая выводит Программу A :

"iQ ²¯23
3õ@i'#+Xd"iQ ²

Я буду ссылаться на эту строку как U.

Последняя строка A дублирует Uмножество раз с небольшими изменениями каждый раз. В частности, для каждого числа Xв диапазоне [1...3]он выводит "#c" + Uгде cсимвол с кодом X. Поведение Japt по умолчанию состоит в том, чтобы выводить эти строки без кавычек и разделять их запятыми, поэтому это вывод нашего упрощенного A (обратите внимание, что между каждым #и "iQ: есть непечатаемый байт :

#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²

Мы будем называть этот УСНО B .

Упрощенный B имеет простую структуру, чередуя между #cи U. К счастью для этого ответа, каждый #cи Uрассматривается как разделенный запятой, и в этой ситуации поведение всего этого, кроме самого последнего U, не влияет на вывод. Единственная часть Simplified B, которая влияет на вывод, это:

"iQ ²¯23
3õ@i'#+Xd"iQ ²

Что идентично тому, Uчто мы уже знаем, выходы упрощены А.

Единственное отличие между Упрощенной A и Программой A состоит в том, что вместо генерации копий для диапазона [1...3]настоящая программа генерирует копии для диапазона [1...256]. Это приводит к 256 версиям, #cкаждая из которых имеет свой символ, хотя последняя версия «is» является многобайтовым символом, поэтому она не добавляет уникальных байтов, но все, кроме последнего, Uпо-прежнему игнорируется.

Камил Дракари
источник
Очень хорошо :) Будет ли это работать для 38 байтов?
лохматый
@Shaggy Необходимо настроить 27каждый раз, когда сохраняются байты, но в остальном кажется, что это работает.
Камил Дракари
1
@Shaggy Оценка основана на количестве уникальных байтов в B, и есть только 256 возможных байтов. Насколько я знаю, даже новая версия B не содержит нулевого байта.
Камил Дракари
Кстати, несколько попыток заставить его работать с нулевым байтом, но все не удалось.
лохматый
5

Программа A, Gol> <> , 256/20 байт = 12,8

"44XFL|r2ssl3%Q4s]|H

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

Программа Б, Гол> <>

"44XFL|r2ssl3%Q4s]|H	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ

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

Программа чередуется между выводом самого себя, за которым следует каждый байт, и просто выводом самого себя.

Объяснение:

"            Wrapping string literal pushes the first line to the stack backwards
 44X         Push 256
    FL|      Push the range from 0 to 255
       r                  Reverse the stack
        2ss               Push a quote
           l3%            If the stack length is divisible by 3
              Q4s]|       Only take the top 20 characters
                   H      And output the stack
Джо Кинг
источник
1

Программа A: 05AB1E , оценка: 256/41, 256/31 байт = 8,258 ...

0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ

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

Программа B: 05AB1E

0"D34çý₅Ýç'q†22ǝ"D34çýq 

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoprstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿÝç'q†22ǝ

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

Объяснение:

Кратчайшее для 05AB1E это один: 0"D34çý"D34çý( 14 байт ) обеспечивается @OliverNi . В моем ответе используется модифицированная версия этого квинета, добавленная ₅Ýç'q†vy27ǝD}J.

0            # Push a 0 to the stack
             #  STACK: [0]
 "D34çý₅Ýç'q†vDy27ǝ}J"
             # Push the string "D34çý₅Ýç'q†vDy27ǝ}J" to the stack
             #  STACK: [0,"D34çý₅Ýç'q†vDy27ǝ}J"]
  D          # Duplicate the string
             #  STACK: [0,"D34çý₅Ýç'q†vDy27ǝ}J","D34çý₅Ýç'q†vDy27ǝ}J"]
   34çý      # Join the stack by '"'
             #  STACK: ['0"D34çý₅Ýç'q†vDy27ǝ}J"D34çý₅Ýç'q†vy27ǝD}J']
₅Ý           # Push a list in the range [0,255]
  ç          # Convert each integer to an ASCII character
   'q†      '# Filter the "q" to the front
      22ǝ    # Insert it at index 22 in the string (replacing the second '₅')
             # (and output the result implicitly)

Программа B завершится, как только она достигнет q, поэтому фактическая программа B:

0"D34çý₅Ýç'q†22ǝ"D34çýq

Все после этого игнорируется, и вершина стека ( 0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ) выводится неявно.

Кевин Круйссен
источник