Вступ
У цьому виклику ми будемо моделювати певний імовірнісний стільниковий автомат, використовуючи дуже погані псевдовипадкові числа. Стільниковий автомат визначається на двійкових рядках за наступним локальним правилом. Припустимо, що лівий сусід клітини і сама клітина мають стани aі b.
- Якщо
min(a,b) == 0, то новий стан Росіїbєmax(a,b). - Якщо
min(a,b) == 1, то новий станbA вибирається випадковим чином{0,1}.
На наступному малюнку показана одна можлива 10-ступінчаста еволюція синглу 1.
1
11
101
1111
11001
101011
1111111
10001001
110011011
1010111101
Зверніть увагу, як два суміжних 1s іноді еволюціонують до 1, а іноді до 0, і найбільш бітові біти завжди є 1s. Ваше завдання - створити еволюцію стільникового автомата цієї форми.
Вхідні дані
Ваші вхідні дані - це натуральне число n, що позначає кількість рядків для відображення, і не порожній список бітів L, який ми використовуємо як джерело випадковості.
Вихідні дані
Вихід - це список списків або двовимірний масив бітів, що зображує еволюцію одиничного 1для nчасових кроків, як на малюнку вище. Ви можете накласти на висновок 0s, щоб отримати рядки однакової довжини, за бажанням, але не повинно бути провідних 0s.
Випадкові вибори в стільниковому автоматі повинні бути зроблені зі списку L, відскакуючи на початок, коли він вичерпаний. Більш чітко, якщо результат проходить по одному рядку за часом у формі зверху вниз, зліва направо, то послідовні випадкові вибори формують список, Lповторюваний стільки разів, скільки потрібно.
Приклад
Припустимо, входи є n = 7і L = [0,1,0]. Тоді стільниковий автомат розвивається наступним чином протягом 7 кроків, де ми поставили vправо над кожним випадковим вибором:
[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]
Якщо ми прочитаємо всі біти, позначені символом a v, отримаємо 01001001, що Lповторюється 2,66 рази. Наступний випадковий біт був би 0.
Правила та підрахунок балів
Ви можете написати повну програму або функцію. Виграє найменший байт, а стандартні лазівки заборонені. Точний формат входів і виходів є неважливим (в межах причини).
Випробування
Детермінована версія, кожен випадковий біт 0:
Inputs: 10 [0]
Output:
1
11
101
1111
10001
110011
1010101
11111111
100000001
1100000011
Кожен випадковий біт 1:
Inputs: 6 [1,1]
Output:
1
11
111
1111
11111
111111
Псевдовипадкові версії:
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)зa+b>1іmax(a,b)зa+b? Я усвідомлюю, що вам, мабуть, доведеться щось зробити, щоб впоратися з першим випадком1->11(я думаю, ви могли б це зробитиL=[1]+f()..., або знайти якийсь спосіб вставити 1 в передній частині,Lтому що це завжди з'явиться 1 для другого рядка)