Сделать почти quine


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или удалить третий символ.


что за квин?
Abr001am

@ 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 дел, оценка 0.127424

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

Проверьте это здесь.

Основной формой является стандартная обобщенная формула CJam. Чтобы «почти quine», есть комментарий e#в конце блока quine, где я могу свободно добавлять символы, не влияя на код. Обратите внимание, что комментарий изначально содержит один пробел.

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


5

CJam, 19 байт, 65536 добавление, 0 дел, оценка 0.074219

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

Проще лучше.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.