Section author: ACF (webmaster@acf-quizbowl.com)

qams²

Important

This documentation was sourced from the qams² master spreadsheet README. See that document for the most up-to-date documentation.

qams² is a question production tool based around a template Google Sheets spreadsheet.

The spreadsheet has several subsheets and scripts that expedite the question production process, namely:

Important

If you have any issues with the sheet, please contact one of the following maintainers of the sheet:


Getting Started

Tip

All cells colored beige/yellow are intended for set writers to edit. Apart from the cells in the Answers sheet, in general, cells colored white shouldn’t be edited.

Create a copy of the qams² template master sheet.

How to Use Answers / Progress Tracking [1]

  1. Fill out your name and initials in the Progress sheet.

    • The script will find and list new initials from the Answers sheet, but it does not know your name.

    • If multiple people on the set have the same initials, each writer should choose unique initials. (E.g., Dan Smith and Donna Scott could respectively choose <DS> and <DSC>.)

Claiming, Writing, and Editing Questions

  1. Write a question’s answerline(s) in a corresponding cell in the Answers sheet.

    • The cell’s row indicates its category, and its column header indicates which packet it’s in. The script automatically does totals and coloring (indicating question state, e.g. claimed, written, edited).

  2. Writer tags:

    • Do NOT use the ✔ or ✘; this is done by the script

    • Do NOT use square brackets to notate bonus difficulty; parentheses are acceptable, e.g. (e), (m), and (h)

    • To claim an answerline, add square brackets with your initials to a cell, e.g. Answerline [CM]

    • To mark a question as written, use angle brackets, e.g. Answerline <CM>

    • To mark a question as edited, use pipe brackets, e.g. Answerline <CM>|CV| indicates a question written by an author with the initials CM and edited by an author with the initials CV Multiple tags are allowed (such as in the <CM>|CV| example). Bolding a cell marks a question as finished; underlining a cell marks a question for rewriting.

  3. Tracking question totals: run qams²Completion [1] to automatically update backgrounds in the Answers sheet based on question state (e.g. written, claimed, edited). This script adds ✔ (heavy checkmark) to finished questions, adds ✘ (heavy ballot X) to questions that need to be rewritten, and updates the totals in the Progress sheet.

Difficulty Meter and Packetizing

  1. Difficulty meter (1-4): Prepend {1} thru {4} to an answerline to have it counted in the difficulty meter (e.g. {2} Edith Wharton).

    • How (or whether) you use this is determined by the head editor; discuss with them what makes an answerline a {1} or {2}, etc.

    • The difficulty meter counts down a column (the packet) and across a row (category), presenting information as #{1} / #{2} / #{3} / #{4}.

    • For example, a column reading 0 / 2 / 3 / 1 indicates the corresponding packet has 0 answerlines with a difficulty of {1}, 2 answerlines with a difficulty of {2}, 3 answerlines with a difficulty of {3}, and 1 answerline with a difficulty of {4}.

    • See the difficulty meter for VCU Open 2015 for reference.

  2. For editors and packetizers only: The unpacketized question columns are intended for packet submission tournaments, to allow editor’s questions to be counted before you decide which packets to place them in.

    • They can also function as a generic holding pen to track progress independent of packetizing.

    • A question should only be in one place, or the question will be counted twice.

    • If you move a question that is unpacketized to a packet, please clear the original cell.

Note

Cells are noted with supplementary information. If you add more rows to accommodate more writers, ensure the named ranges on the Progress sheet have expanded to match.

Note

If you need to append more rows to the Answers table, e.g. to accommodate a 22/22 distribution, go to DataNamed ranges and modify the end of the answers and subcategoryCompletion ranges accordingly.

How to Use Subcategory Completion

  1. Column A (hidden) in the Answers sheet totals the finished questions by row (subcategory) while Column B (hidden) uses the number of packets in the Progress sheet to determine the number of questions per subcategory. You may need to adjust this for tiebreakers.

  2. Columns C and D display subcategory completion data as a percentage or unreduced fraction with conditional formatting. You can hide one or both if you prefer a certain presentation.

How to Use Timeline (optional)

  1. The Progress sheet includes a section to set deadlines, whether they be a set of intermediate deadlines or a single, final deadline. Anything with a yellow cell can be edited by head editors, e.g. to adjust question quotas or deadlines.

  2. The “Packets Due” column is used to automatically calculate the “Questions Due” column, but it can be deleted and numbers manually placed in “Questions Due” with no ill effects.

  3. The next deadline is automatically calculated in the Progress sheet, and determines how many questions are due (“Deadline Quota”) and how many questions need to be written per day.

  4. The number of days left includes the deadline day as a viable writing day.

    • Adjust the formula for “Days Remaining” if this is not how your deadlines will work.

