Problem Statement
- IF target1 ELSE target2
- RETURN
We want to find all the dead code. A statement is
"dead" if there is no execution path that contains it, where an
execution path must start at the first
statement (statement 0) in the segment and conclude by executing a RETURN statement.
Create a class DeadCode that contains a method deadCount that is given a
Definition
- Class:
- DeadCode
- Method:
- deadCount
- Parameters:
- String[]
- Returns:
- int
- Method signature:
- int deadCount(String[] code)
- (be sure your method is public)
Constraints
- code will contain between 1 and 50 elements inclusive.
- Each element of code will be one of the two forms above.
- Each RETURN statement has no spaces.
- Each IF statement has exactly 3 spaces.
- Each target1 and target2 will be an integer with no extraneous leading zeroes.
- Each target1 and target2 will be between 0 and n-1 inclusive, where n is the number of elements in code.
Examples
{"RETURN", "IF 0 ELSE 1"}
Returns: 1
Execution immediately returns, so statement 1 cannot be reached.
{"IF 1 ELSE 2","IF 1 ELSE 2","RETURN"}
Returns: 0
The sequence 0, 2 and the sequence 0, 1, 1, 2 are examples of legal execution paths. Every statement is in a legal execution path so there is no dead code.
{"IF 1 ELSE 2","RETURN", "IF 3 ELSE 2", "IF 2 ELSE 3"}
Returns: 2
Statements 2 and 3 are dead. No execution path that includes either of them can ever reach a RETURN statement.
{"IF 1 ELSE 2","IF 1 ELSE 1","RETURN","IF 3 ELSE 4","IF 0 ELSE 1"}
Returns: 3
{"IF 1 ELSE 2","IF 1 ELSE 1","RETURN","IF 3 ELSE 4", "IF 0 ELSE 1","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN","RETURN"}
Returns: 46
{"IF 1 ELSE 2","RETURN","IF 5 ELSE 5","IF 2 ELSE 1", "IF 2 ELSE 2","IF 4 ELSE 4"}
Returns: 4
{"IF 1 ELSE 1","IF 2 ELSE 2","IF 3 ELSE 48","IF 4 ELSE 4","IF 5 ELSE 5", "IF 6 ELSE 6","IF 7 ELSE 7","IF 8 ELSE 8","IF 9 ELSE 9","IF 10 ELSE 10", "IF 11 ELSE 11","IF 12 ELSE 12","IF 13 ELSE 13","IF 14 ELSE 14", "IF 15 ELSE 15","IF 16 ELSE 16","IF 17 ELSE 17","IF 18 ELSE 18", "IF 19 ELSE 19","IF 20 ELSE 20","IF 21 ELSE 21","IF 22 ELSE 22", "IF 23 ELSE 23","IF 24 ELSE 24","IF 25 ELSE 25","IF 26 ELSE 26", "IF 27 ELSE 27","IF 28 ELSE 28","IF 29 ELSE 29","IF 30 ELSE 30", "IF 31 ELSE 31","IF 32 ELSE 32","IF 33 ELSE 33","IF 34 ELSE 34", "IF 35 ELSE 35","IF 36 ELSE 36","IF 37 ELSE 37","IF 38 ELSE 38", "IF 39 ELSE 39","IF 40 ELSE 49","IF 41 ELSE 41","IF 42 ELSE 42", "IF 43 ELSE 43","IF 44 ELSE 44","IF 45 ELSE 45","IF 46 ELSE 46", "IF 47 ELSE 47","IF 0 ELSE 0","IF 35 ELSE 35","RETURN"}
Returns: 0
{"IF 1 ELSE 1","IF 2 ELSE 2","IF 3 ELSE 48","IF 4 ELSE 4","IF 5 ELSE 5", "IF 6 ELSE 6","IF 7 ELSE 7","IF 8 ELSE 8","IF 9 ELSE 9","IF 10 ELSE 10", "IF 11 ELSE 11","IF 12 ELSE 12","IF 13 ELSE 13","IF 14 ELSE 14", "IF 15 ELSE 15","IF 16 ELSE 16","IF 17 ELSE 17","IF 18 ELSE 18", "IF 19 ELSE 19","IF 20 ELSE 20","IF 21 ELSE 21","IF 22 ELSE 22", "IF 23 ELSE 23","IF 24 ELSE 24","IF 25 ELSE 25","IF 26 ELSE 26", "IF 27 ELSE 27","IF 28 ELSE 28","IF 29 ELSE 29","IF 30 ELSE 30", "IF 31 ELSE 31","IF 32 ELSE 32","IF 33 ELSE 33","IF 34 ELSE 34", "IF 35 ELSE 35","IF 36 ELSE 36","IF 37 ELSE 37","IF 38 ELSE 38", "IF 39 ELSE 39","IF 40 ELSE 49","IF 41 ELSE 41","IF 42 ELSE 42", "IF 43 ELSE 43","IF 44 ELSE 44","IF 45 ELSE 45","IF 46 ELSE 46", "IF 47 ELSE 47","IF 45 ELSE 46","IF 35 ELSE 35","RETURN"}
Returns: 8
{"IF 1 ELSE 4","RETURN","IF 5 ELSE 5","IF 2 ELSE 1", "IF 2 ELSE 2","IF 4 ELSE 4"}
Returns: 4
{"IF 2 ELSE 4","RETURN","IF 5 ELSE 5","IF 2 ELSE 1", "IF 2 ELSE 2","IF 4 ELSE 4"}
Returns: 6
{"IF 2 ELSE 3","RETURN","IF 5 ELSE 5","IF 2 ELSE 1", "IF 2 ELSE 2","IF 4 ELSE 4"}
Returns: 3
{"IF 3 ELSE 5","IF 1 ELSE 1","RETURN","IF 4 ELSE 1","IF 3 ELSE 0", "IF 1 ELSE 6","IF 2 ELSE 4"}
Returns: 1
{"RETURN"}
Returns: 0
{"IF 0 ELSE 0"}
Returns: 1
{"IF 1 ELSE 2","RETURN","RETURN"}
Returns: 0
{"IF 5 ELSE 5","IF 6 ELSE 6","IF 1 ELSE 1","IF 2 ELSE 2","IF 3 ELSE 3","IF 4 ELSE 4","RETURN"}
Returns: 0
{"IF 48 ELSE 48","IF 49 ELSE 2","IF 1 ELSE 1","IF 2 ELSE 2","IF 3 ELSE 3","IF 4 ELSE 4","IF 5 ELSE 5","IF 6 ELSE 6","IF 7 ELSE 7","IF 8 ELSE 8","IF 9 ELSE 9","IF 10 ELSE 10","IF 11 ELSE 11","IF 12 ELSE 12","IF 13 ELSE 13","IF 14 ELSE 14","IF 15 ELSE 15","IF 16 ELSE 16","IF 17 ELSE 17","IF 18 ELSE 18","IF 19 ELSE 19","IF 20 ELSE 20","IF 21 ELSE 21","IF 22 ELSE 22","IF 23 ELSE 23","IF 24 ELSE 24","IF 25 ELSE 25","IF 26 ELSE 26","IF 27 ELSE 27","IF 28 ELSE 28","IF 29 ELSE 29","IF 30 ELSE 30","IF 31 ELSE 31","IF 32 ELSE 32","IF 33 ELSE 33","IF 34 ELSE 34","IF 35 ELSE 35","IF 36 ELSE 36","IF 37 ELSE 37","IF 38 ELSE 38","IF 39 ELSE 39","IF 40 ELSE 40","IF 41 ELSE 41","IF 42 ELSE 42","IF 43 ELSE 43","IF 44 ELSE 44","IF 45 ELSE 45","IF 46 ELSE 46","IF 47 ELSE 47","RETURN"}
Returns: 0
{"IF 48 ELSE 48","IF 49 ELSE 47","IF 1 ELSE 1","IF 2 ELSE 2","IF 3 ELSE 3","IF 4 ELSE 4","IF 5 ELSE 5","IF 6 ELSE 6","IF 7 ELSE 7","IF 8 ELSE 8","IF 9 ELSE 9","IF 10 ELSE 10","IF 11 ELSE 11","IF 12 ELSE 12","IF 13 ELSE 13","IF 14 ELSE 14","IF 15 ELSE 15","IF 16 ELSE 16","IF 17 ELSE 17","IF 18 ELSE 18","IF 19 ELSE 19","IF 20 ELSE 20","IF 21 ELSE 21","IF 22 ELSE 22","IF 23 ELSE 23","IF 24 ELSE 24","IF 25 ELSE 25","IF 26 ELSE 26","IF 27 ELSE 27","IF 28 ELSE 28","IF 29 ELSE 29","IF 30 ELSE 30","IF 31 ELSE 31","IF 32 ELSE 32","IF 33 ELSE 33","IF 34 ELSE 34","IF 35 ELSE 35","IF 36 ELSE 36","IF 37 ELSE 37","IF 38 ELSE 38","IF 39 ELSE 39","IF 40 ELSE 40","IF 41 ELSE 41","IF 42 ELSE 42","IF 43 ELSE 43","IF 44 ELSE 44","IF 45 ELSE 45","IF 46 ELSE 46","IF 47 ELSE 47","RETURN"}
Returns: 0
{ "IF 1 ELSE 2", "RETURN", "IF 3 ELSE 2", "IF 2 ELSE 3" }
Returns: 2
{ "IF 2 ELSE 2", "IF 0 ELSE 0", "RETURN" }
Returns: 1
{ "IF 1 ELSE 2", "RETURN", "IF 3 ELSE 2", "IF 2 ELSE 3", "RETURN", "RETURN", "IF 5 ELSE 8", "IF 8 ELSE 5", "RETURN" }
Returns: 7
{ "IF 1 ELSE 2", "RETURN", "IF 3 ELSE 2", "IF 2 ELSE 3", "RETURN", "IF 2 ELSE 3" }
Returns: 4
{ "IF 0 ELSE 2", "RETURN", "IF 0 ELSE 2" }
Returns: 3
{ "IF 1 ELSE 4", "IF 1 ELSE 2", "RETURN", "IF 4 ELSE 2", "IF 3 ELSE 2" }
Returns: 0
{ "IF 1 ELSE 2", "RETURN", "IF 1 ELSE 2" }
Returns: 0
{ "IF 2 ELSE 1", "RETURN", "IF 3 ELSE 1", "RETURN" }
Returns: 0
{ "IF 0 ELSE 0", "RETURN" }
Returns: 2
{ "IF 1 ELSE 2", "IF 2 ELSE 3", "RETURN", "IF 3 ELSE 2" }
Returns: 0
{ "RETURN", "RETURN", "RETURN", "RETURN", "RETURN" }
Returns: 4
{ "IF 1 ELSE 1", "IF 0 ELSE 0", "RETURN", "RETURN" }
Returns: 4
{ "IF 1 ELSE 2", "IF 2 ELSE 3", "IF 3 ELSE 4", "IF 4 ELSE 5", "IF 5 ELSE 6", "IF 6 ELSE 7", "IF 7 ELSE 8", "IF 8 ELSE 9", "IF 9 ELSE 10", "IF 10 ELSE 11", "IF 11 ELSE 12", "IF 12 ELSE 13", "IF 13 ELSE 14", "IF 14 ELSE 15", "IF 15 ELSE 16", "IF 16 ELSE 17", "IF 17 ELSE 18", "IF 18 ELSE 19", "IF 19 ELSE 20", "IF 20 ELSE 21", "IF 21 ELSE 22", "IF 22 ELSE 23", "IF 23 ELSE 24", "IF 24 ELSE 25", "IF 25 ELSE 26", "IF 26 ELSE 27", "IF 27 ELSE 28", "IF 28 ELSE 29", "IF 29 ELSE 30", "IF 30 ELSE 31", "IF 31 ELSE 33", "IF 33 ELSE 34", "RETURN", "IF 34 ELSE 35", "IF 35 ELSE 36", "IF 36 ELSE 37", "IF 37 ELSE 0", "RETURN", "RETURN" }
Returns: 2
{ "IF 2 ELSE 1", "IF 2 ELSE 3", "RETURN", "RETURN" }
Returns: 0