논리 회로 따라가기

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

하나 이상의 입력, 0개 이상의 2입력 AND/OR 게이트, 그리고 하나의 출력으로 이루어진 논리 회로의 출력값을 구하는 문제입니다. 각 회로는 ASCII 문자로 그려집니다.

전선은 세 가지 문자로 표현합니다. 가로 선은 붙임표 -(ASCII 45), 세로 선은 세로 막대 |(ASCII 124), 분기점은 더하기 +(ASCII 43)입니다. 입력은 대문자 A부터 Z까지로, 유일한 출력은 물음표 ?로 나타냅니다.

AND 게이트와 OR 게이트는 아래와 같은 모양으로 그려지며, 항상 이 방향으로만 나타납니다.

:\ 
: ) 
:/

AND 게이트

:\ 
: > 
:/

OR 게이트

게이트의 두 입력은 왼쪽에서 들어오고, 출력은 오른쪽으로 나갑니다.

-:\
 : )-
-:/

입력과 출력이 표시된 게이트

게이트의 입력이나 출력은 반전될 수 있습니다. 반전은 해당 입력 또는 출력 위치에 놓인 소문자 o(ASCII 111)로 표시합니다.

-o:\
  : )o-
--:/

위쪽 입력과 출력이 모두 반전된 예

아래 그림은 입력 두 개와 출력 하나로 이루어진 작지만 완전한 논리 회로입니다.

A-o:\
   : )o-?
B--:/

두 개의 논리 입력과 출력

모든 회로는 다음 규칙을 따릅니다.

  1. 회로 그림의 크기는 최대 가로 100, 세로 100 문자입니다.
  2. 전선은 분기점을 제외하면 직선으로만 나아갑니다. 분기점에서는 항상 90도로 꺾입니다. 두 분기점이 가로나 세로로 맞닿는 일은 없습니다.
  3. 끊어진 전선은 없습니다. 즉, 모든 전선 문자는 양쪽 끝이 같은 종류의 전선 문자, 분기점, 게이트 입력, 게이트 출력, 논리 입력, 논리 출력 중 하나와 맞닿아 있습니다.
  4. 전선끼리 교차하거나 맞닿지 않습니다.
  5. 게이트 입력은 항상 왼쪽에서 수평으로 들어오고, 게이트 출력은 항상 오른쪽으로 수평으로 나갑니다.
  6. 반전 표시는 게이트 입력이나 출력 바로 옆에만 올 수 있으며, (입력이면) 앞에, (출력이면) 뒤에 항상 붙임표가 최소 한 개 붙습니다.

입력의 회로도는 첫 번째 열에 별표 * 하나만 있는 줄로 끝납니다. 그 뒤에는 입력 상태를 나타내는 줄들이 이어지는데, 각 줄은 0 또는 1 스물여섯 개로 이루어진 문자열입니다. 첫 번째 문자는 입력 A의 상태, 두 번째 문자는 입력 B의 상태, 이런 식입니다. 회로에서 쓰이지 않는 글자의 입력값은 무시합니다. 입력 상태 목록은 다시 첫 번째 열에 별표 * 하나만 있는 줄로 끝납니다.

입력

입력 상태 목록을 끝내는 별표 뒤에는 또 다른 회로도가 오고, 그 뒤에 그 회로의 입력 상태 목록이 오며, 다시 회로도와 입력 상태 목록이 이어지는 식으로 파일이 끝날 때까지 반복됩니다. 파일에는 항상 회로 하나와 그 회로에 대한 입력 한 묶음 이상이 들어 있습니다.

출력

각 회로에 대해, 회로 뒤에 나열된 입력값 묶음마다 그 회로의 출력값(0 또는 1)을 한 줄에 하나씩 출력합니다. 한 회로의 출력 묶음과 다음 회로의 출력 묶음은 빈 줄 하나로 구분합니다.