아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

LogDB

시간 제한1초메모리 제한1024 MB

요약
괄호로 묶인 인자 목록을 가진 사실들을 파싱한 뒤, 인자에 변수가 들어갈 수 있는 질의마다 일치하는 사실의 개수를 센다.
난이도

보통10점 중 6점

유형
문자열, 해시맵, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

LogDB 데이터베이스에는 사실(fact)이 가득 차 있다. 사실은 이름과, 괄호로 묶인 이름 목록으로 이루어진 본문으로 구성된다. 함수 호출과 비슷하다.

[ fact1(arg1, arg2 ,arg_3,4,4) thing(p1,arg2,p3). ]

fact1fact1은 사실의 이름이고, 본문에 있는 이름 목록은 그 사실의 인자다. thingthing은 또 다른 사실이다.

목록의 이름들은 쉼표와 선택적인 공백으로 구분된다. 목록에는 이름이 적어도 하나 있다.

이름은 영숫자(a-z, A-Z, 0-9)와 '_\_'로 구성된다. 단, 사실의 이름과 본문의 이름은 '_\_'로 시작할 수 없다.

이름, 괄호, 쉼표 앞뒤에는 공백이 올 수 있다. 그러나 사실이나 질의는 줄을 넘어 나뉠 수 없다.

인자의 개수가 다른 사실은 서로 다른 사실이다.

같은 사실이 데이터베이스에 여러 번 나타날 수 있다.

질의(query)는 인자 목록에 변수가 들어갈 수 있다는 점을 제외하면 사실과 같다. 변수는 '_\_'로 시작하는 이름이다.

질의는 데이터베이스에서 질의와 이름이 같고, 인자의 개수가 질의와 같으며, 사실 본문의 이름들이 각 위치에서 질의 본문의 이름들과 일치하는 사실을 찾는다.

'_\_'만으로 이루어진 변수는 특별하며 어떤 이름과도 일치한다.

'_\_'가 아닌 변수도 어떤 이름과도 일치하지만, 그 변수가 한 질의에 두 번 이상 나타나면 사실의 이름들이 서로 같아야 한다.

다음 질의는

[ fact1(arg1,_,_,_check,_check) ]

fact1(arg1,arg2,arg_3,4,4)fact1(arg1, arg2 ,arg\_3,4,4)와 일치한다.

변수는 그 변수가 나타나는 질의 안에서만 정의된다. 서로 다른 질의에 있는 변수들은 서로 관련이 없다.

입력

입력은 사실 부분과 질의 부분 두 가지로 구성된다. 채점 데이터에는 문법 오류가 없다.

사실 부분은 길이가 최대 200200자인 여러 줄로 이루어진다. 이 부분은 빈 줄로 끝난다. 각 줄은 공백으로 구분될 수도 있고 아닐 수도 있는 사실들로 구성된다. 사실 부분은 최대 200200줄이다.

질의 부분은 길이가 최대 200200자인 여러 줄로 이루어진다. 이 부분은 파일의 끝으로 끝난다. 각 줄이 하나의 질의다. 질의 부분은 최대 200200줄이다.

출력

각 질의마다 그 질의가 반환하는 사실의 개수를 정수로 출력한다. 앞뒤에 공백이 없어야 하고 불필요한 앞의 0도 없어야 한다. 일치하는 사실이 데이터베이스에 여러 번 나타나면 나타난 횟수만큼 센다.

예제1

  1. 예제 1

    입력
    test(arg1, arg2,arg3) test(1,2,3,not4)5(five) five_seven(john_smith,10_17_57)
    foo(1,2,3,4) foo(5,6,7,8) foo(1,2,7,8)arc(80) foo(abc,xyz)
    bar(1,2) bar (7,8) zoom(8,7)
    arc(80) nofoo(alpha,d1,d2,d1,d4,d1)
    foo(bar,spam) foo(more,less)
    
    test(_,_,_,_)
    arc(80)
      foo(bar,_)
      foo(_,spam)
      foo(_,less)
      nofoo(_,_p1,_,_p1,_,_p1)
      foo(bar,less)
    foo(_,_,_,_)
    foo(_,_,_30,_40) 
    foo(_,_,_30,_40)
    foo(_,_,_30,_40)
    foo(_x,_,_30,_40)
    foo(_,_,_30,_40)
    
    예상 출력
    1
    2
    1
    1
    1
    1
    0
    3
    3
    3
    3
    3
    3