Ve özellikle de ikinci kanun : yalıtılmış bir sistemin entropisi zamanla artar .
Bu meydan okuma için
- " İzole edilmiş bir sistem " bir program veya işlev olarak alınacaktır (bundan böyle "program" olarak kısaltılır);
- " Zaman " ın geçilmesi , program çıktısının yeni bir program olarak kabul edilen yinelenen uygulamalarına karşılık gelir ;
- " Entropy ", Shannon'un birinci sıradaki entropisi olarak alınacaktır (aşağıda tanımlanacaktır);
Meydan okuma
Programınız, aynı dilde bir program olarak yürütüldüğünde öncekinden daha entropi içeren bir dize üreten boş olmayan bir dize üretmelidir. Bu yinelemeli yineleme, çıkış işlemi kesinlikle artan bir entropi değerleri dizisi üretmelidir .
Dizeler, herhangi bir Unicode 9.0 karakteri içerebilir . Dizelerin sırası deterministik olmalıdır (rastgele yerine).
Entropi aşağıdaki gibi belirli bir dizeye ilişkin belirlenecektir. Dizedeki benzersiz karakterleri ve bunların sayısını tanımlayın. Frekans s ı arasında i -inci kendine has bir özelliğidir, dizinin uzunluğu ile bölünmesi bu karakterin yineleme sayısıdır. Entropi o zaman
Toplam, dizenin tüm benzersiz karakterlerinin üzerindedir. Teknik olarak, bu , dizede gözlenen frekanslar tarafından verilen dağılımla birlikte , ayrı bir rasgele değişkenin entropisine karşılık gelir .
Let H k göstermektedirler tarafından üretilen dize entropi k -inci programı ve izin H 0 belirtmek başlangıçtaki programın kodunun entropisinin. Ayrıca, L 0 ' ın ilk programın uzunluğunu karakter cinsinden göstermesine izin verin . { H k } dizisi , zorluk şartlarına göre monotondur ve sınırlanır (çünkü mevcut karakterlerin sayısı sonludur). Bu nedenle bir sınırı vardır, H ∞ .
Mı bir gönderme (olacaktır lH ∞ - lH 0 /) L 0 :
- Pay, H ∞ - H 0 , için ne derece yansıttığı kodunuzu "itaat" sonsuz zaman aralığında entropinin artma yasası.
- Denonimator, L 0 , (değil bayt) karakter başlangıç kodunun uzunluğudur.
En yüksek puana sahip kod kazanır . En erken başvuru / düzenleme lehine bağlar çözülecektir.
Bir dizenin entropisini hesaplamak için, bu yazının sonunda JavaScript snippet'ini ( @flawr izniyle ve düzeltmeleri ile @Dennis ve @ETHproductions ) kullanabilirsiniz.
Limit elde ederse H ∞ özel durumda zordur, öyle, herhangi bir düşük bağlı kullanabilirsiniz H 20 (eğer (kullanırsınız böylece skor hesaplama, H 20 - H 0 ) / L 0 ). Ancak, her durumda, sonsuz entropi dizisi kesinlikle artmalıdır.
Lütfen, açık değilse, entropi dizilerinin arttığına dair bir açıklama veya kısa bir kanıt ekleyin.
Örnek
Kurgusal dilinde kod düşünün aabcab
çalışma dizesi üretir, cdefgh
çalışma üretir, cdefghi
ki ...,
Orijinal kod benzersiz karakterlerdir a
, b
ve c
ilgili frekansları 3/6, 2/6 ve 6/1 ile. Entropisi 1.4591'dir. Bu H 0 .
Dize cdefgh
daha entropiye sahiptir aabcab
. Bunu hesaplamadan anlayabiliriz çünkü belirli sayıda karakter için bütün frekanslar eşit olduğunda entropi en üst düzeye çıkarılır. Gerçekten de, entropi H 1 2,5850 olan.
Dize cdefghi
tekrar öncekinden daha fazla entropi vardır. Şimdi hesaplama yapmadan yapabiliriz, çünkü var olmayan bir karakter eklemek her zaman entropiyi artırır. Gerçekten de, H 2 2,8074 olan.
Bir sonraki dize olsaydı 42
, çünkü zincir, geçersiz olacağını H 3 2.8074 daha küçük 1, olur.
Öte yandan, dizi H ∞ = 3 sınırında artan entropi dizeleri üretmeye devam ederse, puan (3−1.4597) / 6 = 0.2567 olur.
Teşekkür
Sayesinde
Zorluğu geliştirme konusundaki yardımları için ve özellikle beni yinelenen uygulamadan elde edilen artan artan entropinin zincirlerinin mümkün olduğuna inandırdığı için;
@flawr , puan işlevini değiştirmek ve çok faydalı snippet'i yazmak dahil olmak üzere çeşitli öneriler için;
@ Skor fonksiyonunun önceki bir tanımında önemli bir dezavantaja işaret etme;
JavaScript snippet'indeki düzeltme için @Dennis ;
Pasajda başka bir düzeltme için @ETHproductions ;
Entropi tanımında bir düzeltme için @PeterTaylor .