LogDB
시간 제한1초메모리 제한1024 MB
괄호로 묶인 인자 목록을 가진 사실들을 파싱한 뒤, 인자에 변수가 들어갈 수 있는 질의마다 일치하는 사실의 개수를 센다.
문제
LogDB 데이터베이스에는 사실(fact)이 가득 차 있다. 사실은 이름과, 괄호로 묶인 이름 목록으로 이루어진 본문으로 구성된다. 함수 호출과 비슷하다.
[ fact1(arg1, arg2 ,arg_3,4,4) thing(p1,arg2,p3). ]
은 사실의 이름이고, 본문에 있는 이름 목록은 그 사실의 인자다. 은 또 다른 사실이다.
목록의 이름들은 쉼표와 선택적인 공백으로 구분된다. 목록에는 이름이 적어도 하나 있다.
이름은 영숫자(a-z, A-Z, 0-9)와 ''로 구성된다. 단, 사실의 이름과 본문의 이름은 ''로 시작할 수 없다.
이름, 괄호, 쉼표 앞뒤에는 공백이 올 수 있다. 그러나 사실이나 질의는 줄을 넘어 나뉠 수 없다.
인자의 개수가 다른 사실은 서로 다른 사실이다.
같은 사실이 데이터베이스에 여러 번 나타날 수 있다.
질의(query)는 인자 목록에 변수가 들어갈 수 있다는 점을 제외하면 사실과 같다. 변수는 ''로 시작하는 이름이다.
질의는 데이터베이스에서 질의와 이름이 같고, 인자의 개수가 질의와 같으며, 사실 본문의 이름들이 각 위치에서 질의 본문의 이름들과 일치하는 사실을 찾는다.
''만으로 이루어진 변수는 특별하며 어떤 이름과도 일치한다.
''가 아닌 변수도 어떤 이름과도 일치하지만, 그 변수가 한 질의에 두 번 이상 나타나면 사실의 이름들이 서로 같아야 한다.
다음 질의는
[ fact1(arg1,_,_,_check,_check) ]
와 일치한다.
변수는 그 변수가 나타나는 질의 안에서만 정의된다. 서로 다른 질의에 있는 변수들은 서로 관련이 없다.
입력
입력은 사실 부분과 질의 부분 두 가지로 구성된다. 채점 데이터에는 문법 오류가 없다.
사실 부분은 길이가 최대 자인 여러 줄로 이루어진다. 이 부분은 빈 줄로 끝난다. 각 줄은 공백으로 구분될 수도 있고 아닐 수도 있는 사실들로 구성된다. 사실 부분은 최대 줄이다.
질의 부분은 길이가 최대 자인 여러 줄로 이루어진다. 이 부분은 파일의 끝으로 끝난다. 각 줄이 하나의 질의다. 질의 부분은 최대 줄이다.
출력
각 질의마다 그 질의가 반환하는 사실의 개수를 정수로 출력한다. 앞뒤에 공백이 없어야 하고 불필요한 앞의 0도 없어야 한다. 일치하는 사실이 데이터베이스에 여러 번 나타나면 나타난 횟수만큼 센다.