Ваша задача - создать самую короткую программу (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>
code-golf
code-challenge
quine
code-bowling
Beefster
источник
источник
aaaaa
имеет один уникальный байт иabcde
имеет 5 уникальных байтов.Ответы:
Japt & Japt , оценка: 255/38 = 6,71
Программа А :
Программа B имеет длину более 8 КБ, такую длинную, что разрывается ссылка, поэтому я не буду вставлять все это. Вот пример:
Я не смог найти способ заставить
NUL
работать байт, поэтому в программе B всего 255 уникальных символов. Программа B, по существу, состоит из 255 копий одной программы, где каждый раз изменяется один нерелевантный байт, а первые 254 выполнения игнорируются.Для пояснения я начну с этой упрощенной версии A, чтобы результирующий B был легче обсуждать.
Эта программа основана на базовых способностях Japt с поддержкой полезной нагрузки . Строка в начале содержит дубликат остальной части программы,
iQ ²
вставляет кавычки и дубликаты, чтобы создать строковое представление всей программы, а затем¯23
обрезает себя и все после нее. Результирующая строка является программой, которая выводит Программу A :Я буду ссылаться на эту строку как
U
.Последняя строка A дублирует
U
множество раз с небольшими изменениями каждый раз. В частности, для каждого числаX
в диапазоне[1...3]
он выводит"#c" + U
гдеc
символ с кодомX
. Поведение Japt по умолчанию состоит в том, чтобы выводить эти строки без кавычек и разделять их запятыми, поэтому это вывод нашего упрощенного A (обратите внимание, что между каждым#
и"iQ
: есть непечатаемый байт :Мы будем называть этот УСНО B .
Упрощенный B имеет простую структуру, чередуя между
#c
иU
. К счастью для этого ответа, каждый#c
иU
рассматривается как разделенный запятой, и в этой ситуации поведение всего этого, кроме самого последнегоU
, не влияет на вывод. Единственная часть Simplified B, которая влияет на вывод, это:Что идентично тому,
U
что мы уже знаем, выходы упрощены А.Единственное отличие между Упрощенной A и Программой A состоит в том, что вместо генерации копий для диапазона
[1...3]
настоящая программа генерирует копии для диапазона[1...256]
. Это приводит к 256 версиям,#c
каждая из которых имеет свой символ, хотя последняя версия «is» является многобайтовым символом, поэтому она не добавляет уникальных байтов, но все, кроме последнего,U
по-прежнему игнорируется.источник
27
каждый раз, когда сохраняются байты, но в остальном кажется, что это работает.Программа A, Gol> <> , 256/20 байт = 12,8
Попробуйте онлайн!
Программа Б, Гол> <>
Попробуйте онлайн!
Программа чередуется между выводом самого себя, за которым следует каждый байт, и просто выводом самого себя.
Объяснение:
источник
Программа A: 05AB1E , оценка:
256/41,256/31 байт = 8,258 ...Попробуйте онлайн.
Программа B: 05AB1E
Попробуйте онлайн.
Объяснение:
Кратчайшее Куайн для 05AB1E это один:
0"D34çý"D34çý
( 14 байт ) обеспечивается @OliverNi . В моем ответе используется модифицированная версия этого квинета, добавленная₅Ýç'q†vy27ǝD}J
.Программа B завершится, как только она достигнет
q
, поэтому фактическая программа B:Все после этого игнорируется, и вершина стека (
0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ
) выводится неявно.источник