Google Code Jam '16 World Finals Problem A - Integeregex
View as PDFIn this problem, a valid regular expression is one of the following. In the following descriptions, , 
, etc. denote (not necessarily different) valid regular expressions.
- A decimal digit: that is, one of 
.
 - Concatenation: 
.
 - Disjunction: 
, for at least two expressions. Note that the outer parentheses are required.
 - Repetition: 
. Note that the outer parentheses are required.
 
For example, 7, 23, (7)*, (45)*, (1|2|3), ((2)*|3), (1|2|3), and ((0|1))* are valid expressions. (7), 4|5, 4*, (1|), and (0|1)* are not.
We say that an expression  matches a string of digits 
 if and only if at least one of the following is true:
.
and there exist
and
such that
and
matches
.
and at least one of the
matches
.
and there exist
for some non-negative integer
such that
and
matches each of the
.
In particular, note that  matches the empty string.
For example, the expression 
((1|2))*3 matches 3, 13, 123, and 2221123, among other strings. However, it does not match 1234, 3123, 12, or 33, among other strings.
Given a valid regular expression , for how many integers between 
 and 
, inclusive, does 
 match the integer's base 
 representation (with no leading zeroes)?
Input Specification
The first line of the input gives the number of test cases, . 
 test cases follow; each consists of two lines. The first line has two positive integers 
 and 
: the inclusive limits of the integer range we are interested in. The second has a string 
 consisting only of characters in the set 
0123456789()|*, which is guaranteed to be a valid regular expression as described in the statement above.
Output Specification
For each test case, output one line containing the number of integers in the inclusive range  that the regular expression 
 matches.
Limits
Sample Input
8
1 1000
(0)*1(0)*
379009 379009
379009
1 10000
(12)*(34)*
4 5
45
1 100
((0|1))*
1 50
(01|23|45|67|23)
1 1000000000000000000
((0|1|2|3|4|5|6|7|8|9))*
1 1000
1(56|(((7|8))*9)*)
Sample Output
4
1
5
0
4
2
1000000000000000000
6
Comments