VLSI DV Interview Puzzles · All levels

Locator Methods Return New Queues

What are `evens`, `idx`, and final `q` after these locator operations?

Puzzle

Difficulty: Hard · Puzzle 6 of 6 · Topic: Queue and Array Puzzles

What are `evens`, `idx`, and final `q` after these locator operations?

Code

systemverilog
module p6;
  int q[$] = '{1,2,3,4,5,6};
  int evens[$];
  int idx[$];
  initial begin
    evens = q.find with (item % 2 == 0);
    idx = q.find_index with (item > 3);
    q = q.find with (item < 4);
    $display("evens=%p idx=%p q=%p", evens, idx, q);
  end
endmodule

Hint

`find` returns matching values; `find_index` returns matching indices; both produce new queues.

Step-by-step solution

diagram
1) `find` over original q picks values 2,4,6 into `evens`.
2) `find_index` over original q for `item > 3` yields indices 3,4,5.
3) Final assignment `q = q.find(item < 4)` replaces q with `{1,2,3}`.

Answer

Answer: evens=' {2,4,6}, idx=' {3,4,5}, q=' {1,2,3}

Why candidates get it wrong

A common miss is assuming locator methods mutate the source queue in place.

Interviewer follow-up

How do results differ if you call `find_index` after reassigning `q`?

Related topics