Quick Overview

This question evaluates file parsing, matrix indexing with a specified coordinate origin, handling multiple indexed blocks, and string assembly into an ordered password, testing competencies in file I/O, coordinate transformations, and robust input handling.

Parse password from indexed matrix file

Company: Instacart

Role: Software Engineer

Category: Coding & Algorithms

Difficulty: medium

Interview Round: Onsite

##### Question Given a filepath to a text file containing one index line [x, y] followed by a matrix of characters (origin at lower-left (0, 0)), return the character at coordinate (x,y). Extend to multiple (index, matrix) blocks in the same file: for each block read the character and prepend it to a password string using its index order, then return the password. If the file contains several passwords, stop after constructing the first complete password and return it.

Quick Answer: This question evaluates file parsing, matrix indexing with a specified coordinate origin, handling multiple indexed blocks, and string assembly into an ordered password, testing competencies in file I/O, coordinate transformations, and robust input handling.

You are given a string content that encodes one or more passwords. Each password consists of one or more blocks. A block has an index line followed by a character matrix: the index line is of the form [x,y] (0-based, optional spaces allowed), and it is followed by one or more lines of equal-length characters forming the matrix. A blank line terminates the matrix. Coordinates use origin at the lower-left corner of the matrix: x increases to the right, y increases upward. For each block in the first password group, read the character at (x,y) and prepend it to an accumulating password string in the order blocks appear. Password groups are separated by a line containing exactly '---'. Parse only the first password group (up to '---' or EOF) and return the resulting password string.

Constraints

  • Input is well-formed per the format.
  • Index lines match: [x,y] with 0-based non-negative integers and optional spaces.
  • Each block's matrix has 1 to 1000 rows; all rows have the same length (1 to 1000).
  • 0 <= x < number_of_columns, 0 <= y < number_of_rows for each block.
  • Blocks within a password are separated by at least one empty line after each matrix.
  • Passwords are separated by a line that is exactly '---'. Only the first password group must be processed.
  • Total characters across the first password group <= 200,000.

Examples

Input: [1,2] abcd efgh ijkl [0,0] XYZ PQR --- [0,1] ab cd

Expected Output: Pb

Explanation: First group has two blocks. Block [1,2] over abcd/efgh/ijkl (origin lower-left, y up) -> top row column 1 -> 'b'; block [0,0] over XYZ/PQR -> bottom-left -> 'P'. Prepend in block-encounter order: start 'b', then prepend 'P' -> 'Pb'. The '---' group and everything after it is ignored.

Input: [0,0] A [2,1] 012 345

Expected Output: 2A

Explanation: Block [0,0] over single-cell 'A' -> 'A'; block [2,1] over 012/345 -> y=1 is the top row '012', x=2 -> '2'. Prepend -> '2A'. Group ends at EOF (no '---').

Hints

  1. Parse the index line with a regex like ^\[\s*(\d+)\s*,\s*(\d+)\s*\]$.
  2. Remember the origin is at the lower-left: matrix row index = (height - 1 - y).
  3. Collect characters per block in encounter order and prepend; an efficient way is to append and reverse at the end.

Loading coding console...