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


22

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

Правила та підрахунок балів

Ваш остаточний рахунок <number of unique bytes in B> / <number of bytes in A>. Найвищий результат виграє. Слід зазначити, що теоретичний максимальний бал - 256.

  • Програма A повинна мати принаймні один байт
  • Програма B не може повністю складатися з відключень, тобто принаймні один символ повинен певним чином впливати на вихід.
  • До обох програм застосовуються стандартні правила лайків . Зокрема, помилки не допускаються в жодному випадку.

Для послідовності формату відповідей почніть свою відповідь приблизно так:

# <Language for A> & <Language for B>, Score: <B score> / <A score> = <combined score>

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

Під унікальними байтами ви маєте на увазі спільні байти чи схожість між ними?
KrystosTheOverlord

@KrystosTheOverlord, це було б просто в програмі B, не має відношення до програми А. Наприклад, aaaaaмає один унікальний байт і abcdeмає 5 унікальних байтів.
Beefster

1
Я просто чекаю програм, де програма А перебуває в одинаковому або тривалий час
Втілення

4
@EmbodimentofIgnorance Program A оцінюється за кількістю байтів, а не унікальних байтів. Lenguage / Unary забив би жахливо
Jo King

Відповіді:


14

Japt & Japt , Оцінка: 255/38 = 6,71

Програма A :

"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 quine, здатній до корисної навантаження . Рядок на початку містить дублікат решти програми, iQ ²вставляє цитату та дублікати для створення рядкового представлення всієї програми, а потім ¯23обрізає себе та все після неї. Отриманий рядок - це програма, яка виводить програму A :

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

Я буду називати цей рядок як U.

Останній рядок A дублює Uкупу разів із невеликою зміною щоразу. Зокрема, для кожного числа Xв діапазоні [1...3]він виводить, "#c" + Uде cє символ з charcode 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, не впливає на вихід. Єдина частина спрощеного B, яка впливає на вихід, така:

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

Що ідентично тому, Uщо ми вже знаємо результати спрощеного А.

Єдина відмінність між спрощеним A і програмою A полягає в тому, що замість створення копій для діапазону [1...3]реальна програма створює копії для діапазону [1...256]. Це призводить до 256 версій, #cкожна з яких має різний характер, хоча остання версія "Ā" є багатобайтовим символом, тому вона не додає жодних унікальних байтів, але все, крім останнього U, все ще ігнорується.


Дуже приємно :) Буде це робота для 38 байт?
Кудлатий

@Shaggy 27Необхідно налаштовувати кожен раз, коли байти зберігаються, але крім того, схоже, це працює.
Каміль Дракарі

1
@Shaggy Оцінка базується на кількості унікальних байтів у B, і є лише 256 можливих байтів. Наскільки мені відомо, навіть нова версія B не містить нульового байта.
Каміль Дракарі

Спробував кілька речей, щоб змусити його працювати з нульовим байтом, до речі, але все не вдалося.
Кудлатий

5

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

"44XFL|r2ssl3%Q4s]|H

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

Програма B, Gol> <>

"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ǝ) виводиться неявно.

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