Hücresel otomatla oynuyordum ve ilginç davranışları olan bir tane buldum. Şöyle çalışır:
Soldan sağa bir ikili dize okur, 1ardından 2başka değerlerle karşılaşırsa 0sonuca a ekler ve okumaya devam eder. Bir 0(veya 3 değerden daha az değer kaldı) ile karşılaşırsa, geçerli değeri ve a'yı ekler 1ve okumaya devam eder. Dizenin sonunda 1sonuca bir tek ekler .
İşte bir jenerasyonun çalışılmış bir örneği
01011111
^
Önce bir karşılaşmaya 0biz eklemek böylece 01bizim sonuca
01011111
^
01
Şimdi bir ile karşılaştık, 1sıfır ekledik ve sonraki iki değeri atladık
01011111
^
010
Başka biriyle karşılaşıyoruz, 1böylece aynısını yapıyoruz
01011111
^
0100
Artık 1atlamak için başka bir alanımız var, ancak atlamak için yeterli alanımız yok, bu yüzden mevcut hücreyi ve a 1(bu örnekte 11)
01011111
^
010011
Sonundayız, bu yüzden tek bir tane ekliyoruz 1ve bu nesli sonlandırıyoruz
01011111
^
0100111
Görev
Herhangi bir makul formatta girdi verildiğinde, otomatın bir neslini hesaplayan bir fonksiyon veya program oluşturmalısınız.
Bu bir kod golf sorusudur, bu nedenle cevaplar bayt cinsinden puanlandırılacak, daha az bayt daha iyi olacaktır.
Örnek uygulama
İşte Haskell'deki örnek bir uygulama (bir işlevi tanımlar d, ancak program süresiz olarak bir yineleme yazdırır):
d('1':_:_:x) = "0" ++ d x
d(a:x) = a:'1':d x
d x = "1"
r x = x:map d(r x)
10baskı yapmalı 11011mı? Birkaç test vakasının yardımcı olacağını düşünüyorum