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


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.