TopCoder problem "WordFindPuzzle" used in TCHS SRM 57 (Division I Level One)



Problem Statement

    WordFind is one of the simplest and funnest puzzles to play by oneself. It is played on a rectangular board where each cell contains a lowercase letter ('a'-'z').

A word can be found horizontally on the board if there is a path of consecutive cells in the same row of the board that spells out the word either left-to-right or right-to-left. Similarly, a word can be found vertically on the board if there is a path of consecutive cells in the same column that spells out the word either top-to-bottom or bottom-to-top. See examples 0 and 1 for clarification.

A word can be perfectly found on the board if it can be found both vertically and horizontally. You are given a String[] board representing the board, and a String[] words containing a list of words. Return the number of words in the given list that can be perfectly found on the board.
 

Definition

    
Class:WordFindPuzzle
Method:solveWordFindPuzzle
Parameters:String[], String[]
Returns:int
Method signature:int solveWordFindPuzzle(String[] words, String[] board)
(be sure your method is public)
    
 

Constraints

-words will contain between 0 and 30 elements, inclusive.
-Each element of words will contain between 1 and 30 characters, inclusive.
-All elements of words will be distinct.
-board will contain between 1 and 30 elements, inclusive.
-Each element of board will contain between 1 and 30 characters, inclusive.
-All elements of board will be of the same length.
-All elements of words will contain only lowercase letters ('a'-'z').
-All elements of board will contain only lowercase letters ('a'-'z').
 

Examples

0)
    
{"ab", "ba"}
{"ab",
 "ba"}
Returns: 2
1)
    
{"jay"}
{"yaj",
 "tea",
 "hey"}
Returns: 1
2)
    
{"aaa", "aab", "aac"}
{"aaa",
 "aba",
 "caa"}
Returns: 2
"aaa" and "aac" can be perfectly found on this board.
3)
    
{"park", "kim", "lee", "choi"}
{"lxamal",
 "alkime",
 "parkpe",
 "lyaeel",
 "aypepl"}
Returns: 3
Four common Korean last names are given as words. 3 most common last names, namely "kim", "lee", and "park", can be found on the board.
4)
    
{"ava", "abigail", "cailyn", "madeline", "isabella",
 "emma", "caitlyn", "olivia", "chloe", "brianna"}
{"vase",
 "amme",
 "vmal",
 "aeve"}
Returns: 1
10 female names are given as words. "emma" is the only one perfectly found on the given board.
5)
    
{"alex", "bob", "chris", "david",
 "edward", "frank", "gabriel"}
{"gabrielxl",
 "hfodavide",
 "arbibobri",
 "daavxelar",
 "enlalexwb",
 "nkedwarda",
 "cbxyzlaeg"}
Returns: 5
7 male names are given this time. You can perfectly find all but "chris" and "frank" on the board.

Problem url:

http://www.topcoder.com/stat?c=problem_statement&pm=9821

Problem stats url:

http://www.topcoder.com/tc?module=ProblemDetail&rd=13526&pm=9821

Writer:

ltdtl

Testers:

PabloGilberto , Olexiy , ivan_metelsky

Problem categories:

String Manipulation, String Parsing