Я играл с клеточным автоматом и нашел тот, у которого было интересное поведение. Вот как это работает:
Он читает двоичную строку слева направо, если он встречает другое, а 1затем 2другие значения, он добавляет 0к результату и продолжает чтение. Если он встретит a 0(или осталось менее 3 значений), он добавит текущее значение и a 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? Я думаю, что было бы полезно еще несколько тестов