안 쓰던 블로그
TIS-100 SEQUENCE COUNTER 공략 본문
0이 들어올 때까지 들어온 값의 합을 저장하다가
0이 들어오면 합을 S에, 값의 길이를 L에 출력한다
한 노드 당 한 개씩 있는 ACC와 BAK을 활용해야 한다
ACC는 새로운 값이 오면 무조건 덮어씌워지므로
1. 값을 받는 노드
2. 합을 저장하는 노드
3. 길이를 저장하는 노드
이렇게 다 따로 해줘야 한다
맨 처음에 입력을 받아서 ACC값에 넣고 왼쪽, 아래, 오른쪽으로 보낸다
그냥 MOV LEFT, RIGHT, DOWN 으로 하면 다음 값을 받아서 넘어가니까 꼭 ACC에 저장한 뒤 그 값을 넘겨야 한다
내 코드에서는 값을 받아오는 노드 기준으로
오른쪽 3개가 길이 저장
왼쪽 3개가 더할 값 저장
아래 2개가 합을 저장하는 작업을 수행한다
합을 저장하는 작업을 하는 노드를 자세히 보면,
UP에서 오는 값으로는 이게 0인지 아닌지를 확인할 것이고,
LEFT에서 오는 값으로는 더하기 작업을 할 것이다
먼저 UP값을 받아서 ACC에 넣는다
그리고 ACC와 BAK을 값을 바꾼다
BAK은 이제까지의 합이 저장되는 곳이다 처음 값은 0임
그리고 ACC에다가 LEFT에서 오는 값을 저장한다
다시 SWP해주면 BAK에는 합이 저장되고, ACC는 UP값을 그대로 가지고 있다
JEZ로 ACC값이 0인지 0이 아닌지 확인한다
왜 위에서 확인 안 하고 합을 구한다음에 하냐면, 0이 들어왔어도 지금 ACC에 있는 값은 합해줘야 하기 때문이다
값을 받고 바로 저장하는 게 아니라 다음 값이 들어오면 합을 계산하기 때문에, do-while같은 느낌으로 한 번은 해줘야 함
아무튼 ACC값이 0이면 출력해야 되니까
BAK값을 다시 ACC로 SWP하고 DOWN으로 OUT.S에 쓴다
0이 아니면 END로 바로 점프해서 다음 숫자 받으러 간다
여기는 길이를 저장한다
BAK에는 이제까지의 길이가 저장된다
길이는 합처럼 저장하는 게 아니라, 0이면 무조건 출력하면 되고 0이 아니면 +1만 하면 되기 때문에
위에서 0인지 아닌지 체크한다
0이면 ZERO:로 바로 분기하고 아니면 +1 연산을 하고 END:로 빠진다
ZERO에서는 BAK값을 ACC로 보내고 ACC를 출력한다
'취미 > TIS-100 공략' 카테고리의 다른 글
TIS-100 SIGNAL MULTIPLEXER (SEGMENT 22280)공략 (0) | 2020.06.28 |
---|---|
TIS-100 NO_BACKUP 도전과제 공략 (0) | 2020.06.28 |
TIS-100 PARALLELIZE 도전과제 공략 (0) | 2020.06.28 |
TIS-100 BUSY_LOOP 도전과제 공략 (0) | 2020.06.27 |
TIS-100 DIFFERENTIAL CONVERTER(segment 20176)공략 (0) | 2020.06.27 |