순환 태그 시스템은 두 개의 기호 알파벳 (내가 사용하는 것이다 구성된 작은, 튜링 완전한 계산 모델 {0,1}
의), 유한, 비어 있지 않은 순환 목록 제작 이 두 기호로 구성, 그리고 무제한의 단어 도 구성 그 두 상징.
각 단계에서 :
- 단어 의 첫 번째 요소 가 제거됩니다
- 이 있다면
0
, 현재 생산 스킵이고 - 그것이
1
현재 생산 이라면 단어 의 끝에 추가됩니다 . - 다음 생산 이 활성화됩니다. 이것이 마지막 프로덕션 인 경우 첫 번째 프로덕션으로 돌아갑니다.
단어 가 비면 시스템이 정지 합니다 .
예 (위키 백과) :
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
작업을 수락하기로 선택한 경우 다음을 수행하는 프로그램 또는 기능을 작성해야합니다.
- 제작물 목록
- 초기 단어
- 세대,
그 세대에 단어 를 인쇄하거나 반환합니다 .
예를 들어
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]
구현 세부 사항 :
알파벳은 중요하지 않습니다. 당신은 사용할 수 있습니다
0
와1
,True
와False
,T
와NIL
,A
와B
, 심지어1
및0
, 또는 어떤 다른 당신은 당신이 일치으로, 가지고 올 수 있습니다. 모든 입력과 출력은 같은 알파벳을 사용해야합니다, 당신은 당신이 사용하고있는 표시해야0
무엇을하고1
.단어 의 길이는 이론적으로 제한이 없어야합니다. 즉, 최대 단어 길이를 하드 코딩 할 수 없습니다. 메모리가 무한한 이상적인 컴퓨터에서 프로그램을 실행하면 이론적으로 프로그램에서 사용할 수 있어야합니다. (인터프리터 / 컴파일러의 한계를 무시할 수 있습니다.)
주어진 세대에 도달하기 전에 주어진 시스템이 정지하면 빈 단어를 반환하거나 인쇄해야합니다.
빈 프로덕션이 존재하며이를 처리 할 수 있어야합니다. 전체 프로그램을 작성하는 경우 I / O도 처리 할 수 있어야합니다.
편집 : 나는 원래 생성 0
을 입력 단어 자체로 만들고 생성 1
을 첫 단계의 결과로 만들었습니다. 즉, 나는 당신이 이전 열 을 반환하도록 의도했습니다 . 그러나이 내용을 충분히 명확하게 밝히지 않았으므로 두 가지 옵션을 모두 사용할 것입니다 . 각 세대마다 before 또는 after 열에 값을 반환 할 수 있습니다 . 당신은 당신이를 따르고 있는지 명시해야 후 열을 .또한 어떤 열을 선택해야하는지 일관성이 있어야합니다.
지금부터 일주일에 가장 작은 코드를 수여합니다 (2014 년 10 월 27 일).