FastPrepBuildable Robots from Available Part Types

Buildable Robots from Available Part Types

Atlassian logoAtlassian● EasyFULLTIMEPHONE SCREEN
Learn

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 1 through 30 ASCII letters or digits, contain no underscores, and are case-sensitive.
  • An empty requirements list returns an empty result.

More Atlassian problems

See Atlassian hiring insights
public String[] buildableRobots(String[] requirements, String[] available) {
    // Write your code here.
    return new String[0];
}
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"]
expected["Optimus"]
Checking account…