Cowculations
시간 제한1초메모리 제한128 MB
각 서판에서 다섯 기호 소 수에 세 가지 연산(덧셈, 오른쪽 시프트, 왼쪽 시프트, 무연산)을 적용한 뒤, 왼쪽을 V로 채운 결과가 여덟 기호 값과 같은지 확인한다.
문제
저명한 인류학자 Bo Vine 박사가 원시적인 소(cow) 문명의 흔적을 발견했다. 댈러스 인근 목초지에서 수백 개의 계산용 점토판이 발굴되었고, 박사는 이 점토판들이 수학 계산을 나타낸다는 사실을 알아냈다. 박사는 "소들이 겉으로 보이는 것보다 훨씬 똑똑하다고 늘 의심해 왔는데, 여기 그 증거가 있다"고 말한다.
각 점토판은 여섯 줄로 이루어지며, 각 줄은 소 기호(cow symbol)의 나열이다.
- 1번째 줄과 2번째 줄: 두 개의 소 숫자
- 3~5번째 줄: 그 숫자들에 적용할 연산
- 6번째 줄: 결과
소 숫자는 네 가지 기호 V, U, C, D를 사용한다. 1번째와 2번째 줄의 숫자는 항상 기호 5개, 6번째 줄의 숫자는 항상 기호 8개로 이루어진다.
계산을 해석하려면 두 값 Num1과 Num2를 추적해야 한다. 처음에 Num1은 1번째 줄의 숫자이고 Num2는 2번째 줄의 숫자이다. Num1은 변하지 않지만 Num2는 연산에 의해 값이 바뀔 수 있다. 연산은 A, R, L, N 네 가지이다.
연산 A: Num2를 Num1과 Num2의 "합"으로 바꾼다. 덧셈은 아래 표를 따른다.
A | V U C D
-----------------------
V | V U C D
U | U C D V,U
C | C D V,U U,U
D | D V,U U,U C,U
표의 각 칸에서 첫 번째 기호가 덧셈 결과이고, 두 번째 기호가 올림(carry)이다. 예를 들어 U A V = U이고, C A C = V(올림 U)이다. 덧셈 예시: VUCDV A VUCDV = VDUCV, DVVCU A CVUCU = UUVCVC.
연산 R: Num2의 기호들을 오른쪽으로 한 칸 민다. 가장 오른쪽 기호는 사라지고 가장 왼쪽에 V가 채워진다. 예: VVCDU → VVVCD.
연산 L: Num2의 기호들을 왼쪽으로 한 칸 민다. 가장 왼쪽 기호는 그대로 유지되고 가장 오른쪽에 V가 채워진다. 예: VVCDU → VVCDUV.
연산 N: 아무 효과가 없다.
세 연산을 모두 적용한 뒤의 Num2가 6번째 줄의 값과 같아야 한다. 최종 Num2가 기호 8개보다 짧으면 왼쪽을 V로 채운다(예: VDCCC → VVVVDCCC).
점토판의 형식(줄 수, 기호 개수, 기호 종류 등)은 이미 올바름이 보장되어 있다. 당신의 임무는 1~5번째 줄에 기술된 계산의 결과가 실제로 6번째 줄의 값과 일치하는지 확인하는 것이다.
입력
첫 줄에 점토판의 개수 ()이 주어진다. 이어지는 개의 줄이 위에서 설명한 형식으로 개의 점토판을 나타낸다.
출력
각 점토판마다 한 줄씩 출력한다. 그 점토판이 박사의 가설을 따르면 YES를, 따르지 않으면 NO를 출력한다.