Я хотел одурачить друга, подарив ему муку, которая почти сработала, но стала небрежной и небрежной.
Создайте программу, которая при запуске будет выводить программу, но с одним символом. Любой символ может быть добавлен, удален или оба (один символ изменяется). Но только один персонаж.
Ваша оценка будет (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
или удалить третий символ.
Ответы:
CJam, 0,000884
Здесь обозначает непечатаемый символ с кодовой точкой 128. Попробуйте онлайн.
идея
Этот подход добавляет все символы UCS (оригинальная спецификация) с кодовыми точками между U + 4000000 и U + 7FFFFFFF к первоначально пустой строке, которая следует за блоком кода.
Мы выбираем UTF-8 , который кодирует каждый из этих символов, используя 6-байтовую строку следующим образом:
Таким образом, мы можем кодировать n-й символ в этом диапазоне, вычисляя его 6 младших значащих цифр в базе 64 и добавляя 252 к наиболее значимым и 128 к оставшимся.
счет
Имеется
2 ** 31 = 2,147,483,648
6 байтовых символов UTF-8, а длина исходного кода составляет 39, поэтому оценка равна39 / floor(2 ** 15.5) = 39 / 46340 = 0.0008416055243849806
.Как это устроено
источник
CJam, 46 байтов, 65504 сложения, 65505 дел, оценка 0.127424
Проверьте это здесь.
Основной формой является стандартная обобщенная формула CJam. Чтобы «почти quine», есть комментарий
e#
в конце блока quine, где я могу свободно добавлять символы, не влияя на код. Обратите внимание, что комментарий изначально содержит один пробел.Программа продолжает добавлять символы в передней части комментария, начиная с ,
!
а затем собирается в порядке значения ASCII. Коды символов CJam переносятся после 2 16, поэтому в какой-то момент это добавит нулевой байт. Как только это происходит, программа начинает удалять байты в конце комментария (так, чтобы позиция удаленного символа всегда отличалась), пока комментарий не будет пустым.источник
CJam, 19 байт, 65536 добавление, 0 дел, оценка 0.074219
Проще лучше.
источник