Buildable Robots from Available Part Types
Problem statement
You have a list requirements of strings in the form Robot_Part, and a list available of part types. Each requirement means that the named robot needs the named part type.
Return the names of all robots whose required part types are all available, in lexicographic order. Only robots mentioned in requirements are considered.
For this exercise, assume availability describes reusable part types rather than quantities. Duplicate requirements or availability entries do not change the answer, and building one robot does not consume parts needed by another.
The reported source example lists Rosie_claw without making claw available, yet includes Rosie in its output. This exercise resolves that discrepancy by following the stated rule: Rosie is not buildable until claw is available.
Function
buildableRobots(requirements: String[], available: String[]) → String[]Examples
Example 1
requirements = ["Rosie_claw","Rosie_sensors","Dustie_case","Optimus_sensors","Rust_sensors","Rosie_case","Rust_case","Optimus_speaker","Rosie_wheels","Dustie_case","Dustie_arms","Rust_claw","Dustie_case","Dustie_speaker","Optimus_case","Optimus_wheels","Optimus_wheels","Rust_legs","Optimus_sensors"]available = ["sensors","case","speaker","wheels"]return = ["Optimus"]Optimus has every required part. Rosie lacks claw, Dustie lacks arms, and Rust lacks claw and legs. This corrects the conflicting reported output using the stated rule.
Example 2
requirements = ["Rosie_claw","Rosie_sensors","Dustie_case","Optimus_sensors","Rust_sensors","Rosie_case","Rust_case","Optimus_speaker","Rosie_wheels","Dustie_case","Dustie_arms","Rust_claw","Dustie_case","Dustie_speaker","Optimus_case","Optimus_wheels","Optimus_wheels","Rust_legs","Optimus_sensors"]available = ["sensors","case","speaker","wheels","claw"]return = ["Optimus","Rosie"]Adding claw makes Rosie buildable; the other missing parts still block Dustie and Rust.
Example 3
requirements = ["A_case","B_case","A_case"]available = ["case"]return = ["A","B"]Both robots need only case. Repeated requirements do not consume extra parts.
Constraints
- For this exercise, assume
0 <= requirements.length, available.length <= 500. - Each requirement has exactly one underscore separating a nonempty robot name from a nonempty part name.
- For this exercise, assume names have
1through30ASCII letters or digits, contain no underscores, and are case-sensitive. - An empty requirements list returns an empty result.