Trên trang web này, chúng tôi tuân thủ các quy luật nhiệt động lực học!


23

Và đặc biệt là định luật thứ hai : entropy của một hệ cô lập tăng theo thời gian .

Đối với thử thách này,

  • Một " hệ thống biệt lập " sẽ được coi là một chương trình hoặc chức năng (viết tắt là "chương trình" từ bây giờ);
  • Thời gian trôi qua " thời gian " sẽ tương ứng với các lần thực hiện lặp lại của đầu ra của chương trình , được coi là một chương trình mới;
  • " Entropy " sẽ được coi là entropy bậc nhất của Shannon (sẽ được xác định bên dưới), đây là thước đo mức độ đa dạng của các ký tự của chuỗi.

Các thách thức

Chương trình của bạn sẽ tạo ra một chuỗi không trống mà khi được thực thi như một chương trình trong cùng ngôn ngữ sẽ tạo ra một chuỗi có nhiều entropy hơn chuỗi trước đó. Lặp đi lặp lại quá trình thực thi đầu ra này phải tạo ra một chuỗi các giá trị entropy tăng nghiêm ngặt .

Các chuỗi có thể chứa bất kỳ ký tự Unicode 9.0 . Chuỗi các chuỗi phải có tính xác định (trái ngược với ngẫu nhiên).

Các entropy cho một chuỗi nhất định sẽ được quy định như sau. Xác định các ký tự duy nhất của nó và số lần xuất hiện của chúng trong chuỗi. Tần số p i của ký tự duy nhất thứ i là số lần xuất hiện của ký tự đó chia cho chiều dài của chuỗi. Các entropy là sau đó

nhập mô tả hình ảnh ở đây

trong đó tổng là trên tất cả các ký tự duy nhất của chuỗi. Về mặt kỹ thuật, điều này tương ứng với entropy của một biến ngẫu nhiên rời rạc với phân phối được cho bởi các tần số quan sát được trong chuỗi.

Gọi H k là entropy của chuỗi được tạo bởi chương trình thứ k và để H 0 biểu thị entropy của mã chương trình ban đầu. Ngoài ra, hãy để L 0 biểu thị độ dài của chương trình ban đầu bằng ký tự. Chuỗi { H k } là đơn điệu theo yêu cầu thách thức và bị giới hạn (vì số lượng ký tự hiện có là hữu hạn). Do đó nó có một giới hạn, H .

Các điểm của một trình sẽ được ( H - H 0 ) / L 0 :

  • Tử số, H - H 0 , phản ánh mức độ mà mã của bạn "tuân theo" quy luật tăng entropy trong một khoảng thời gian vô hạn.
  • Bộ khử nhiễu, L 0 , là độ dài của mã ban đầu tính bằng ký tự (không tính bằng byte).

Mã có số điểm cao nhất sẽ thắng . Các mối quan hệ sẽ được giải quyết theo hướng gửi / chỉnh sửa sớm nhất.

Để tính toán entropy của một chuỗi, bạn có thể sử dụng các đoạn mã JavaScript (biếu không của @flawr và với sự điều chỉnh bởi @Dennis@ETHproductions ) ở phần cuối của bài này.

Nếu lấy giới hạn H là khó khăn trong trường hợp cụ thể của bạn, bạn có thể sử dụng bất kỳ giới hạn thấp hơn, nói H 20 , để tính toán cân bằng tỷ số (do đó bạn sẽ sử dụng ( H 20 - H 0 ) / L 0 ). Nhưng trong mọi trường hợp, chuỗi entropies vô hạn phải được tăng nghiêm ngặt.

Vui lòng bao gồm một lời giải thích hoặc bằng chứng ngắn gọn rằng chuỗi các entropies đang tăng lên, nếu điều đó không rõ ràng.

Thí dụ

Trong một ngôn ngữ hư cấu, hãy xem xét mã aabcab, khi chạy sẽ tạo ra chuỗi cdefgh, khi chạy sẽ tạo ra cdefghi...

Các ký tự duy nhất của mã gốc là a, bc, với tần số tương ứng 3/6, 2/6 và 1/6. Entropy của nó là 1.4591. Đây là H 0 .

