Pass functions and analyze basic data structures
Company: eBay
Role: Software Engineer
Category: Coding & Algorithms
Difficulty: medium
Interview Round: Onsite
Implement a function applyTwice(f, x) that accepts a function f and a value x and returns f(f(x)) in your preferred language. Demonstrate how to pass functions (or delegates) as parameters and discuss closures and side effects. Then analyze arrays, linked lists, stacks, and queues: give time/space complexities for insert, delete, search, and iteration, and explain when you would choose each structure.
Quick Answer: This question evaluates proficiency with higher-order functions, passing functions or delegates, closures, and reasoning about side effects, alongside the ability to analyze fundamental data structures and their performance characteristics.
You are given a list of operations ops describing a unary integer function f and an integer x. Each operation is applied in order to transform the input. Supported operations are: "add v" (add integer v), "mul v" (multiply by integer v), "pow e" (raise to the non-negative integer exponent e), "neg" (negate), and "abs" (absolute value). If ops is empty, f is the identity function. Implement apply_twice(ops, x) to return f(f(x)).
Constraints
- 0 <= len(ops) <= 100
- Each op is one of: 'add v', 'mul v', 'pow e', 'neg', 'abs'
- v is a signed 64-bit integer; e is an integer in [0, 9]
- x is a signed 64-bit integer
- Apply operations left-to-right; 'pow e' uses integer exponentiation
- If ops is empty, return x (identity)
Hints
- Parse each operation by splitting on whitespace; handle negative constants (e.g., 'add -5').
- Apply operations sequentially to build f(x); then apply the same sequence again to f(x).
- Consider creating a helper that applies ops once to a value.
- If ops is empty, the identity function is applied twice, so return x.
- Treat operations as pure (no side effects) so applying twice is deterministic.