И, в частности, второй закон : энтропия изолированной системы увеличивается со временем .
Для этого вызова,
- « Изолированная система » будет считаться программой или функцией (далее сокращенно «программа»);
- Прохождение « времени » будет соответствовать повторному выполнению вывода программы , рассматриваемой как новая программа;
- « Энтропия » будет принята как энтропия Шеннона первого порядка (будет определено ниже), которая является мерой того, насколько разнообразны символы строки.
Соревнование
Ваша программа должна генерировать непустую строку, которая при выполнении в качестве программы на том же языке производит строку с большей энтропией, чем предыдущая. Бесконечная итерация этого процесса выполнения-вывода должна приводить к строго возрастающей последовательности значений энтропии .
Строки могут содержать любые символы Unicode 9.0 . Последовательность строк должна быть детерминированной (в отличие от случайной).
Энтропии для данной строки будет определяться следующим образом . Определите его уникальные символы и их количество вхождений в строке. Частота р я из я -й уникального характера является числом вхождений этого символа , деленного на длине строки. Энтропия тогда
где сумма по всем уникальным символам строки. Технически это соответствует энтропии дискретной случайной величины с распределением, определяемым частотами, наблюдаемыми в струне.
Пусть H k обозначает энтропию строки, созданной k-й программой, а H 0 обозначает энтропию исходного кода программы. Также пусть L 0 обозначает длину исходной программы в символах. Последовательность { H k } является монотонной в соответствии с требованиями вызова и ограничена (поскольку число существующих символов конечно). Следовательно, оно имеет предел, H ∞ .
Оценка из представления будет ( Н ∞ - Н 0 ) / L 0 :
- Числитель H ∞ - H 0 отражает, насколько ваш код «подчиняется» закону увеличения энтропии в течение бесконечного промежутка времени.
- Знаменатель L 0 - это длина исходного кода в символах (не в байтах).
Код с наибольшим количеством очков выигрывает . Связи будут решены в пользу самой ранней подачи / редактирования.
Чтобы вычислить энтропию строки, вы можете использовать фрагмент JavaScript (предоставлен @flawr и с исправлениями @Dennis и @ETHproductions ) в конце этого поста.
Если получение предела H ∞ затруднительно в вашем конкретном случае, вы можете использовать любую нижнюю границу, скажем, H 20 , для вычисления балла (поэтому вы должны использовать ( H 20 - H 0 ) / L 0 ). Но в любом случае бесконечная последовательность энтропий должна строго возрастать.
Пожалуйста, включите объяснение или краткое доказательство того, что последовательность энтропий увеличивается, если это не очевидно.
пример
На вымышленном языке рассмотрим код aabcab, который при запуске выдает строку cdefgh, которая при запуске выдает cdefghi, которая ...
Уникальные символы исходного кода являются a, bи c, с соответствующими частотами 3/6, 2/6 и 1/6. Его энтропия - 1.4591. Это Н 0 .
Строка cdefghимеет больше энтропии, чем aabcab. Мы можем знать это, не вычисляя это, потому что для данного числа символов энтропия максимизируется, когда все частоты равны. Действительно, энтропия H 1 составляет 2,5850.
Строка cdefghiснова имеет больше энтропии, чем предыдущая. Теперь мы можем без вычислений, потому что добавление несуществующего символа всегда увеличивает энтропию. Действительно, H 2 составляет 2,8074.
Если бы следующая строка была 42цепочкой, она была бы недействительной, потому что H 3 был бы 1, меньше, чем 2.8074.
Если, с другой стороны, последовательность продолжит создавать строки с возрастающей энтропией с пределом H ∞ = 3, оценка будет (3−1,4597) / 6 = 0,2567.
Подтверждения
Благодаря
@xnor за его помощь в улучшении задачи и, в частности, за то, что я убедил меня, что бесконечные цепочки возрастающей энтропии, полученные в результате повторного выполнения, действительно возможны;
@flawr для нескольких предложений, включая изменение функции счета, и для написания очень полезного фрагмента;
@Angs за указание на существенный недостаток в предыдущем определении функции счета;
@Dennis для исправления во фрагменте JavaScript;
@ETHproductions для другого исправления во фрагменте;
@PeterTaylor за исправление в определении энтропии.