Chuỗi cdefghcó nhiều entropy hơn aabcab. Chúng ta có thể biết điều này mà không cần tính toán nó bởi vì với một số ký tự nhất định, entropy được tối đa hóa khi tất cả các tần số đều bằng nhau. Thật vậy, entropy H 1 là 2.5850.

Chuỗi cdefghimột lần nữa có nhiều entropy hơn so với trước đó. Bây giờ chúng ta có thể không cần tính toán vì thêm một ký tự không tồn tại luôn làm tăng entropy. Thật vậy, H 2 là 2.8074.

Nếu chuỗi tiếp theo là 42chuỗi sẽ không hợp lệ, vì H 3 sẽ là 1, nhỏ hơn 2.8074.

Nếu, mặt khác, trình tự tiếp tục sản xuất chuỗi tăng entropy với giới hạn H = 3, điểm số sẽ là (3-1.4597) / 6 = 0,2567.

Lời cảm ơn

Nhờ vào

  • @xnor vì sự giúp đỡ của anh ấy để cải thiện thử thách, và đặc biệt là đã thuyết phục tôi rằng chuỗi vô hạn của entropy tăng thu được từ việc thực hiện lặp đi lặp lại là thực sự có thể;

  • @flawr cho một số đề xuất, bao gồm sửa đổi chức năng điểm số và để viết đoạn trích rất hữu ích;

  • @Angs để chỉ ra một nhược điểm thiết yếu trong định nghĩa trước về chức năng điểm số;

  • @Dennis để sửa lỗi trong đoạn mã JavaScript;

  • @ETHproductions cho một sự điều chỉnh khác trong đoạn trích;

  • @PeterTaylor cho một sự điều chỉnh trong định nghĩa của entropy.

Đoạn trích để tính toán entropy


4
“Trên trang web này, chúng tôi tuân theo pháp luật của nhiệt động lực học!” [Trích dẫn cần thiết]
TuxCrafting

2
Đây là nguồn :-)
Luis Mendo

1
Tôi đã hy vọng câu hỏi sẽ là về các câu hỏi mạng "nóng".
mbomb007

1
Tôi đã tự hỏi ... thực sự có thể tăng vô hạn entropy không? Nếu tôi lấy đầu ra ở dạng nhị phân không dấu, về cơ bản đó là một chuỗi các số nguyên trong phạm vi [0,255]. Nếu entropy là tối ưu khi tất cả các ký tự khác nhau (chỉ là giả định), thì nó có nghĩa là chuỗi có entropy lớn nhất dài 256 byte không? Nó là xa vô tận. Hoặc giả định của tôi là sai.
Osable

2
@Osable Đính kèm một bản sao của chuỗi đó vào chính nó và entropy sẽ giống nhau. Sau đó loại bỏ một char và nó sẽ nhỏ hơn một chút. Đảo ngược quá trình và bạn đã tăng entropy. Nếu bạn quản lý để không bao giờ đạt được mức entropy tối đa, bạn có thể tiếp tục tăng mãi mãi
Luis Mendo

Câu trả lời:


4

Thạch, 0,68220949

“ȷ6ȷ5rỌ,®Ṿ€ṁṾY⁾©v⁸⁵”©v⁵

H 90 = 19,779597644909596802, H 0 = 4.088779347361360882, L 0 = 23

Tôi đã sử dụng gấp đôi dài để tính H 90 . Phao chính xác kép báo cáo không chính xác rằng H 47 <H 46

Chương trình đầu tiên in

“…”
“ȷ6ȷ5rỌ,®Ṿ€ṁṾY⁾©v⁸⁵”©v1010

nơi đóng vai trò như một giữ chỗ cho tất cả các ký tự Unicode với các điểm mã giữa 100.0001.000.000 . Độ dài thực tế là 900.031 ký tự.

Chương trình giây in

“…”
“ȷ6ȷ5rỌ,®Ṿ€ṁṾY⁾©v⁸⁵”
“…”
“ȷ6ȷ5rỌ,®Ṿ€ṁṾY⁾©v⁸⁵”©v101010

trong đó, lần lượt, in

