반응형

이미지 테스트 패턴 2번쨰 단계입니다.

먼저 문제부터 보고 가겠습니다.

지문을 읽는거보다는 타겟을 보고 해석하는편이 더 빠를거 같네요.

타겟과 같은 이미지로 출력을 하게하면 됩니다.

보면 패턴이 보입니다. 흰색 검은색 흰색 검은색 순으로 패턴이 출력되고 있네요.

(0,0) - 흰색, (1,0) - 검은색, (2,0) - 흰색, (3,0) - 검은색

x값이 1씩 증가할때마다 흰색과 검은색이 번갈아가면서 나타납니다.

그리고 동일한 x값일때 y값이 1씩 증가할때마다 흰색과 검은색이 번갈아가면서 나타납니다.

모자이크 모양이 나타나도록 하는 패턴이네요.


따라서 출력값을 흰색값과 검은색을 출력해주는 부분이 필요할거 같습니다.

그리고 x가 홀수번 반복해서 출력값을 처음 입력된값의 다음값을 입력받게 합니다.

오른쪽 아래에 있는 값이 출력값입니다.

3과 5를 번갈아가면서 출력하고있습니다. (3이 흰색값 5는 색상값이 없기때문에 검은색을 출력합니다.)

가장 왼쪽에 있는 노드는 y값을 알려줍니다.

처음에는 0을 출력 그 후 1씩 더한 acc값을 출력하게 되는거죠 

중간에 있는 노드가 이 노드의 핵심입니다.

이미지 테스트 패턴1에서도 했던것처럼 x,y값을 출력한 후 색상값을 출력합니다.

다른점은 이전이미지 테스트 패턴1에서는 30번을 반복해준반면 

여기에서는 31번을 반복하여 홀수를 만들어줍니다.(29번은 안되요 마지막 30번의 흰색값이 적용되지 않아서 fail이 납니다.)

이렇게 하면 모자이크모양의 이미지를 출력할 수 있습니다.


반응형
반응형



정말 좋습니다.
애니도 좋고 노래도 좋고
크... 내 옆에 친구가 한명의 친구가 존재할때,
혹시나 사람이 존재하는지 알기위해 찾아다닐때,
살기위해서 식량을 찾아 떠나야하만 할때,
그리고...
이 곳에 존재하는 사람이 오직 둘 뿐이고
식량이 더이상 존재하지 않을때...

종말을 찾아서 여행을 떠나자! 고고!


반응형
반응형



반응형
반응형

드디어 처음으로 TIS-100에서 이미지를 그리게 되었습니다.

처음 접하면 어떻게 해야 이미지가 그려지는지 알기 힘듭니다.

왜냐면 어떤 입력값이 어떤 출력값인지 알려주는 매뉴얼이 없기떄문인데요

나무위키에 검색해보면 자세하게 나와있지만 여기에 간단하게 설명을 해두려고합니다.


처음에 입력받는 값은 x 그 후의 값은 y 그 다음값은 색상이 됩니다.

여기서 중요한건 처음에 입력받은 x,y값은 한번만 받고 그 다음은 색상값만 받게됩니다.

즉 x-> y-> 색상-> 색상-> 색상 의 순으로 값을 받습니다.

이때, 색상값을 받을 경우 x+1의 위치에 색상이 지정됩니다.

중요한것은 y값이 변하지 않아 줄바꿈이 일어나지 않는다는점인데요.

이를위해서는 x,y값을 다시 받을 필요가 있습니다.

어떤 위치에서든 -1이하의 값을 입력하면 처음값으로 돌아갑니다.

즉 -1을 입력하게 되면 x,y값을 다시 받을 수 있습니다.

즉, x-> y-> 색상 ->색상->색상-> -1 ->x ->y ->색상 

과 같이 x,y값을 새로 지정해줌으로써 줄을 바꿀수 있습니다.

색상같은경우  0-검정, 1-어두운 회색, 2-밝은 회색, 3-흰색, 4-빨간색 으로 대응됩니다.

첫번째 이미지패턴 문제는 매우 간단합니다.

모든 화면을 하얀색으로 채우면 됩니다. 

어려울건 없어보이네요.

아 물론 출력방식을 몰랐다면 한참 해맸을거라 생각됩니다.

참고로 x축의 좌표는 0~29이며 y축은 0~17입니다.


따라서 시작은 0,0을 준 후 흰색값인 3을 30번을 주면 됩니다.

