Generate Attribute Combinations

Quick Overview

Explain Cartesian-product generation for attribute choices while preserving mixed value types and making ordering, duplicates, and empty cases explicit.

Generate Attribute Combinations

Company: Pinterest

Role: Software Engineer

Category: Software Engineering Fundamentals

Difficulty: medium

Interview Round: Technical Screen

# Generate Attribute Combinations The source asks you to generate every combination from an attribute map and gives `attribute0: [0, 1, 2]` and `attribute1: ["a", "b"]`. Notice that the preserved values have different types. Explain a Cartesian-product algorithm that retains each original value and discuss the input-order, empty-input, duplicate-value, and output-order rules that must be clarified before implementation. ### Constraints & Assumptions - Integer values must remain integers and string values must remain strings. - The source demonstrates two attributes but does not define a general cross-language value union or canonical map order. - For the worked example only, process `attribute0` before `attribute1` and preserve each listed value order. - Behavior for an empty attribute map or an attribute with no values must be agreed rather than inferred. ### Clarifying Questions to Ask - Which value types are supported, and must nested values be copied or referenced? - Does attribute iteration follow insertion order, sorted names, or an explicit key list? - Should duplicate input values produce duplicate output maps? - What should empty input and an empty value list return? ```hint Extend partial assignments Start with one empty partial map. For each attribute in the confirmed key order, copy every current partial assignment once for each of that attribute's values. ``` ### What a Strong Answer Covers - A complete Cartesian-product algorithm that preserves value types - Explicit ordering and duplicate semantics rather than hidden map-library behavior - The source example with numeric values left numeric - Empty and zero-choice cases, output-size limits, and complexity - Why a heterogeneous value contract needs a supported cross-language sum type before console generation ### Follow-up Questions 1. How would you stream combinations when materializing the entire result is too large? 2. How can a caller request a canonical order without relying on map insertion order? 3. What copying policy is needed if values can be mutable objects?

Overview: Explain Cartesian-product generation for attribute choices while preserving mixed value types and making ordering, duplicates, and empty cases explicit.

|Home/Software Engineering Fundamentals/Pinterest
Pinterest logo
Pinterest
Mar 28, 2026
mediumSoftware EngineerTechnical ScreenSoftware Engineering Fundamentals
1
0

Generate Attribute Combinations

The source asks you to generate every combination from an attribute map and gives attribute0: [0, 1, 2] and attribute1: ["a", "b"]. Notice that the preserved values have different types. Explain a Cartesian-product algorithm that retains each original value and discuss the input-order, empty-input, duplicate-value, and output-order rules that must be clarified before implementation.

Constraints & Assumptions

  • Integer values must remain integers and string values must remain strings.
  • The source demonstrates two attributes but does not define a general cross-language value union or canonical map order.
  • For the worked example only, process attribute0 before attribute1 and preserve each listed value order.
  • Behavior for an empty attribute map or an attribute with no values must be agreed rather than inferred.

Clarifying Questions to Ask Guidance

  • Which value types are supported, and must nested values be copied or referenced?
  • Does attribute iteration follow insertion order, sorted names, or an explicit key list?
  • Should duplicate input values produce duplicate output maps?
  • What should empty input and an empty value list return?

What a Strong Answer Covers Guidance

  • A complete Cartesian-product algorithm that preserves value types
  • Explicit ordering and duplicate semantics rather than hidden map-library behavior
  • The source example with numeric values left numeric
  • Empty and zero-choice cases, output-size limits, and complexity
  • Why a heterogeneous value contract needs a supported cross-language sum type before console generation

Follow-up Questions Guidance

  1. How would you stream combinations when materializing the entire result is too large?
  2. How can a caller request a canonical order without relying on map insertion order?
  3. What copying policy is needed if values can be mutable objects?
Loading comments...