“…”
“ȷ6ȷ5rỌ,®Ṿ€ṁṾY⁾©v⁸⁵”
“…”
“ȷ6ȷ5rỌ,®Ṿ€ṁṾY⁾©v⁸⁵”
“…”
“ȷ6ȷ5rỌ,®Ṿ€ṁṾY⁾©v⁸⁵”©v10101010

v.v.

Không có chương trình nào trong số này hoạt động trong trình thông dịch trực tuyến, có giới hạn đầu ra 100 KB . Tuy nhiên, nếu chúng tôi sửa đổi chương trình để in 0123456789thay vì 900.000 ký tự Unicode đã nói ở trên , bạn có thể dùng thử trực tuyến!


5

MATLAB, 9,6923e-005 0,005950967872272

H0 =  2.7243140535197345, Hinf = 4.670280547752703, L0 = 327

Phiên bản mới này là phiên bản cải tiến của "bằng chứng khái niệm" đầu tiên. Trong phiên bản này, tôi nhận được một số điểm tuyệt vời từ lần lặp đầu tiên. Điều này đạt được bằng cách "thổi bùng" đầu ra của chương trình đầu tiên, được nhân rộng bởi tất cả các chương trình tiếp theo. Sau đó, tôi cũng đã cố gắng tìm ra mức tối thiểu H0bằng cách thêm vào biểu tượng phổ biến nhất của mã càng nhiều lần càng tốt. (Điều này rõ ràng có một giới hạn, vì nó không chỉ giảm H0mà còn tăngL0 cùng một lúc. Bạn có thể thấy sự phát triển của điểm số được vẽ theo kích thước của chương trình nơi kích thước được thay đổi chỉ bằng cách thêm hoặc xóa 1.) Lặp lại vẫn tương đương với phiên bản trước dưới đây.

a=['ns}z2e1e1116k5;6111gE16:61kGe1116k6111gE16:6ek7;:61gg3E1g6:6ek7;:61gg3E1'];11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;;disp(['[''',a+1,'''];',0,'a=[''',a,'''];',0,[a-10,']]);'],0,[a-10,']]);']]);

Điểm so với thời lượng chương trình

Phiên bản trước:

H0 = 4.22764479010266, Hinf = 4.243346286312808, L0 = 162

Các mã sau đây được lấy cảm hứng từ quine matlab . Về cơ bản, nó chỉ xuất ra hai lần nữa . Manh mối là cho bất kỳ lần lặp nào, chúng ta đều có ncác dòng mã và n-1ký hiệu dòng mới \n. Vì vậy, khi ntiếp cận đến vô cùng, tỷ lệ dòng mã so với dòng mới tiếp cận 1, đồng thời điều này đảm bảo rằng chúng ta có sự tăng trưởng đơn điệu nghiêm ngặt trong entropy. Điều đó cũng có nghĩa là chúng ta có thể dễ dàng tính toán Hinfbằng cách chỉ xem xét mã thế hệ thứ 0 với nhiều dòng mới như các dòng mã. (Cái nào có thể xác nhận bằng thực nghiệm, vì nó hội tụ khá nhanh.)

a=['ns}z2e1kGe1116k6111gE16;:61kGe1116k6111gE16;:6ek7;:61gg3E1g6;:6ek7;:61gg3E1'];
disp(['a=[''',a,'''];',10,'a=[''',a,'''];',10,[a-10,']]);'],10,[a-10,']]);']]);

Rất đẹp! Bạn sẽ đạt được một cái gì đó thay thế 10bằng 0(và điều chỉnh phần còn lại của mã cho điều đó)? Char 0được hiển thị dưới dạng không gian bởi Matlab
Luis Mendo

Cám ơn vì sự gợi ý! Hãy để tôi thử, nhưng tôi nghĩ rằng có một số cải tiến khác sẽ tăng điểm nhiều hơn nữa. Điều này trước hết nên là một bằng chứng về khái niệm :)
flawr

Bây giờ tôi đã bao gồm đề xuất của bạn cùng với một loạt các cải tiến khác.
flawr

Tôi thích biểu đồ tối ưu hóa đó :-)
Luis Mendo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.