Dan khususnya hukum kedua : entropi sistem terisolasi meningkat seiring waktu .
Untuk tantangan ini,
- " Sistem terisolasi " akan dianggap sebagai program atau fungsi (disingkat "program" mulai sekarang);
- Berlalunya " waktu " akan sesuai dengan eksekusi yang berulang dari output program , dianggap sebagai program baru;
- " Entropi " akan dianggap sebagai entropi orde pertama Shannon (akan didefinisikan di bawah), yang merupakan ukuran seberapa beragam karakter string.
Tantangan
Program Anda harus menghasilkan string yang tidak kosong yang ketika dieksekusi sebagai program dalam bahasa yang sama menghasilkan string dengan lebih banyak entropi daripada yang sebelumnya. Mengulangi proses eksekusi-output yang tak terhingga ini harus menghasilkan urutan nilai entropi yang meningkat secara ketat .
String dapat berisi karakter Unicode 9.0 . Urutan string harus deterministik (sebagai lawan acak).
The entropi untuk string yang diberikan akan didefinisikan sebagai berikut. Identifikasi karakter uniknya dan jumlah kemunculannya dalam string. Frekuensi p i dari karakter unik ke- i adalah jumlah kemunculan karakter tersebut dibagi dengan panjang string. Entropi itu kemudian
di mana jumlahnya adalah seluruh karakter unik string. Secara teknis, ini sesuai dengan entropi dari variabel acak diskrit dengan distribusi yang diberikan oleh frekuensi yang diamati dalam string.
Mari H k menyatakan entropi dari string yang dihasilkan oleh k Program -th, dan biarkan H 0 menyatakan entropi dari kode program awal ini. Juga, biarkan L 0 menunjukkan panjang program awal dalam karakter. Urutan { H k } adalah monoton sesuai persyaratan tantangan, dan dibatasi (karena jumlah karakter yang ada terbatas). Karena itu ia memiliki batas, H ∞ .
The skor pengajuan akan menjadi ( H ∞ - H 0 ) / L 0 :
- Pembilangnya, H ∞ - H 0 , mencerminkan sejauh mana kode Anda "mematuhi" hukum peningkatan entropi selama rentang waktu tak terbatas.
- Denonimator, L 0 , adalah panjang kode awal dalam karakter (bukan dalam byte).
Kode dengan skor tertinggi menang . Ikatan akan diselesaikan untuk pengajuan / edit paling awal.
Untuk menghitung entropi string, Anda dapat menggunakan JavaScript potongan (courtesy of @flawr dan dengan koreksi oleh @Dennis dan @ETHproductions ) pada akhir posting ini.
Jika mendapatkan batas H ∞ sulit dalam kasus spesifik Anda, Anda dapat menggunakan batas bawah apa pun, misalnya H 20 , untuk menghitung skor (jadi Anda akan menggunakan ( H 20 - H 0 ) / L 0 ). Tetapi bagaimanapun juga, urutan entropi yang tak terbatas harus meningkat secara ketat.
Harap sertakan penjelasan atau bukti singkat bahwa urutan entropi meningkat, jika itu tidak terbukti.
Contoh
Dalam bahasa fiksi, pertimbangkan kode aabcab
, yang saat dijalankan menghasilkan string cdefgh
, yang saat dijalankan menghasilkan cdefghi
, yang ...
Karakter unik dari kode asli adalah a
, b
dan c
, dengan frekuensi masing-masing 3/6, 2/6 dan 1/6. Entropinya adalah 1,4591. Ini adalah H 0 .
String cdefgh
memiliki lebih banyak entropi daripada aabcab
. Kita dapat mengetahui ini tanpa menghitungnya karena untuk sejumlah karakter tertentu entropi dimaksimalkan ketika semua frekuensinya sama. Memang, entropi H 1 adalah 2,5850.
String cdefghi
lagi memiliki lebih banyak entropi daripada yang sebelumnya. Kita sekarang dapat tanpa menghitung karena menambahkan karakter yang tidak ada selalu meningkatkan entropi. Memang, H 2 adalah 2,8074.
Jika string berikutnya adalah 42
rantai akan menjadi tidak valid, karena H 3 akan menjadi 1, lebih kecil dari 2,8074.
Jika, di sisi lain, urutan melanjutkan menghasilkan string peningkatan entropi dengan batas H ∞ = 3, skornya adalah (3−1.4597) / 6 = 0.2567.
Ucapan Terima Kasih
Terimakasih untuk
@ xnor atas bantuannya memperbaiki tantangan, dan khususnya untuk meyakinkan saya bahwa rantai tak terbatas peningkatan entropi yang diperoleh dari eksekusi berulang memang mungkin;
@ flawr untuk beberapa saran, termasuk memodifikasi fungsi skor, dan untuk menulis cuplikan yang sangat berguna;
@Angs untuk menunjukkan kelemahan penting dalam definisi fungsi skor sebelumnya;
@Dennis untuk koreksi dalam cuplikan JavaScript;
@ETHproduk untuk koreksi lain dalam cuplikan;
@PeterTaylor untuk koreksi dalam definisi entropi.