Bir döngüsel etiket sistemi , iki sembollü bir alfabe (kullanacağım {0,1}
), bu iki simgeden oluşan sonlu, boş bir döngüsel üretim listesinden ve ayrıca aşağıdakilerden oluşan sınırsız bir kelimeden oluşan küçük, Turing-complete hesaplama modelidir . bu iki sembol.
Her adımda:
- kelimedeki ilk öğe kaldırıldı
- o olsaydı
0
şimdiki üretim atlanır - Bu ise
1
, mevcut üretim sonuna eklenir kelime . - bir sonraki üretim aktif olur. Bu son üretimse, ilk prodüksiyona geri dönün.
Sözcük boş olduğunda sistem durur .
Bir örnek (Wikipedia'dan):
Productions: (010, 000, 1111)
Initial word: 11001
Generation Production Word (before) Word (after)
0 010 11001 → 1001010
1 000 1001010 → 001010000
2 1111 001010000 → 01010000
3 010 01010000 → 1010000
4 000 1010000 → 010000000
5 1111 010000000 → 10000000
6 010 10000000 → 0000000010
7 000 0000000010 → 000000010
8 1111 000000010 → 00000010
9 010 00000010 → 0000010
Göreviniz, kabul etmeyi seçerseniz, aşağıdakileri alan bir program veya işlev yazmaktır:
- yapımların bir listesi,
- ilk kelime ve
- bir nesil,
ve o nesilde sözcüğü yazdırır veya döndürür .
Örneğin,
cyclic_tag(
prod=[[0,1,0],[0,0,0],[1,1,1,1]],
word=[1,1,0,0,1],
gen=4) => [1,0,1,0,0,0,0]
Uygulama ayrıntıları:
Alfabe önemli değil. Sen kullanabilir
0
ve1
,True
veFalse
,T
veNIL
,A
veB
, hatta1
ve0
, ya da her türlü başka sürece tutarlı olarak, ile gelebilir. Tüm giriş ve çıkışlar aynı alfabeyi kullanmalı0
ve ne için ve ne için kullandığınızı belirtmelisiniz1
.Kelimenin uzunluğu teorik olarak sınırsız olmalıdır. Yani, maksimum kelime uzunluğunu sabit kodlayamayabilirsiniz. Programınızı sonsuz miktarda belleğe sahip ideal bir bilgisayarda çalıştırırsam, programınız teorik olarak bu programı kullanabilmelidir. (Tercümanınızın / derleyicinin sınırlarını göz ardı edebilirsiniz.)
Verilen sistem verilen jenerasyona ulaşılmadan durursa, boş sözcüğü döndürmeli veya yazdırmalısınız.
Boş üretim var ve bunu halledebilmelisin. Tam bir program yazarsanız, G / Ç'nizin de programı kullanabilmesi gerekir.
Düzenleme : Başlangıçta nesil 0
giriş kelimesinin kendisi ve nesil 1
ilk adımın sonucu olması amaçlanmıştı. Yani, önceki sütunu geri vermenizi istemiştim. Ancak , bunu belirtmekte yeterince açık olmadığım için, her iki seçeneği de kabul edeceğim ; her nesil için değeri önceki veya sonraki sütuna döndürebilirsiniz . Bunu yapıyorsanız, sonraki sütunu izlediğinizi belirtmeniz gerekir . Ayrıca hangi sütunda seçtiğiniz konusunda tutarlı olmalısınız.
Bir hafta sonra en küçük kodu vereceğim (27.10.2014).