그 후 -1을 주어 x축에 0, y축에 1을 증가한값을 준 후 흰색값인 3을 30번 주면됩니다.


Y값은 1씩 증가하고 X값은 0의 값을 가진후 30에서 1씩 빼주면 되는 로직입니다.

그 후 X값이 0 이상이면 3을 출력 아니면 -1을 출력후 Y값을 1 증가해줍니다.


반응형
반응형

이번에는 곱셈을 해볼께요

곱셈... 즉 덧셈이라는 소리죠

초등학교 수업때 지겹도록 본 내용입니다.

1*5 = 1+1+1+1+1 = 5

다른방법이 있을지도 모르겠습니다만, 위의 방식으로 이번 문제를 해결해보도록 하죠.

문제입니다.

READ VALUES FROM IN.A AND IN.B

MULTIPLY THE VALUES

WRITE THE PRODUCT TO OUT

입력값 2개를 받은 후 곱하여 출력하라는 거군요

이해했습니다.

위에서 설명한 방식대로 문제를 풀이하는 걸로 해보죠

입력A를 카운트 하는 것으로 예시를 들겠습니다.

1. 입력A가 0이거나 입력B가 0일 경우 0을 출력한다.

2. 입력 A가 1이상이면 입력B값 임의의 값 X에 더한 후 입력 A의 값에 1을 뺀다.

3. 이후 2를 반복하다가 A가 0이 되는순간 저장된 임의의 값 X를 출력한다.

입니다.


코드로 보도록하죠

1. A의 값을 받아서 0이 아닐경우, 저장합니다.(카운트를 위한 변수)

 그 후 B의 값을 받아서 0이 아닐경우, 2로 2번 보냅니다.(더할 값)

B의 값을 보낸 후 저장된 값을 1 뻅니다.

그 후 0인지 확인을 하여 0일 경우 0을 출력하고 아닐경우 B의 값을 다시 보냅니다.(이하 반복)

2.카운트 값을 받아서 0인지 확인합니다.

0이 아닐경우 SWP 하여 B의 값을 더합니다.(계속 누적합니다.)

0일 경우 SWP 하여 출력합니다.(다음 값을 계산한때 카운트값을 초기화가 됩니다.)

반응형
반응형

이번에는 입력신호를 뒤짚어서 출력하는 해보겠습니다.

입력값이 1,2,3,4,5로 들어왔다면

출력값은 5,4,3,2,1로 출력되는 겁니다.

SEQUENCES ARE ZERO-TERMINATED

READ A SEQUENCE FROM IN

REVERSE THE SEQUENCE

WRITE THE SEQUENCE TO OUT

이번에는 새로운 노드가 나왔습니다.

입력된 값을 저장해두는 노드인대요

FILO(First In Last Out)이라는 것입니다.(자세한 내용은 검색하시면 나와요.)

즉 입력된 순서대로 저장이 되어 출력을 할때는 마지막으로 입력된 값이 가장먼저 출력이 됩니다.

그리고 이번에도 역시 0을 기준으로 REVERSE하는 것을 목표로하는 군요.


그럼 단순하게 로직을 생각해보겠습니다.

0이 되면 입력을 그만두고 출력이 되야합니다.

그리고 노드에 있는 데이터가 모두 출력이되면 다시 입력을 받아야합니다.

따라서 입력된 값이 몇개인지 카운트할 변수가 필요할거같네요.

어렵게 생각하지 말고 코드를 봅시다.

1. 입력값을 오른쪽 저장노드에 넣어준후 2번으로 카운트를 보냅니다.

이 때, 카운트값이 1이면 1증가이고 0이면 출력을 시도하라는 뜻입니다.


2.위에서 카운트 값을받습니다.

0일경우 BAK에 저장해둔 카운트값을 3으로 넘겨줍니다.

아닐경우 SWP하여 1씩 증가시켜준 후 SAV해줍니다.


3. 2에서 받은 카운트값을 1씩 감소시키면서 출력값을 아래로 보냅니다.

카운트값이 0이 되면 0을 출력한 후 2에게 출력을 완료했다고 신호를 보냅니다. (이 신호는 1까지 이동하여 다시 입력을 받기 시작하게 됩니다.)


개인적인 의견으로는 반전하는 이번 코드보다 최소,최대값을 구하는 코드가 더 어려웠던 것 같습니다.

반응형

+ Recent posts