Sheet layout and what the script reads
Column A holds the question label for each row. Columns B onward hold the answer choices, one per cell. Questions with no label in column A are skipped entirely, so you can leave header rows or spacer rows in the sheet without breaking the build.
The script calls sheet.getDataRange().getValues(), which returns a 2D array of raw cell values. Numbers come back as JavaScript numbers, dates as Date objects, and empty cells as empty strings. Calling String(c).trim() on every cell normalizes all of that before any comparison happens.