Hücresel Otomata için Dizileri Tanımlama


10

Arka fon

Bu zorluğun amaçları doğrultusunda, bir n-stat hücresel otomat , girdi olarak fayarlanan durumdan iki sayı alan ve {0, 1, ..., n-1}bu setten çıktı olarak başka bir sayı döndüren ikili bir fonksiyondur . En az 2 adet uzunluğa sahip bir sayı listesine uygulanabilir.L = [x0, x1, x2, ..., xk-1]

f(L) = [f(x0, x1), f(x1, x2), f(x2, x3), ..., f(xk-2, xk-1)]

Ortaya çıkan listenin orijinalinden bir tane daha az öğeye sahip olduğunu unutmayın. Bir uzay-zaman diyagramı arasında fbaşlayarak Lsürekli olarak uygulanmasıyla elde edilen listelerin liste fiçin L, ve bir liste sonuçları toplamak. Nihai liste Bu liste söylemek uzunluğu 1 olan Lbir bir tanımlama dizisi için fdurum kümesi üzerinden her iki eleman listesi başlayarak uzay-zaman diyagramı bir sıranın, bitişik bir alt liste ise L. Bu, başka hiçbir ndevlet CA'sının tam olarak kesin uzay-zaman diyagramına sahip olmaması koşuluyla eşdeğerdir .

Giriş

Girişleriniz bir n-by- ntamsayı matrisi M, Len az 2 uzunluklu tamsayıların listesi ve isteğe bağlı olarak sayıdır n. Matris Mbir tanımlayan n-durum CA ftarafından f(a,b) = M[a][b](0 tabanlı dizin kullanılarak) dönüştürülmüştür. O garantilidir n > 0ve bu Mve Ltek devlet kümesinin unsurları içeren {0, 1, ..., n-1}.

Çıktı

Eğer çıkış tutarlı truthy değer olacaktır LCA için tanımlayıcı bir dizisidir fve başka türlü tutarlı falsy değer. Bu, tüm "evet" durumlarının aynı doğruluk değerine ve tüm "hayır" durumlarının aynı yanlış değere yol açtığı anlamına gelir.

Misal

Girişlerini düşünün n = 2, M = [[0,1],[1,0]]ve L = [1,0,1,1]. Matris Mikili XOR otomat tanımlar f(a,b) = a+b mod 2ve uzay-zaman diyagramı başlayarak LIS

1 0 1 1
1 1 0
0 1
1

Bu diyagram 0 0herhangi bir satırda yer almaz , bu nedenle Ltanımlayıcı bir sıra değildir ve doğru çıktıdır False. Biz girişi ise L = [0,1,0,0]bunun yerine, uzay-zaman diyagramıdır

0 1 0 0
1 1 0
0 1
1

Bu diyagram sıraları durum grubu çekilen tüm çiftleri içerir, yani 0 0, 0 1, 1 0ve 1 1bu yüzden L, bir tanımlama dizidir ve doğru çıktı True.

kurallar

Tam bir program veya işlev yazabilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklara izin verilmez.

Test Durumları

Trivial automaton
[[0]] [0,0] 1 -> True
Binary XOR
[[0,1],[1,0]] [1,0,1,1] 2 -> False
[[0,1],[1,0]] [1,0,1,0] 2 -> True
[[0,1],[1,0]] [0,1,0,0] 2 -> True
Addition mod 3
[[0,1,2],[1,2,0],[2,0,1]] [0,1,1,0,0,0,1,0,0] 3 -> False
[[0,1,2],[1,2,0],[2,0,1]] [0,1,1,0,0,0,1,0,1] 3 -> True
Multiplication mod 3
[[0,0,0],[0,1,2],[0,2,1]] [0,1,1,2,0,0,1,0,1] 3 -> False
[[0,0,0],[0,1,2],[0,2,1]] [0,1,1,2,2,2,1,0,1] 3 -> True
Some 4-state automata
[[3,2,2,1],[0,0,0,1],[2,1,3,1],[0,1,2,3]] [0,0,0,0,1,1,1,1] 4 -> False
[[3,2,2,1],[0,0,0,1],[2,1,3,1],[0,1,2,3]] [0,0,0,1,0,1,1,1] 4 -> False
[[3,2,2,1],[0,0,0,1],[2,1,3,1],[0,1,2,3]] [0,1,2,3,3,1,2,3,0] 4 -> True
[[0,1,2,1],[1,0,2,0],[2,2,1,0],[1,2,0,0]] [0,0,1,1,2,2,0,2,1] 4 -> False
[[0,1,2,1],[1,0,2,0],[2,2,1,0],[1,2,0,0]] [0,3,1,3,2,3,3,0,1] 4 -> False
[[0,1,2,1],[1,0,2,0],[2,2,1,0],[1,2,0,0]] [0,3,1,3,2,3,3,0,1,2] 4 -> True

Yanıtlar:


2

CJam, 53 43 42 bayt

l~:M;_,({_[\1>]zW<_{M\{=}/}%}*;](_*\L*_&,=

Bu, tanımın çok basit bir uygulamasıdır (ilk denememden sonra Jakube'den biraz ilham aldım). CJam tarzı diziler kullanarak girişi STDIN üzerinde ters sırada bekler:

2 [1 0 1 1] [[0 1][1 0]]

İşte kodu tüm girişlere karşı çalıştıran bir test koşum takımı (önce doğru giriş formatına dönüştürülüyor). Giriş alanındaki sonuçlar gerçekte kullanılmaz. Bana güvenmiyorsanız onları kaldırın. ;)


5

Python 2: 93 bayt

M,L,n=input();a=[]
while L:z=zip(L,L[1:]);a+=z;L=[M[i][j]for i,j in z]
print len(set(a))==n*n

Basit uygulama: Tüm çiftleri fermuarla bulun, daha sonra ezberleyin ve M'ye L'ye uygulayın. Tekrarlayın. Bulunan benzersiz çiftlerin sayısını karşılaştırın.

Girdi biçimindedir [[0,1],[1,0]], [0,1,0,0], 2.


2

Mathematica, 90 83 82 bayt

f=Length[Union@@Last@Reap[#2//.l_List:>Extract[#,Sow/@Partition[l+1,2,1]]]]==#3^2&

Başka bir basit uygulama.

Kullanımı:

f[{{0, 1}, {1, 0}}, {0, 1, 0, 0}, 2]

Doğru

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.