안 쓰던 블로그

TIS-100 UNCONDITIONAL 도전과제 공략 본문

취미/TIS-100 공략

TIS-100 UNCONDITIONAL 도전과제 공략

proqk 2020. 9. 21. 11:15
반응형

UNCONDITIONAL

Solve SIGNAL COMPARATOR without using the JGZ, JLZ, JEZ, or JNZ instructions.

 

 

문제는 값을 하나 받아서 0보다 크면 G로 0이면 E로 0보다 작으면 L로 OUT시킨다

OUT값이 1이 아니면 0을 출력해야 한다

 

원래 풀이

근데 여기서 0을 비교하는 조건 GZ, JLZ, JEZ, JNZ을 쓰지 않는 게 도전과제 조건이다

그럼 뭐 써야 하냐 JRO는 조건에 없으니 JRO를 쓰면 된다

 

JRO n은 명령어와 n줄 떨어진 행으로 이동한다

JRO 0은 모듈 실행 정지

JRO -1은 이전 행 실행

JRO 2는 다음 행 무시하고 다다음 행 실행

JRO ACC는 ACC만큼 떨어진 행 실행

 

처음에 입력을 받는데 5+입력값으로 받는다

왜 그렇게 하냐면 JRO의 특징 때문에 음수를 받으면 위의 명령으로 올라가고 그래야 하는데

그런 것보다는 무조건 양수로 만들어서 줄 수를 조절하는 방법이 편하기 때문이다

 

5줄을 띄운 이유는 그 사이에 명령어를 실행할 줄이 좀 필요하니까 임의로 정했다

 

 

첫 번째 노드에서는 1보다 크면 1을 출력해야 한다

1보다 큰 수가 들어오면 적어도 6줄 점프한다

근데 입력값이 -2, -1, 0, 1, 2밖에 없으므로 +5하면 6과 7은 1출력하고 나머지에 0, 0을 보내야 한다

 

처음에 1이 들어왔다면 6이고, NOP에 걸리니까 MOV 1, DOWN을 하게 된다

2가 들어왔다고 하면 7이 오니까 바로 MOV 1, DOWN을 한다

이 경우 JMP LOOP로 점프하기 때문에 0 출력하지 않는다

 

처음에 5가 들어왔다면 입력값이 0이라는 말이니까, JMP ZERO해서 오른쪽에 1을 넘긴다

자기 자신은 0을 출력한다

 

처음에 -1이나 -2가 들어오면 3, 4가 이곳에 넘어오게 되고, 3이나 4나 무조건 JMP GO하게 된다

GO는 오른쪽에 2을 보내고 자기는 0을 출력한다

 

 

 

입력값에 따라 1, 2, 3이 두 번째 노드로 넘어 온다

6이나 7 같은 경우 3이 넘어오니까 바로 3줄 넘어가서 JMP DNO하게 되고, DNO에서 오른쪽에 3을 넘겨주고 자신은 0을 출력한다

 

처음에 5가 들어왔다면 1이 넘어오고, JMP EZ하게 된다. EZ는 오른쪽에 3을 보내고 자기는 1을 출력한다

바로 LOOP를 돌게 되니까 0을 출력하지 않는다

 

처음에 3, 4가 입력값이면 2가 넘어오게 되고, LZ로 점프해서 오른쪽에 1을 보내고 자기는 FIN으로 넘어가서 0을 출력한다

 

입력값에 따라 1, 3 중에 넘어 오는 마지막 노드이다

 

양수 6이나 7 같은 경우는 3이 넘어 왔으니까 3줄 점프해서 바로 0출력한다

 

5가 들어오면 3이 넘어오고, 똑같이 0 출력하고 끝난다

 

3, 4가 들어오면 1이 넘어오니까 MOV 1, DOWN으로 1 출력하고 바로 LOOP 시작점으로 점프한다

 

 

전체 코드

 

즐거운 TIS

반응형
Comments