특히 제 2 법칙 : 고립 된 시스템의 엔트로피는 시간이 지남에 따라 증가한다 .
이 도전에 대해
- " 분리 된 시스템 "은 프로그램 또는 기능 (이후부터 "프로그램"으로 약칭 됨)으로 간주됩니다.
- " 시간 " 의 전달은 새로운 프로그램으로 간주되는 프로그램 출력의 반복 된 실행에 해당합니다 .
- " 엔트로피 "는 섀넌의 1 차 엔트로피 (아래에 정의 됨)로 간주되며, 이는 문자열의 문자가 얼마나 다양한지를 측정합니다.
도전
프로그램은 동일한 언어로 프로그램으로 실행될 때 이전보다 더 엔트로피가있는 문자열을 생성하는 비어 있지 않은 문자열을 생성해야합니다. 이 실행-출력 프로세스를 무한 반복하면 엄격하게 증가하는 엔트로피 값 시퀀스를 생성해야 합니다 .
문자열은 모든 유니 코드 9.0 문자를 포함 할 수 있습니다 . 문자열 순서는 결정적이지 않아야합니다 (임의와 반대로).
주어진 문자열 의 엔트로피 는 다음과 같이 정의됩니다. 문자열에서 고유 문자와 발생 횟수를 식별하십시오. i 번째 고유 문자 의 빈도 p i 는 해당 문자의 발생 횟수를 문자열 길이로 나눈 값입니다. 그러면 엔트로피는
여기서 합계는 문자열의 모든 고유 문자 위에 있습니다. 기술적으로, 이것은 스트링에서 관찰 된 주파수에 의해 주어진 분포 를 갖는 이산 랜덤 변수 의 엔트로피에 대응한다 .
하자 H는 K 나타낸다하여에 의해 생성 된 문자열의 엔트로피 K 번째 프로그램, 그리고하자 H 0 나타낸다에게 초기 프로그램의 코드의 엔트로피를. 또한 L 0 은 초기 프로그램의 길이를 문자로 나타냅니다. 시퀀스 { H k }는 챌린지 요구 사항에 따라 모노톤이며, 기존 문자의 수가 유한하기 때문에 제한됩니다. 그러므로 한계 갖는다 H ∞를 .
점수 제출의은 (것이다 H ∞ - H 0 /) L 0 :
- 분자 H ∞ − H 0 는 코드가 무한한 시간 범위에 걸쳐 엔트로피를 증가시키는 법칙을 어느 정도까지 준수하는지 반영합니다.
- denonimator L 0 은 바이트 단위가 아닌 문자 단위의 초기 코드 길이입니다.
가장 높은 점수를받은 코드가 이깁니다 . 동점은 가장 빠른 제출 / 편집을 위해 해결됩니다.
문자열의 엔트로피를 계산하기 위해 자바 스크립트 스 니펫 ( @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입니다. 이건 H 야 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 ;
JavaScript 스 니펫에서 수정 한 @Dennis ;
스 니펫의 다른 수정을위한 @ETHproductions ;
엔트로피의 정의에 대한 정정을 위해 @PeterTaylor .