Життєздатний стільниковий автомат - це стільниковий автомат, схожий на «Гра життя» Конвея, оскільки вони працюють на (теоретично) нескінченно великій квадратній сітці, де кожна клітина має рівно 8 сусідів, і є одним із 2 станів, а саме живих і мертвих .
Однак ці подібні версії різняться вирішальним чином: правила, щоб дана клітина ожила і правила для даної клітини, щоб вижити до наступного покоління.
Наприклад, у класичній грі життя використовується правило B3/S23
, яке означає, що для виживання нової клітини потрібно 3 живих клітини та 2 або 3 живих сусіда, щоб вижити. Для цього виклику будемо вважати, що сусіди не включають себе, тому кожна клітина має рівно 8 сусідів.
Ваше завдання - задаючи конфігурацію запуску, правило народження, правило виживання і ціле додатне число (кількість поколінь, які слід керувати), імітувати життєвий автомат, використовуючи ці правила для кількості поколінь, наведених у найкоротшому можливому коді . Початковою конфігурацією буде квадратний матричний / двовимірний масив або багаторядковий рядок, який ви можете вибрати. Інші можуть надаватися у будь-якому розумному форматі та способі.
Наприклад, якщо правило народження було 12345678
(будь-які живі сусіди), то правило виживання було 2357
і стартовою конфігурацією було
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
наступні два покоління будуть
Generation 1: Generation 2:
0 0 0 0 0 1 1 1 1 1
0 1 1 1 0 1 1 0 1 1
0 1 0 1 0 1 0 1 0 1
0 1 1 1 0 1 1 0 1 1
0 0 0 0 0 1 1 1 1 1
Якби кількість поколінь, що давались, становила 10, вихід був би чимось узгодженим
0 1 1 1 0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 1 1 1 0
Вам не доведеться обробляти зміни, які відбуваються поза межами, заданими вхідною матрицею, однак, усі комірки поза матрицею починають мертвими. Тому матриця введення може бути будь-якого розміру, аж до максимального значення, яке може підтримувати ваша мова. Вам не доведеться виводити плату між поколіннями.
Це код-гольф, тому найкоротший код виграє.
Тестові справи
Вони використовують B/S
позначення для позначення використовуваних правил
B2/S2
, generations = 100
Конфігурація:
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
Вихід:
0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
B1357/S2468
, generations = 12
Конфігурація:
1 0 1 0 1 0
0 1 1 0 1 0
1 0 0 0 0 0
0 0 0 0 0 1
1 1 1 1 1 0
0 1 1 0 0 1
Вихід:
0 1 0 0 0 0
0 1 1 1 1 0
0 1 0 1 1 0
1 1 1 0 0 0
0 0 1 1 1 0
0 1 1 0 0 0
Якщо вам потрібно генерувати більше тестових випадків, ви можете використовувати цей чудовий тренажер. Будь ласка, не забудьте обмежити розмір дошки