얼마 전 웹 표준 프로젝트(WaSP, Web Standards Project)는 최신 브라우저와 그 CSS 엔진을 검사하는 적합성 테스트 Acid2를 발표했습니다. 이 테스트는 여러 브라우저가 HTML의 종속형 스타일 시트(CSS)를 해석하고 화면에 그릴 때 서로 같은 결과를 내는지 확인합니다. 여러분은 자신이 즐겨 쓰는 텍스트 기반 브라우저 Lynks를 표준 준수 면에서 다른 어떤 텍스트 브라우저보다 뛰어나게 만들고 싶어, 곧바로 CSS 기능을 구현하기로 합니다.
이 텍스트 브라우저에는 여러 개의 그림 파일과 단순화된 스타일 시트가 주어집니다. 하나의 그림은 이름, 높이, 너비, 그리고 문자로 이루어진 2차원 배열로 정의됩니다. 문자 . 은 투명한 픽셀을 뜻하며 그려지지 않고, 그 밖의 모든 문자는 그대로 출력됩니다. 예를 들면 다음과 같습니다.
owl.png 5 7
.-----.
|O...O|
|..v..|
|.<_>.|
.-----.
스타일 시트가 주어졌을 때, 브라우저가 화면에 표시해야 하는 그림을 만들어 내는 것이 여러분의 과제입니다. 스타일 시트는 여러 개의 항목으로 이루어지며, 각 항목의 형식은 다음과 같습니다.
#<id> {
pos-x : <x> px ;
pos-y : <y> px ;
position : <relative = <id>|absolute> ;
file : <파일 이름> ;
layer : <레이어 번호> ;
}
CSS 항목에는 다음 규칙이 적용됩니다.
pos-x, pos-y, position, file, layer 다섯 가지 속성이 이 순서대로 정확히 한 번씩, 각각 별도의 줄에 주어집니다.그림을 합성하는 규칙은 다음과 같습니다.
첫 줄에는 이어지는 시나리오의 개수가 주어집니다. 각 시나리오는 다음과 같이 주어집니다. 첫 줄에는 이어질 파일의 개수(1개 이상, 100개 이하)가 주어집니다. 각 파일은 공백으로 구분된 파일 이름 f, 높이 h, 너비 w (1 ≤ w, h ≤ 100)로 주어지고, 이어서 h개의 줄에 각각 정확히 w개의 문자가 주어집니다. 파일 정의 다음에는 항목의 개수 m (1개 이상, 500개 이하)이 한 줄에 주어지고, 이어서 m개의 항목으로 이루어진 스타일 시트가 주어집니다.
최종 그림의 크기는 최대 1000 × 1000 문자라고 가정해도 됩니다. CSS 항목의 모든 좌표는 절댓값이 1000000 미만인 정수입니다. 모든 파일 이름과 식별자(id)는 알파벳과 숫자, 점(.)으로만 이루어집니다. 이름이 같은 파일은 없으며, 같은 식별자도 없습니다. layer 속성은 0 이상 1000000 이하입니다.
각 시나리오에 대해 먼저 Scenario #i: 형태의 줄을 출력합니다. 여기서 i는 1부터 시작하는 시나리오 번호입니다. 그다음, 스타일 시트의 지시에 따라 모든 그림을 겹쳐 만든 결과 그림을 출력합니다.
결과 그림은 왼쪽 위 모서리가 항상 위치 (0, 0)이 되는, 가능한 한 작은 직사각형이어야 합니다. 단, 투명한 픽셀도 경계에 있더라도 결과 그림에 포함됩니다. 즉 직사각형의 크기는 배치된 모든 그림의 (투명한 픽셀까지 포함한) 전체 범위로 결정됩니다. 비어 있는 칸은 모두 공백으로 채우고, 각 줄은 끝의 공백을 지우지 말고 전체 너비만큼 출력합니다. 서로 다른 시나리오 사이에는 빈 줄 하나를 넣어 구분합니다.