Elleriniz bağlıyken Rastgele esinlenerek :
Amaç
Bu zorluğun amacı, tamamen rasgele görünen, ancak aslında deterministik bir şekilde üretilen 1s ve 0s dizesi olan bir psödondom bit akışı üreten bir program yazmaktır. Programınız 1 ve 0'lık bir dize (isteğe bağlı boşlukla) çıkarmalı ve aşağıdaki gereksinimleri sağlamalıdır:
- Sınırsız zaman ve bellek verildiğinde, programınız sonsuza kadar 1s ve 0s dize çıkarmaya devam etmelidir.
- Programınız makul bir makinede yaklaşık bir dakika içinde 1000'den fazla rastgele bit çıkarmalıdır. Bu gereklilik mümkün değilse, o zaman azaltacağım.
- Bit dizisi tekrarlanabilir, ancak yinelenen bölümün uzunluğu 1000 bit'ten fazla olmalıdır.
- Bit dizisi mümkün olduğunca çok sayıda rastgele testten (aşağıda açıklanmıştır) geçmelidir.
- Program herhangi bir harici kaynaktan herhangi bir girdi almamalı veya yerleşik rand () benzeri bir işlev kullanmamalıdır.
- Yukarıdaki gereksinim nedeniyle, program her çalıştırıldığında aynı tam bit dizesini çıktılamalıdır.
Rasgelelik Testi # 1
Sahte sözde bit dizisi görsel inceleme sonrasında belirgin bir model içermemelidir.
Rasgelelik Testi # 2 (yorumlara göre değişebilir)
Bit dizesi 1s ve 0s arasında eşit bir dağılım içermelidir. Bunu (ve diğer şeyleri de) test etmek için bit akışı, 3 bit uzunluğundaki segmentlere ayrılır 101|111|001
.
Tüm bu segmentlerden 1 / 8'inin üç 1'i ve 0'ı olmamalı, 3/8'inin iki 1'i olmalı ve bir 0, 3/8'inin 1 ve iki 0'ı ve 1/8'i olmalıdır bunların 1'i ve üç 0'ı olmamalıdır.
Rasgelelik Testi # 3
"Run", hepsi aynı değere sahip ardışık bir bit dizisi olarak tanımlanır. Dize 1001001110
, 1 ( 1..1.....0
) boyutunda üç çalışma, 2 ( .00.00....
) boyutunda iki çalışma ve 3 ( ......111.
) boyutunda bir çalışma içerir . Çalışanların örtüşmediğine dikkat edin.
1000 rasgele bitlik bir dizeden, yaklaşık 1 boyutta 250 çalışma, 2 boyutunda 125 çalışma, 3 boyutunda 62 çalışma vb. Olmalıdır. Genel olarak, R çalışma boyutu için 1000/(2**(R+1))
, bu boyutta yaklaşık çalışma olmalıdır .
Rasgelelik Testi # 4
İlk 840 bit, her biri 420 bitlik iki yarıya bölünür. İlk yarıdaki her bit, ikinci yarıdaki karşılık gelen bit ile karşılaştırılır. İki bit, zamanın yüzde elli kadarıyla eşleşmelidir.
İşte bir Perl programının kaynak kodu şimdi gerçekleştirdiği testler 2 ile 4. olarak, bit dizisi herhangi beyazboşluk gerektirir olmasıdır.
Objektif Kazanan Ölçüt Zamanı!
Kazanan, 6 gereksinimin tümünü ve tüm rasgelelik testlerini, rastgelelikten ayırt edilemeyecek derecede geçiren programdır. Birden fazla program bunu başarırsa, tekrarlanması en uzun süreyi alan program kazanacaktır. Birden fazla program bunu başarırsa, o zaman kravat kırıcı gibi davranmak için daha fazla rasgelelik testi bulmam gerekebilir.