How to Track Submissions [1]

  1. In the “Submissions” sheet, locate the first two rows. The first row will contain links to each submitted packet, and the second row will be populated with the packet name.

  2. Paste a link to the submitted packet in the first row of one of the available columns. Each linked packet MUST be a Google Doc, NOT a raw DOCX file.

  3. Run the Submission Tracker script in the header.

  4. The cells below the header rows will automatically be populated with the type and answerline(s) for each question in the submitted packet.

  5. Editors can now use the dropdown menu in the cell to the left of each answerline cell to indicate their preference for the question:

    • (Y) for definite usage

    • (M) for potential usage

    • (N) for rejection

    • (C) for usage with conversion of type (e.g. tossup-to-bonus or vice versa)

  6. Running the Submission Tracker script again will automatically color the cell based on the marked preference.

  7. Repeat this process for any new packets. If you run out of space, just duplicate the last two columns to extend the sheet.

A demo has been provided using a packet from 2025 ACF Regionals. You can delete the two columns for this packet once you are familiar with the process.

Warning

Do NOT modify the blacked-out cells in the first two rows in every other column.

Warning

The script will attempt to fix poor formatting in the submitted packet (e.g. bad spacing, missing tags, misspelled ANSWER:, etc.), so the linked packets must have their editing permissions turned on (i.e. the user running the script should be able to edit that document).

Important

If the sheet isn’t updating to add/modify/detect submitted questions, try turning the “Forcing Switch” in the top left hand corner on and re-run. Turn it off again afterwards.

Note

If not all questions in a packet are showing up, the missing questions are probably improperly formatted. To detect issues, turn on display of non-printing characters in the packet.

Note

Common errors are using soft returns instead of hard returns, ANSWER: tags on the same line as the question body, and misspelled/missing tags.

How to Use Character Counts [1]

  1. In the Character Counts spreadsheet, set the mean and maximum character count limits (i.e. length caps) for bonuses and tossups in cells B29-B32.

  2. Paste links to the packets in cells underneath the “Packet URLs” cell in Column A, in rows 35 and below.

    • The links for 2025 ACF Regionals packets are provided for example.

  3. Run the Character Counter script in the header.

    • Two tables will automatically be generated: one category-wide table and one question-by-question table.

    • The columns in both cells are formatted to be red if the length limits are violated and green if not.

    • Category tags are expected to be of the format <XY, Category>, NOT <Category, XY> or <XY - Category>.

Note

For a full set of around 15 packets, the script may take as long as 20 seconds to run to completion. If it goes longer than that, something’s wrong.

Note

Note that the length reported by the script may include the length of uncommon meta-text like “The answer to this question is …” or “You may provide …”.

How to Use Packet Templates

Running qams²Packet templates will generate packet templates that can be pasted into a word processor from row 1 of the Packet Templates sheet.

  1. Fill out the set name in cell E1 of the Answers sheet.

  2. Column A ( 1/1 SLOT ) pulls categories from the Answers sheet (Column E). You may need to adjust the range in Cell A3 if you delete or add rows. Exclude tiebreakers.

  3. Column G ( Packet) populates the number of packets specified in the Progress sheet (Cell N1).

  4. Update the IDs and codes in Columns B–E (refer to notes for C2 and E2)

  5. qams²Packet templates will generate packet templates based on the constraints from Columns B–E.

  6. Cell I1 and the rest of Row 1 will populate with packet templates you can paste into a word processor. Be sure to set the font correctly before pasting.

How to Use Feng Shui

  1. Packetizing constraints requiring manual attention can be filled out here.

  2. Fill out Columns C and E with the answerlines, and use the dropdown in Column D to specify the relationship between the answerlines.

  3. Fill out Column B when the constraint is resolved.

Automation of Utilities

Once authorized, the spreadsheets can auto-update if edits have been made. Repeat this process for each script you want to automate:

  • Go to ExtensionsApps Script.

  • Click the alarm clock on the left and choose “Add Trigger” at bottom right.

  • Fill out the dialog as follows:

    • Event source = Time-driven

    • Type of time based trigger = Minutes timer

    • For Answers / Progress tracking:

      • Function to run = doUpdate

      • Minute interval = 15 minutes

    • For submission tracking:

      • Function to run = trackSubmissions

      • Minute interval = 12 hours

    • For character counting:

      • Function to run = countCharacters

      • Day interval = 2-3 AM

Credits

The redesign is based on changes in set management and production since approximately 2019. The ever-growing number of writers and editors on a set requires a different approach to question state and set tracking. qams² sources many concepts from the answer sheets for 2021 ARCADIA, 2022 WORKSHOP, 2022 ACF Nationals, 2023 ACF Nationals, and 2025 ACF Regionals.

The implementation of unpacketized questions and the set timeline is sourced from JinAh Kim’s work for 2020 ACF Regionals.

The implementations of the Submission Tracker and Character Counter utilities are sourced from Ani Perumalla’s work on 2025 ACF Regionals, which in turn built on several utilities that Jordan Brownstein wrote for 2024 Chicago Open. Cody Voight created qams². Caroline Mao contributed to the early iterations of the design and documentation.