Giới thiệu
Trong thử thách này, chúng tôi sẽ mô phỏng một máy tự động di động xác suất nhất định bằng cách sử dụng số giả ngẫu nhiên rất xấu. Máy tự động di động được xác định trên chuỗi nhị phân theo quy tắc cục bộ sau. Giả sử rằng hàng xóm bên trái của một tế bào và chính tế bào đó có trạng thái a
và b
.
- Nếu
min(a,b) == 0
, sau đó trạng thái mớib
làmax(a,b)
. - Nếu
min(a,b) == 1
, sau đó trạng thái mớib
được chọn ngẫu nhiên từ{0,1}
.
Hình ảnh sau đây cho thấy một sự tiến hóa 10 bước có thể của một lần duy nhất 1
.
1
11
101
1111
11001
101011
1111111
10001001
110011011
1010111101
Lưu ý cách hai 1
s liền kề đôi khi tiến hóa 1
và đôi khi đến 0
và hầu hết các bit luôn luôn 1
là s. Nhiệm vụ của bạn là tạo ra một sự tiến hóa tự động di động của hình thức này.
Đầu vào
Đầu vào của bạn là một số nguyên dương n
, biểu thị số lượng hàng cần hiển thị và danh sách các bit không trống L
, mà chúng tôi sử dụng làm nguồn ngẫu nhiên.
Đầu ra
Đầu ra của bạn là một danh sách liệt kê hoặc mảng 2D bit, miêu tả sự phát triển của một đơn 1
cho n
bước thời gian, như trong hình trên. Bạn có thể đệm đầu ra với 0
s để có được các hàng có độ dài bằng nhau, nếu muốn, nhưng không được có 0
s dẫn .
Các lựa chọn ngẫu nhiên trong thiết bị tự động di động phải được rút ra từ danh sách L
, nhảy trở lại từ đầu khi nó cạn kiệt. Rõ ràng hơn, nếu đầu ra đi qua một hàng tại một thời điểm từ trên xuống dưới, từ trái sang phải, thì các lựa chọn ngẫu nhiên liên tiếp sẽ tạo thành danh sách L
lặp đi lặp lại nhiều lần nếu cần.
Thí dụ
Giả sử các đầu vào là n = 7
và L = [0,1,0]
. Sau đó, thiết bị tự động di động phát triển như sau trong 7 bước, trong đó chúng tôi đã đặt một v
quyền trên mỗi lựa chọn ngẫu nhiên:
[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]
Nếu chúng ta đọc tất cả các bit được đánh dấu bằng a v
, chúng ta sẽ nhận 01001001
được L
lặp lại 2,66 lần. Các bit ngẫu nhiên tiếp theo sẽ là 0
.
Quy tắc và chấm điểm
Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Số byte thấp nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép. Định dạng chính xác của đầu vào và đầu ra là không quan trọng (trong lý do).
Các trường hợp thử nghiệm
Phiên bản xác định, mỗi bit ngẫu nhiên là 0
:
Inputs: 10 [0]
Output:
1
11
101
1111
10001
110011
1010101
11111111
100000001
1100000011
Mỗi bit ngẫu nhiên là 1
:
Inputs: 6 [1,1]
Output:
1
11
111
1111
11111
111111
Phiên bản giả danh:
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)
bằnga+b>1
vàmax(a,b)
bằnga+b
? Tôi nhận ra rằng bạn có thể phải làm gì đó để xử lý trường hợp đầu tiên của1
->11
(Tôi nghĩ bạn có thể làmL=[1]+f()...
hoặc tìm cách nào đó để chèn 1 vào trướcL
vì điều đó sẽ luôn bật 1 cho dòng thứ hai)