Một hệ thống thẻ tuần hoàn là một mô hình tính toán nhỏ, hoàn chỉnh Turing bao gồm một bảng chữ cái hai ký hiệu (tôi sẽ sử dụng {0,1}
), một danh sách các sản phẩm tuần hoàn hữu hạn, không trống bao gồm hai biểu tượng đó và một từ không liên kết cũng bao gồm hai biểu tượng đó.
Ở mỗi bước:
- yếu tố đầu tiên trong từ bị loại bỏ
- nếu đó là sản xuất
0
hiện tại bị bỏ qua - nếu đó là sản phẩm
1
hiện tại được nối vào cuối từ . - sản xuất tiếp theo trở nên tích cực. Nếu đây là sản phẩm cuối cùng, hãy quay lại sản phẩm đầu tiên.
Hệ thống tạm dừng khi từ trở nên trống rỗng.
Một ví dụ (từ Wikipedia):
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
Nhiệm vụ của bạn, nếu bạn chọn chấp nhận nó, là viết một chương trình hoặc chức năng:
- một danh sách các sản phẩm,
- từ ban đầu, và
- một thế hệ,
và in hoặc trả lại từ ở thế hệ đó.
Ví dụ,
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]
Chi tiết thực hiện:
Bảng chữ cái không quan trọng. Bạn có thể sử dụng
0
và1
,True
vàFalse
,T
vàNIL
,A
vàB
, hoặc thậm chí1
và0
, hoặc bất cứ điều gì khác mà bạn có thể nghĩ ra, miễn là bạn là phù hợp. Tất cả đầu vào và đầu ra phải sử dụng cùng một bảng chữ cái và bạn phải cho biết bạn đang sử dụng để làm0
gì và để làm gì1
.Độ dài của từ phải không bị ràng buộc về mặt lý thuyết. Đó là, bạn không thể mã hóa độ dài từ tối đa. Nếu tôi chạy chương trình của bạn trên một máy tính lý tưởng với dung lượng bộ nhớ vô hạn, về mặt lý thuyết, chương trình của bạn phải có khả năng sử dụng nó. (Bạn có thể bỏ qua các giới hạn của trình thông dịch / biên dịch viên.)
Nếu hệ thống đã cho dừng trước khi đạt được thế hệ đã cho, bạn phải trả lại hoặc in từ trống.
Sản phẩm trống tồn tại và bạn phải có khả năng xử lý nó. Nếu bạn viết một chương trình đầy đủ, I / O của bạn cũng phải có khả năng xử lý nó.
Chỉnh sửa : Ban đầu tôi dự định thế hệ 0
sẽ là từ đầu vào và thế hệ 1
là kết quả của bước đầu tiên. Tức là tôi đã có ý định trả lại cột trước . Tuy nhiên , vì tôi chưa đủ rõ ràng trong việc nêu rõ điều này, tôi sẽ chấp nhận cả hai lựa chọn ; đối với mỗi thế hệ, bạn có thể trả về giá trị ở cột trước hoặc cột sau . Bạn phải nói rằng bạn đang theo dõi cột sau , nếu bạn đang làm như vậy. Bạn cũng phải nhất quán trong cột bạn chọn.
Tôi sẽ trao giải mã nhỏ nhất một tuần kể từ bây giờ (27/10/2014).