Зробіть майже квинку


12

Я хотів обдурити товариша, давши йому королеву, яка ледь не спрацювала, але стала похилішою і хитрішою.

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

Ваш рахунок буде (length of your program) / floor(sqrt(number of times the program almost quines))(Де / 0нескінченність)

number of times the program almost quines- скільки разів запускається програма, змінюючи лише один символ у stdout. Ваша програма може не приймати дані. Він також може не друкувати програму, яку вже надрукував.

Ви також можете не додати символу, який ви раніше додавали, або видалити символ з того ж індексу. Наприклад, якщо ви додавали 1раніше, і ви 1знову додавали , тут number of times the program almost quinesзупиняються. Якщо ви видалите перший символ, ви можете більше не видалити перший символ. Якщо ви змінили третій символ на a 2, ви можете не додати 2або видалити третій символ.


Що це квітка?
грудня

@ Agawa001 Куайн це програма , яка сама гравюр.

Відповіді:


7

CJam, 0.000884

{_,6/[{64md}6*](124+\+'�f++`"1$~"}""1$~

Тут позначає недрукований символ з кодовою точкою 128. Спробуйте в Інтернеті.

Ідея

Цей підхід додає всі символи UCS (оригінальна специфікація) з кодовими точками між U + 4000000 та U + 7FFFFFFF до спочатку порожнього рядка, який слідує за кодовим блоком.

Ми вибираємо UTF-8 , який кодує кожного з цих символів, використовуючи рядок 6 байт:

1111110u₂     10vvvvvv₂     10wwwwww₂     10xxxxxx₂     10yyyyyy₂     10zzzzzz₂

252 + u       128 + vvvvvv  128 + wwwwww  128 + xxxxxx  128 + yyyyyy  128 + zzzzzz

Таким чином, ми можемо кодувати n-й символ у цьому діапазоні, обчисливши його 6 найменш значущих цифр у базі 64 та додавши 252 до найбільш значущих та 128 до інших.

Оцінка балів

Є 2 ** 31 = 2,147,483,6486 байт UTF-8 символів, а довжина оригінального коду - 39, тому оцінка є 39 / floor(2 ** 15.5) = 39 / 46340 = 0.0008416055243849806.

Як це працює

{                                }""    e# Push the code block and an empty string.
                                    1$~ e# Execute a copy of the code block.
 _,                                     e# Push the length of the string.
   6/                                   e# Divide by 6 to get the number of chars.
      {64md}6*                          e# Perform modular division six times.
     [        ]                         e# Collect the results in an array.
               (124+\+                  e# Add 124 to the first element.
                      '�f+              e# Add 128 to all and cast each to Char.
                          +             e# Concatenate the strings.
                           `            e# Push a string representation.
                            "1$~"       e# Push '1$~' to complete the quine.

Я приймаю це через ваш перший (нижчий) бал. Я дозволю це.

6

CJam, 46 байт, 65504 додати, 65505 del, оцінка 0.127424

{`-2<_0c#)!{'#/~(_)\+\+S+]'#*}*W<"
}_~"e# 
}_~

Тестуйте це тут.

Основна форма - це стандартна узагальнена квітка CJam. Для "майже quine" є коментар e#в кінці блоку quine, куди я можу вільно додавати символи, не впливаючи на код. Зауважте, що коментар спочатку містить єдиний пробіл.

Програма продовжує додавати символи на передню частину коментаря, починаючи з, !а потім переходячи до значення ASCII. Коди символів CJam загортаються після 2 16, тож у якийсь момент це додасть нульовий байт. Як тільки це станеться, програма починає видаляти байти з кінця коментаря (таким чином, щоб позиція видаленого символу завжди була різною), поки коментар не буде порожнім.


5

CJam, 19 байт, 65536 додати, 0 del, оцінка 0,074219

"a"{\)_)++`\"_~"}_~

Простіше, краще.

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