Я бавився зі стільниковим автоматом, і виявив той, який мав цікаву поведінку. Ось як це працює:
Він читає двійковий рядок зліва направо, якщо він зустрічається з 1наступними 2іншими значеннями, він додає a 0до результату і продовжить читання. Якщо він зіткнеться з 0(або залишилося менше 3 значень), він додасть поточне значення а 1і продовжить читання. В кінці рядка він додасть єдиний 1результат.
Ось відпрацьований приклад одного покоління
01011111
^
Ми спочатку стикаємося з 0таким, щоб додати 01свій результат
01011111
^
01
Зараз ми стикаємося з а, 1тому додаємо нуль і пропускаємо наступні два значення
01011111
^
010
Ми зустрічаємо іншого, 1тому робимо те саме
01011111
^
0100
Тепер у нас є ще одне, 1але недостатньо місця для стрибка, тому ми додаємо поточну комірку та a 1(у цьому випадку 11)
01011111
^
010011
Ми в кінці, тому ми додаємо єдиного 1і припиняємо це покоління
01011111
^
0100111
Завдання
З огляду на введення в будь-якому розумному форматі, ви повинні створити функцію або програму, яка обчислює одне покоління автомата.
Це питання з кодовим гольфом, тому відповіді будуть набиратись у байтах, менша кількість байтів - краща.
Зразок реалізації
Ось приклад реалізації в Haskell (визначає функцію d, але програма друкує ітерації нескінченно):
d('1':_:_:x) = "0" ++ d x
d(a:x) = a:'1':d x
d x = "1"
r x = x:map d(r x)
10його, слід надрукувати 11011? Я думаю, що ще кілька тестових випадків будуть корисними