Giriş
Bu meydan okumada, çok kötü yalancı sayılar kullanarak belirli bir olasılıklı hücresel otomatı simüle edeceğiz . Hücresel otomasyon ikili dizelerde aşağıdaki yerel kural ile tanımlanır. Bir hücrenin sol komşu ve hücre kendisi durumlarına sahip olduğunu varsayalım a
ve b
.
- Eğer
min(a,b) == 0
o zaman yeni bir devlet,b
DİRmax(a,b)
. - Eğer
min(a,b) == 1
, o zaman yeni durumub
rastgele seçilir{0,1}
.
Aşağıdaki resim, bir single'ın 10 adımlı olası evrimini göstermektedir 1
.
1
11
101
1111
11001
101011
1111111
10001001
110011011
1010111101
İki komşu kadar Not 1
s bazen gelişmeye 1
ve bazen 0
, ve sınır en parça her zaman 1
bu. Göreviniz bu formun hücresel otomat evrimini üretmektir.
Girdiler
Girdileriniz, n
görüntülenecek satır sayısını belirten pozitif bir tamsayı L
ve rastgelelik kaynağı olarak kullandığımız boş olmayan bir bit listesidir .
Çıktı
Çıktınız, yukarıdaki şekilde olduğu gibi, zaman adımları 1
için tek bir evrenin evrimini gösteren listeler veya 2B bit dizisidir n
. 0
İstenirse eşit uzunlukta satırlar elde etmek için çıktıyı s ile doldurabilirsiniz , ancak önde 0
s olmamalıdır .
Hücresel otomattaki rastgele seçimler listeden çizilmeli ve L
tükendiğinde başlangıca geri dönmelidir. Daha açık bir ifadeyle, çıktı yukarıdan aşağıya, soldan sağa doğru bir zaman formunda bir satırdan geçirilirse, ardışık rasgele seçimler gerektiği L
kadar tekrarlanan listeyi oluşturur .
Misal
Girişlerin n = 7
ve olduğunu varsayalım L = [0,1,0]
. Daha sonra, hücresel otomat 7 adımda aşağıdaki şekilde gelişir, burada v
her rastgele seçimin üzerine bir sağ koyarız :
[1]
[1,1]
v
[1,0,1]
[1,1,1,1]
v v v
[1,1,0,0,1]
v
[1,1,1,0,1,1]
v v v
[1,0,0,1,1,1,1]
Biz işaretlenmiş tüm bitleri okursanız v
, aldığımız 01001001
, hangi L
2.66 kez tekrarladı. Bir sonraki rastgele bit olur 0
.
Kurallar ve Puanlama
Tam bir program veya işlev yazabilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklara izin verilmez. Girişlerin ve çıkışların kesin formatı önemsizdir (sebep dahilinde).
Test Durumları
Deterministik versiyon, her rastgele bit 0
:
Inputs: 10 [0]
Output:
1
11
101
1111
10001
110011
1010101
11111111
100000001
1100000011
Her rastgele bit 1
:
Inputs: 6 [1,1]
Output:
1
11
111
1111
11111
111111
Yalancı sürümler:
Inputs: 10 [0,0,1]
Output:
1
11
101
1111
10101
111111
1010011
11110101
101011111
1111101001
Inputs: 10 [1,0,0,1]
Output:
1
11
111
1001
11011
111111
1001101
11010111
111111101
1011001111
Inputs: 15 [1,1,1,0,0,0]
Output:
1
11
111
1111
10001
110011
1110111
11011001
111111011
1100011111
11100100011
111101100101
1001111101111
11011000111111
101101001011101
min(a,b)
ilea+b>1
vemax(a,b)
ilea+b
? Muhtemelen ilk durumun üstesinden gelmek için bir şeyler yapmak zorunda kalacağınızın farkındayım1
->11
(YapabileceğiniziL=[1]+f()...
veya ön tarafa 1 eklemenin bir yolunu bulunL
çünkü bu her zaman ikinci satır için 1'i açacaktır)