diff --git a/CONTENT_SCHEMA.md b/CONTENT_SCHEMA.md index ffc01bb..47e74b3 100644 --- a/CONTENT_SCHEMA.md +++ b/CONTENT_SCHEMA.md @@ -95,9 +95,37 @@ Put statement (1) and statement (2) in the `## Question` body. ### Multi-part answers (two-part, table analysis, etc.) For types with more than one selectable answer (e.g. `two-part-analysis`, `table-analysis`), -set `answer` to a compact string describing each part, and lay the options out clearly in the -body. Example: `answer: "Part1=C; Part2=A"` or `answer: "Row1=Yes; Row2=No; Row3=Yes"`. -Keep the body unambiguous about what each part refers to. +add a `parts` map that lists the options for each part, and set `answer` to a compact +`Key=Value` string (parts separated by `;`). The study site renders one selector per part and +grades them together — the question is correct only if **every** part matches. + +```yaml +parts: + Nuts: "$1|$2|$3|$4|$5|$6" + Juice: "$1|$2|$3|$4|$5|$6" +answer: "Nuts=$2; Juice=$3" +``` + +```yaml +parts: + Claim1: "Yes|No" + Claim2: "Yes|No" + Claim3: "Yes|No" +answer: "Claim1=No; Claim2=Yes; Claim3=Yes" +``` + +Rules for `parts`: + +- **Part keys** (the labels shown above each selector) must be alphanumeric — use `Nuts`, + `Claim1`, `Row1`, etc. (letters, digits, `-`, `_`; **no spaces**). Number claims in the body + (e.g. "**Claim 1.** …") so the short key stays clear. +- **Options** for each part are a single string of choices separated by `|`. +- **`answer`** matches part keys to the correct option value: `Key=Value; Key2=Value2`. Matching is + case-insensitive and trimmed, so the answer values must be spelled the same as the options. +- Lay the scenario, table, and what each part refers to out clearly in the `## Question` body. + +If you omit `parts`, you can still fall back to a plain compact `answer` string (e.g. +`answer: "Part1=C; Part2=A"`) for a browse-only question, but it will not be gradeable in Practice. --- diff --git a/content/lessons/data-insights/data-insights-table-analysis-ratios-thresholds.md b/content/lessons/data-insights/data-insights-table-analysis-ratios-thresholds.md new file mode 100644 index 0000000..5982fe9 --- /dev/null +++ b/content/lessons/data-insights/data-insights-table-analysis-ratios-thresholds.md @@ -0,0 +1,64 @@ +--- +id: data-insights-table-analysis-ratios-thresholds +section: data-insights +topic: table-analysis +subtopic: ratios-thresholds +title: "Table Analysis: Ratios & Thresholds" +tags: [table-analysis, percent-change, ratios, thresholds] +author: openmat +reviewers: [] +status: in-review +original: true +license: CC-BY-SA-4.0 +--- + +## Overview + +Table Analysis presents a sortable table and a set of **Yes/No** (or True/False) statements you +must judge one at a time. Each row of statements is graded independently, so a single question is +really several mini-questions. The skill is reading the table precisely and testing each claim with +the least arithmetic possible. + +## Core concepts + +**Read the claim's quantifier first.** "Every," "at least one," "the greatest," "more than" — the +quantifier tells you what evidence settles the claim. An "every"/"all" claim is disproved by **one** +counterexample; a "there exists" claim is proved by one supporting case. Find that one case fast. + +**Percent change is measured against the original.** For a jump from an old value to a new value, + +\[\text{percent change} = \frac{\text{new} - \text{old}}{\text{old}} \times 100\%.\] + +Always divide by the **old** value, not the new one — the most common table-analysis error. + +**Turn a threshold into a target number.** Instead of computing an exact percent, convert "more than +40% above 90" into a concrete bar: 40% of 90 is 36, so the target is \(90 + 36 = 126\). Now you just +compare: is the new value above 126? This is faster and less error-prone than dividing. + +**Only compute what the claim needs.** You rarely need every cell. For "greatest two-quarter total," +sum each store's two columns and compare — ignore everything else. + +## Worked examples + +Using a table with Q1/Q2 units — Alpha (120, 150), Beta (200, 180), Gamma (90, 140): + +**"Every store grew in Q2." → No.** Beta fell from 200 to 180. One counterexample settles it; you +needn't check the others once you find it. + +**"Beta had the greatest two-quarter total." → Yes.** Totals: 270, 380, 230. Beta's 380 wins. + +**"Gamma rose more than 40% from Q1 to Q2." → Yes.** Threshold: 40% of 90 = 36, target 126. Since +\(140 > 126\), the increase clears 40%. (Exact: \(50/90 \approx 55.6\%\).) + +## Common traps + +- **Dividing by the new value** when finding percent change — use the original as the base. +- **Over-computing.** Don't calculate every percent; convert thresholds to target numbers and compare. +- **Treating the statements as linked.** Each Yes/No row stands alone — judge it on its own evidence. + +## Key takeaways + +- Let the quantifier ("every," "at least one," "greatest") tell you what evidence to look for. +- Percent change divides by the **original** value. +- Convert a percent threshold into a concrete target number, then just compare. +- Evaluate each statement independently and compute only what that statement requires. diff --git a/content/lessons/data-insights/data-insights-two-part-analysis-simultaneous-conditions.md b/content/lessons/data-insights/data-insights-two-part-analysis-simultaneous-conditions.md new file mode 100644 index 0000000..4ab7d13 --- /dev/null +++ b/content/lessons/data-insights/data-insights-two-part-analysis-simultaneous-conditions.md @@ -0,0 +1,60 @@ +--- +id: data-insights-two-part-analysis-simultaneous-conditions +section: data-insights +topic: two-part-analysis +subtopic: simultaneous-conditions +title: "Two-Part Analysis: Simultaneous Conditions" +tags: [two-part-analysis, system-of-equations, simultaneous-conditions] +author: openmat +reviewers: [] +status: in-review +original: true +license: CC-BY-SA-4.0 +--- + +## Overview + +Two-Part Analysis questions give you a single scenario and ask for **two** answers — one per +column — chosen from a shared list of options. The two answers are usually linked, so the trap is +picking a value that satisfies one condition while quietly breaking the other. Treat the two +columns as **one system** to solve, not two independent questions. + +## Core concepts + +**Translate each condition into an equation or inequality.** Most two-part prompts hand you two +constraints. Name a variable for each column and write one relation per constraint. Two linked +constraints in two unknowns almost always pin down a unique pair. + +**Solve the system, don't guess-and-check one column.** With two linear equations, use elimination +(add or subtract to cancel a variable) or substitution. A pair that fits only the first equation is +exactly the distractor the question is built around. + +**Watch what each column actually asks for.** The columns can request different things — a value +and a rate, a "before" and an "after," a minimum and a maximum. Read the column headers carefully; +the two answers are not always the same *kind* of quantity. + +**Verify against every condition.** Before committing, plug your two answers back into **all** the +constraints, including the one you didn't use to solve. This single habit catches most two-part +mistakes. + +## Worked examples + +**A linked system.** Two receipts: \(2n + j = 7\) and \(n + 2j = 8\). Adding gives +\(3n + 3j = 15\), so \(n + j = 5\); subtracting that from the first gives \(n = 2\), hence \(j = 3\). +Check the second equation: \(2 + 2(3) = 8\). ✓ Column 1 = 2, Column 2 = 3. + +**Guarding against a partial fit.** In the example above, \((n, j) = (3, 1)\) satisfies the first +receipt (\(2(3) + 1 = 7\)) but not the second (\(3 + 2 = 5 \ne 8\)). Only a pair that clears **both** +conditions is correct. + +## Common traps + +- **Solving one column in isolation.** The columns are coupled — find the pair, not two separate answers. +- **Grabbing the first pair that fits one equation.** Always test against the other condition too. +- **Mixing up the columns.** Confirm which quantity each column wants before you select. + +## Key takeaways + +- Assign one variable per column and turn each condition into an equation or inequality. +- Solve the constraints as a single system (elimination/substitution), then verify against all of them. +- The classic distractor satisfies one condition but not the other — a full check kills it. diff --git a/content/lessons/quant/quant-number-properties-odds-evens-signs.md b/content/lessons/quant/quant-number-properties-odds-evens-signs.md new file mode 100644 index 0000000..96e5b79 --- /dev/null +++ b/content/lessons/quant/quant-number-properties-odds-evens-signs.md @@ -0,0 +1,76 @@ +--- +id: quant-number-properties-odds-evens-signs +section: quant +topic: number-properties +subtopic: odds-evens-signs +title: "Odds, Evens & Signs" +tags: [parity, odd-even, signs, positive-negative] +author: openmat +reviewers: [] +status: in-review +original: true +license: CC-BY-SA-4.0 +--- + +## Overview + +Many GMAT Focus Quant questions never ask you to compute a value — they ask what *must* be true +about whether an expression is odd or even, or positive or negative. These are **parity** and +**sign** questions. You almost never need the actual numbers; you only need to track two-state +information (odd/even, +/−) through the arithmetic. Learn the rules and you can answer in seconds. + +## Core concepts + +**Parity rules (odd/even).** An even number is a multiple of 2; an odd number is not. The only +rules you need: + +- **Addition/subtraction:** the result is odd exactly when you combine one odd and one even. + even ± even = even, odd ± odd = even, even ± odd = **odd**. +- **Multiplication:** a product is even if *any* factor is even. It is odd only when *every* + factor is odd. So \(\text{even} \times \text{anything} = \text{even}\). + +A useful consequence: \(n(n+1)\), the product of two **consecutive** integers, is always even — +one of any two consecutive integers is even. Likewise \(n^2\) has the same parity as \(n\). + +**Sign rules (positive/negative).** For a product or quotient, only the *count of negative +factors* matters: + +- An **even** number of negative factors → the result is **positive**. +- An **odd** number of negative factors → the result is **negative**. + +Zero is neither positive nor negative, and any product containing a zero factor is zero. Watch +for it — "\(xy > 0\)" quietly tells you neither \(x\) nor \(y\) is 0, while "\(xy \ge 0\)" does not. + +**Recovering one sign from a product.** If you know the sign of a whole product and the signs of +all but one factor, you can solve for the last one. If \(abc > 0\) and \(bc < 0\), then +\(a = \dfrac{abc}{bc} = \dfrac{(+)}{(-)} < 0\). + +## Worked examples + +**Parity of an expression.** Is \(n^2 + n + 1\) odd or even for every integer \(n\)? +\(n^2 + n = n(n+1)\) is a product of consecutive integers, so it is always even. Adding 1 makes +the whole expression **always odd** — no need to test cases. + +**Signs from constraints.** If \(x < 0\) and \(xy^2 z > 0\), what is the sign of \(z\)? +Since \(y^2 \ge 0\) and the product is nonzero, \(y^2 > 0\) (positive). The product's sign is +\((\text{sign of } x)(\text{sign of } y^2)(\text{sign of } z) = (-)(+)(\text{sign of } z) > 0\), +so \(z\) must be **negative**. + +## Common traps + +- **Assuming a variable is an integer.** Parity rules apply only to integers. If a problem + doesn't say "integer," \(x\) could be \(2.5\) and "odd/even" is meaningless. +- **Forgetting even × odd = even.** A product is even as soon as *one* factor is even; you do not + need both. +- **Losing zero.** \(x^2 \ge 0\), not \(> 0\), unless you know \(x \ne 0\). A stray zero flips a + "must be positive" into "could be zero." +- **Squares don't erase parity.** \(n^2\) is odd when \(n\) is odd. Squaring changes the sign + situation (never negative) but not the parity. + +## Key takeaways + +- Sum/difference is odd only when mixing one odd and one even; a product is even whenever any + factor is even. +- \(n(n+1)\) is always even; \(n^2\) has the same parity as \(n\). +- For products/quotients, count the negatives: even count → positive, odd count → negative. +- Track only the two-state information (odd/even, +/−); you rarely need the actual values. diff --git a/content/lessons/quant/quant-number-properties-remainders.md b/content/lessons/quant/quant-number-properties-remainders.md new file mode 100644 index 0000000..5957c5e --- /dev/null +++ b/content/lessons/quant/quant-number-properties-remainders.md @@ -0,0 +1,73 @@ +--- +id: quant-number-properties-remainders +section: quant +topic: number-properties +subtopic: remainders +title: "Remainders" +tags: [remainders, division, modular-arithmetic, cyclicity] +author: openmat +reviewers: [] +status: in-review +original: true +license: CC-BY-SA-4.0 +--- + +## Overview + +Remainder questions look intimidating but reduce to one equation and a few habits. The GMAT loves +them because they reward structure over brute force: you can answer "what is the remainder when +\(3^{47}\) is divided by 5?" without ever computing \(3^{47}\). + +## Core concepts + +**The division identity.** When a positive integer \(n\) is divided by a positive integer \(d\), +there is a unique quotient \(q\) and remainder \(r\) with + +\[n = qd + r, \qquad 0 \le r < d.\] + +The remainder is always at least 0 and strictly less than the divisor. Whenever a problem says +"the remainder is \(r\) when divided by \(d\)," immediately write \(n = qd + r\) — that single +substitution unlocks most questions. + +**Remainders add and multiply.** You can do arithmetic on remainders directly (this is modular +arithmetic). If \(n\) leaves remainder \(r\) on division by \(d\), then to find the remainder of +\(an + b\), just compute \(ar + b\) and reduce mod \(d\). Substituting \(n = qd + r\) shows why: +the \(qd\) part is divisible by \(d\) and contributes nothing to the remainder. + +**Cyclicity of powers.** Remainders of \(a^1, a^2, a^3, \dots\) on division by \(d\) eventually +repeat in a fixed-length cycle. Find the cycle, then use the exponent's position within it. For +\(3^k \bmod 5\): the remainders are \(3, 4, 2, 1, 3, 4, 2, 1, \dots\) — a cycle of length 4. To get +\(3^{47}\), note \(47 = 4(11) + 3\), so \(3^{47}\) sits at position 3 in the cycle → remainder \(2\). + +**Combining two conditions.** "Leaves remainder 2 mod 5 and remainder 1 mod 3" defines a single +family of numbers. List the smaller list and check it against the other condition: +\(\{2, 7, 12, 17, 22, \dots\}\) against "\(\equiv 1 \bmod 3\)" first hits at \(7\), and then every +\(15\) (\(= 5 \times 3\)) after that: \(7, 22, 37, \dots\). + +## Worked examples + +**Linear expression.** When \(n\) is divided by 7 the remainder is 4. What is the remainder when +\(3n + 5\) is divided by 7? Work with the remainder: \(3(4) + 5 = 17\), and \(17 = 2(7) + 3\), so +the remainder is **3**. (Check with \(n = 11\): \(3(11)+5 = 38 = 5(7)+3\). ✓) + +**Power.** Remainder of \(7^{100}\) mod 4? \(7 \equiv 3 \bmod 4\), and powers of 3 mod 4 cycle +\(3, 1, 3, 1, \dots\) (length 2). Even exponent → position 2 → remainder **1**. + +## Common traps + +- **Remainder ≥ divisor.** A remainder must be less than the divisor. If your work gives a + remainder of 17 when dividing by 7, reduce it (\(17 \to 3\)). +- **Multiplying then forgetting to reduce.** \(3 \times 4 + 5 = 17\) is not the answer mod 7 — + reduce it to 3. +- **Assuming a unique number.** "Remainder 3 when divided by 5" describes infinitely many numbers + (\(3, 8, 13, \dots\)); pick the smallest that fits, or keep it as \(5q + 3\). +- **Miscounting the cycle position.** If the cycle has length 4 and the exponent is a multiple of + 4, you are at the *end* of the cycle (position 4), not position 0. + +## Key takeaways + +- Write \(n = qd + r\) with \(0 \le r < d\) the moment a remainder is mentioned. +- Do arithmetic on the remainders themselves, then reduce mod \(d\). +- For powers, find the repeating cycle of remainders and use the exponent's position in it. +- For two simultaneous remainder conditions, list one and test against the other; solutions repeat + every \(\text{lcm}\) of the divisors. diff --git a/content/questions/data-insights/data-insights-table-analysis-ratios-thresholds-0010.md b/content/questions/data-insights/data-insights-table-analysis-ratios-thresholds-0010.md new file mode 100644 index 0000000..a4ed9db --- /dev/null +++ b/content/questions/data-insights/data-insights-table-analysis-ratios-thresholds-0010.md @@ -0,0 +1,62 @@ +--- +id: data-insights-table-analysis-ratios-thresholds-0010 +section: data-insights +topic: table-analysis +subtopic: ratios-thresholds +type: table-analysis +difficulty: medium +tags: [table-analysis, percent-change, thresholds] +parts: + Claim1: "Yes|No" + Claim2: "Yes|No" + Claim3: "Yes|No" +answer: "Claim1=No; Claim2=Yes; Claim3=Yes" +author: openmat +reviewers: [] +status: in-review +original: true +license: CC-BY-SA-4.0 +--- + +## Question + +The table shows units sold by three stores in the first two quarters of a year. + +| Store | Q1 units | Q2 units | +|-------|---------:|---------:| +| Alpha | 120 | 150 | +| Beta | 200 | 180 | +| Gamma | 90 | 140 | + +For each claim, select **Yes** if it is supported by the table and **No** if it is not. + +- **Claim 1.** Every store sold more units in Q2 than in Q1. +- **Claim 2.** Beta had the greatest two-quarter total (Q1 + Q2) of the three stores. +- **Claim 3.** Gamma's Q2 units were more than 40% above its Q1 units. + +## Explanation + +Work one claim at a time; each is a quick check, not a calculation marathon. + +**Claim 1 — No.** Alpha (120 → 150) and Gamma (90 → 140) rose, but **Beta fell** from 200 to 180. +A single counterexample makes an "every" statement false. + +**Claim 2 — Yes.** Compute the two-quarter totals: Alpha \(= 120 + 150 = 270\), Beta \(= 200 + 180 = 380\), +Gamma \(= 90 + 140 = 230\). Beta's 380 is the largest. + +**Claim 3 — Yes.** Gamma went from 90 to 140, an increase of 50. As a percent of the original, + +\[\frac{50}{90} \approx 55.6\% ,\] + +which is more than 40%. (Shortcut: 40% of 90 is 36, so 90 + 36 = 126; since 140 > 126, the increase +clears the 40% threshold.) + +So the answers are **No, Yes, Yes**. + +The trap on Claim 3 is dividing by the wrong base — percent change is always measured against the +**original** value (90), not the new one (140). + +## Hints + +- For "every"-type claims, hunt for one counterexample before checking the rest. +- Percent increase = (new − old) / **old**. Or compare against a threshold: 40% of 90 is 36. diff --git a/content/questions/data-insights/data-insights-two-part-analysis-simultaneous-conditions-0009.md b/content/questions/data-insights/data-insights-two-part-analysis-simultaneous-conditions-0009.md new file mode 100644 index 0000000..4ea0096 --- /dev/null +++ b/content/questions/data-insights/data-insights-two-part-analysis-simultaneous-conditions-0009.md @@ -0,0 +1,56 @@ +--- +id: data-insights-two-part-analysis-simultaneous-conditions-0009 +section: data-insights +topic: two-part-analysis +subtopic: simultaneous-conditions +type: two-part-analysis +difficulty: medium +tags: [two-part-analysis, system-of-equations, simultaneous-conditions] +parts: + Nuts: "$1|$2|$3|$4|$5|$6" + Juice: "$1|$2|$3|$4|$5|$6" +answer: "Nuts=$2; Juice=$3" +author: openmat +reviewers: [] +status: in-review +original: true +license: CC-BY-SA-4.0 +--- + +## Question + +A vending machine sells only two items: a bag of nuts and a bottle of juice, each at a fixed +whole-dollar price. A customer notes two receipts: + +- 2 bags of nuts and 1 bottle of juice cost **$7** in total. +- 1 bag of nuts and 2 bottles of juice cost **$8** in total. + +In the first column select the price of one **bag of nuts**, and in the second column select the +price of one **bottle of juice**, consistent with both receipts. Make only one selection per column. + +## Explanation + +Let \(n\) be the price of nuts and \(j\) the price of juice. The two receipts give a system: + +\[2n + j = 7 \qquad\text{and}\qquad n + 2j = 8.\] + +**Add** the equations to exploit the symmetry: + +\[(2n + j) + (n + 2j) = 7 + 8 \;\Rightarrow\; 3n + 3j = 15 \;\Rightarrow\; n + j = 5.\] + +Now subtract \(n + j = 5\) from \(2n + j = 7\): + +\[(2n + j) - (n + j) = 7 - 5 \;\Rightarrow\; n = 2,\] + +so \(j = 5 - 2 = 3\). Check the untouched equation: \(n + 2j = 2 + 6 = 8\). ✓ + +So **Nuts = $2** and **Juice = $3**. + +A common slip is to solve only the first equation and guess a pair that fits it (e.g. \(n=3, j=1\) +gives \(2(3)+1 = 7\)) — but that pair fails the *second* condition (\(3 + 2 = 5 \ne 8\)). In two-part +questions both conditions must hold simultaneously. + +## Hints + +- Write one equation per receipt, then combine them — adding these two makes the numbers collapse nicely. +- A pair that satisfies only one condition is a trap; test your answer against **both** receipts. diff --git a/content/questions/quant/quant-number-properties-odds-evens-signs-0017.md b/content/questions/quant/quant-number-properties-odds-evens-signs-0017.md new file mode 100644 index 0000000..ce39745 --- /dev/null +++ b/content/questions/quant/quant-number-properties-odds-evens-signs-0017.md @@ -0,0 +1,46 @@ +--- +id: quant-number-properties-odds-evens-signs-0017 +section: quant +topic: number-properties +subtopic: odds-evens-signs +type: problem-solving +difficulty: easy +tags: [parity, odd-even, must-be-true] +choices: + A: "xy" + B: "x - y" + C: "x^2 + y^2" + D: "2x + y" + E: "xy + 1" +answer: A +author: openmat +reviewers: [] +status: in-review +original: true +license: CC-BY-SA-4.0 +--- + +## Question + +If \(x\) and \(y\) are integers and \(x + y\) is odd, which of the following must be even? + +## Explanation + +If \(x + y\) is odd, then one of \(x, y\) is even and the other is odd (a sum is odd only when you +mix parities). Test each choice against that fact. + +- **A. \(xy\)** — one factor is even, and a product with any even factor is even. So \(xy\) is + **always even**. ✓ +- **B. \(x - y\)** — a difference has the same parity as the corresponding sum, so \(x - y\) is + odd, just like \(x + y\). +- **C. \(x^2 + y^2\)** — squaring preserves parity, so this is \(\text{even} + \text{odd} = \text{odd}\). +- **D. \(2x + y\)** — \(2x\) is even, so this has the parity of \(y\), which could be either. Not + guaranteed. +- **E. \(xy + 1\)** — from A, \(xy\) is even, so \(xy + 1\) is odd. + +Only choice **A** must be even. + +## Hints + +- A sum of two integers is odd only when one is even and one is odd — so exactly one of \(x, y\) is even here. +- A product is even as soon as *any* factor is even. diff --git a/content/questions/quant/quant-number-properties-odds-evens-signs-0018.md b/content/questions/quant/quant-number-properties-odds-evens-signs-0018.md new file mode 100644 index 0000000..91f9472 --- /dev/null +++ b/content/questions/quant/quant-number-properties-odds-evens-signs-0018.md @@ -0,0 +1,49 @@ +--- +id: quant-number-properties-odds-evens-signs-0018 +section: quant +topic: number-properties +subtopic: odds-evens-signs +type: problem-solving +difficulty: medium +tags: [signs, positive-negative, must-be-true] +choices: + A: "a > 0" + B: "a < 0" + C: "b > 0" + D: "c < 0" + E: "b + c < 0" +answer: B +author: openmat +reviewers: [] +status: in-review +original: true +license: CC-BY-SA-4.0 +--- + +## Question + +If \(a\), \(b\), and \(c\) are nonzero numbers with \(abc > 0\) and \(bc < 0\), which of the +following must be true? + +## Explanation + +The key is that you can recover the sign of one factor from the signs of the rest. Write \(a\) in +terms of the two given products: + +\[a = \frac{abc}{bc} = \frac{(\text{positive})}{(\text{negative})} < 0.\] + +So \(a\) must be **negative** — choice **B**. + +Why the others fail: \(bc < 0\) tells you \(b\) and \(c\) have **opposite** signs, but not which is +which. So \(b\) could be positive or negative (C not forced), \(c\) could be positive or negative +(D not forced), and \(b + c\) could be positive or negative depending on magnitudes (E not forced). +Only the sign of \(a\) is pinned down. + +Concretely, \(a = -2\) works with either \((b, c) = (3, -1)\) or \((b, c) = (-3, 1)\): both give +\(bc < 0\) and \(abc = (-2)(bc) > 0\). Across those cases \(b\), \(c\), and \(b+c\) all change sign, +but \(a\) stays negative. + +## Hints + +- Divide the two given products: \(abc \div bc\) isolates \(a\). +- \(bc < 0\) means \(b\) and \(c\) have opposite signs — so neither one's sign is determined alone. diff --git a/content/questions/quant/quant-number-properties-odds-evens-signs-0019.md b/content/questions/quant/quant-number-properties-odds-evens-signs-0019.md new file mode 100644 index 0000000..fc97018 --- /dev/null +++ b/content/questions/quant/quant-number-properties-odds-evens-signs-0019.md @@ -0,0 +1,44 @@ +--- +id: quant-number-properties-odds-evens-signs-0019 +section: quant +topic: number-properties +subtopic: odds-evens-signs +type: problem-solving +difficulty: medium +tags: [parity, odd-even, consecutive-integers, must-be-true] +choices: + A: "n^2 + n" + B: "n^2 + n + 1" + C: "2n^2 + 3n" + D: "n^2 - 1" + E: "3n" +answer: B +author: openmat +reviewers: [] +status: in-review +original: true +license: CC-BY-SA-4.0 +--- + +## Question + +If \(n\) is an integer, which of the following is always odd? + +## Explanation + +The unlock is recognizing \(n^2 + n = n(n+1)\), the product of two **consecutive** integers. One of +any two consecutive integers is even, so \(n(n+1)\) is **always even**. Now check each choice: + +- **A. \(n^2 + n = n(n+1)\)** — always even, never odd. +- **B. \(n^2 + n + 1\)** — an even number plus 1 is **always odd**. ✓ +- **C. \(2n^2 + 3n = n(2n + 3)\)** — if \(n\) is even this is even; if \(n\) is odd it is odd. Not + always odd. +- **D. \(n^2 - 1\)** — for \(n = 3\) this is 8 (even), for \(n = 2\) it is 3 (odd). Not always odd. +- **E. \(3n\)** — has the same parity as \(n\), which varies. + +Only **B** is odd for every integer \(n\). + +## Hints + +- Factor \(n^2 + n\). What do you notice about \(n\) and \(n + 1\)? +- A product of two consecutive integers is always even — so "that product plus 1" is always odd. diff --git a/content/questions/quant/quant-number-properties-remainders-0020.md b/content/questions/quant/quant-number-properties-remainders-0020.md new file mode 100644 index 0000000..7366855 --- /dev/null +++ b/content/questions/quant/quant-number-properties-remainders-0020.md @@ -0,0 +1,51 @@ +--- +id: quant-number-properties-remainders-0020 +section: quant +topic: number-properties +subtopic: remainders +type: problem-solving +difficulty: medium +tags: [remainders, division] +choices: + A: "0" + B: "1" + C: "2" + D: "3" + E: "5" +answer: D +author: openmat +reviewers: [] +status: in-review +original: true +license: CC-BY-SA-4.0 +--- + +## Question + +When the positive integer \(n\) is divided by 7, the remainder is 4. What is the remainder when +\(3n + 5\) is divided by 7? + +## Explanation + +Start from the division identity: "\(n\) divided by 7 leaves remainder 4" means +\(n = 7q + 4\) for some integer \(q \ge 0\). Substitute: + +\[3n + 5 = 3(7q + 4) + 5 = 21q + 12 + 5 = 21q + 17.\] + +The \(21q\) term is a multiple of 7, so it contributes no remainder. That leaves the remainder of +\(17\) on division by 7: + +\[17 = 2 \times 7 + 3,\] + +so the remainder is **3**. + +Shortcut: work with the remainder directly. Replace \(n\) by its remainder 4, compute +\(3(4) + 5 = 17\), then reduce mod 7 to get 3. (Sanity check with \(n = 11\): \(3(11) + 5 = 38 = 5 \times 7 + 3\). ✓) + +The trap answer is **E (5)**, from stopping at "\(+5\)" without accounting for the \(3 \times 4 = 12\), +which itself contributes \(12 = 7 + 5\), i.e. another 5 — the two combine to 17, not 5. + +## Hints + +- Write \(n = 7q + 4\) and substitute into \(3n + 5\). +- Any multiple of 7 drops out; you only need the remainder of the leftover constant. diff --git a/content/questions/quant/quant-number-properties-remainders-0021.md b/content/questions/quant/quant-number-properties-remainders-0021.md new file mode 100644 index 0000000..110952f --- /dev/null +++ b/content/questions/quant/quant-number-properties-remainders-0021.md @@ -0,0 +1,52 @@ +--- +id: quant-number-properties-remainders-0021 +section: quant +topic: number-properties +subtopic: remainders +type: problem-solving +difficulty: hard +tags: [remainders, cyclicity, powers] +choices: + A: "0" + B: "1" + C: "2" + D: "3" + E: "4" +answer: C +author: openmat +reviewers: [] +status: in-review +original: true +license: CC-BY-SA-4.0 +--- + +## Question + +What is the remainder when \(3^{47}\) is divided by 5? + +## Explanation + +You never compute \(3^{47}\). Remainders of successive powers repeat in a **cycle**, so find the +cycle and then locate the exponent within it. Take powers of 3 mod 5: + +- \(3^1 = 3\) → remainder 3 +- \(3^2 = 9\) → remainder 4 +- \(3^3 = 27\) → remainder 2 +- \(3^4 = 81\) → remainder 1 +- \(3^5 = 243\) → remainder 3 (the pattern restarts) + +So the remainders cycle with **period 4**: \(3, 4, 2, 1, \;3, 4, 2, 1, \dots\) + +Locate the exponent 47 in the cycle by dividing by the period: + +\[47 = 4 \times 11 + 3,\] + +so \(3^{47}\) sits at **position 3** in the cycle. The third entry is **2**, so the remainder is **2**. + +Watch the counting: a remainder of 0 in "\(47 \bmod 4\)" would put you at the *end* of a cycle +(position 4, remainder 1), not the start. Here the remainder is 3, giving position 3. + +## Hints + +- Compute the remainders of \(3^1, 3^2, 3^3, \dots\) mod 5 until they repeat. +- Divide the exponent by the cycle length; the remainder tells you the position within the cycle. diff --git a/content/questions/quant/quant-number-properties-remainders-0022.md b/content/questions/quant/quant-number-properties-remainders-0022.md new file mode 100644 index 0000000..38c3c88 --- /dev/null +++ b/content/questions/quant/quant-number-properties-remainders-0022.md @@ -0,0 +1,54 @@ +--- +id: quant-number-properties-remainders-0022 +section: quant +topic: number-properties +subtopic: remainders +type: problem-solving +difficulty: hard +tags: [remainders, simultaneous-conditions] +choices: + A: "12" + B: "16" + C: "17" + D: "22" + E: "27" +answer: D +author: openmat +reviewers: [] +status: in-review +original: true +license: CC-BY-SA-4.0 +--- + +## Question + +A positive integer \(N\) leaves a remainder of 2 when divided by 5 and a remainder of 1 when +divided by 3. What is the least value of \(N\) greater than 10? + +## Explanation + +Handle the two conditions together by listing one and testing it against the other. + +Numbers that leave remainder 2 when divided by 5: \(2, 7, 12, 17, 22, 27, \dots\) + +Now keep only those that also leave remainder 1 when divided by 3: + +- \(2 \to 2 \bmod 3 = 2\) ✗ +- \(7 \to 7 \bmod 3 = 1\) ✓ +- \(12 \to 12 \bmod 3 = 0\) ✗ +- \(17 \to 17 \bmod 3 = 2\) ✗ +- \(22 \to 22 \bmod 3 = 1\) ✓ + +Both conditions hold at \(N = 7\), and then again every \(\text{lcm}(5, 3) = 15\): \(7, 22, 37, \dots\) +The smallest such value **greater than 10** is **22**. + +Check: \(22 = 4 \times 5 + 2\) (remainder 2 mod 5 ✓) and \(22 = 7 \times 3 + 1\) (remainder 1 mod 3 ✓). + +The distractors each satisfy only one condition: 12 and 27 leave remainder 2 mod 5 but are +divisible by 3; 17 leaves remainder 2 mod 5 but remainder 2 (not 1) mod 3; 16 leaves remainder 1 +mod 5. Only 22 satisfies both. + +## Hints + +- List the numbers satisfying one condition, then test each against the other — don't try to guess. +- Once you find the first value that works, the next ones repeat every \(\text{lcm}\) of the two divisors. diff --git a/curriculum.md b/curriculum.md index 5ad658a..a4921eb 100644 --- a/curriculum.md +++ b/curriculum.md @@ -70,13 +70,14 @@ The taxonomy is ordered so you can study a section top to bottom. A balanced pla Early days — the bank is growing. Rough coverage so far (a contributor could automate this count from the front-matter): -- **Quant** — arithmetic, number properties, algebra (linear, inequalities), word problems (rates, work, sets), counting & probability, statistics (mean, median, weighted average, standard deviation). +- **Quant** — arithmetic, number properties (factors, odds/evens/signs, remainders), algebra (linear, inequalities), word problems (rates, work, sets), counting & probability, statistics (mean, median, weighted average, standard deviation). - **Verbal** — Critical Reasoning (assumptions, strengthen/weaken, inference, flaw) and Reading Comprehension (main idea, detail/inference). -- **Data Insights** — Data Sufficiency across fundamentals, divisibility, number properties, algebra, statistics, word problems, and overlapping sets. +- **Data Insights** — Data Sufficiency across fundamentals, divisibility, number properties, algebra, statistics, word problems, and overlapping sets; plus the first multi-part formats (Two-Part Analysis, Table Analysis). -Still thin everywhere, and the multi-part Data Insights formats (Table Analysis, Graphics -Interpretation, Two-Part Analysis, Multi-Source Reasoning) need a study-site UI before content -is added. See [`content/`](content/) for what exists, and [CONTRIBUTING.md](CONTRIBUTING.md) to add more. +Still thin everywhere. The study site now supports **multi-part Data Insights formats** (Two-Part +Analysis and Table Analysis are gradeable in Practice via the `parts` field — see +[CONTENT_SCHEMA.md](CONTENT_SCHEMA.md)); Graphics Interpretation and Multi-Source Reasoning still +need content. See [`content/`](content/) for what exists, and [CONTRIBUTING.md](CONTRIBUTING.md) to add more. --- diff --git a/docs/app.js b/docs/app.js index ee44694..c1d63a9 100644 --- a/docs/app.js +++ b/docs/app.js @@ -221,6 +221,25 @@ if (q.type === "data-sufficiency") return DS_CHOICES; return {}; } + // --- Multi-part questions (two-part-analysis, table-analysis, …) ---------- + // A question declares `parts` as { PartKey: "Opt A|Opt B|Opt C" } and encodes + // its answer as "PartKey=Value; PartKey2=Value2". + function isMultiPart(q) { + return q.parts && typeof q.parts === "object" && Object.keys(q.parts).length > 0; + } + function partOptions(v) { + return String(v || "").split("|").map((s) => s.trim()).filter(Boolean); + } + function parsePartsAnswer(ans) { + const out = {}; + String(ans || "").split(";").forEach((seg) => { + const i = seg.indexOf("="); + if (i === -1) return; + const k = seg.slice(0, i).trim(); + if (k) out[k] = seg.slice(i + 1).trim(); + }); + return out; + } function shuffle(arr) { const a = arr.slice(); for (let i = a.length - 1; i > 0; i--) { @@ -386,8 +405,6 @@ const q = DATA.questions.find((x) => x.id === practice.queue[practice.index]); practice.answered = false; - const choices = choicesFor(q); - const letters = Object.keys(choices); const card = el('
'); card.appendChild( @@ -402,54 +419,34 @@ card.appendChild(el('
' + questionBadges(q) + "
")); card.appendChild(el('
' + renderMarkdown(q.prompt) + "
")); - const list = el('
'); - letters.forEach((L) => { - const btn = el( - '" - ); - btn.addEventListener("click", () => onAnswer(L)); - list.appendChild(btn); - }); - card.appendChild(list); const feedback = el("
"); - card.appendChild(feedback); - holder.appendChild(card); - - // Start the per-question timer (counts up until the question is answered). const timerEl = card.querySelector("[data-timer]"); - practice.startTs = Date.now(); - practice.timerId = setInterval(() => { - if (timerEl) timerEl.textContent = "⏱ " + formatTime((Date.now() - practice.startTs) / 1000); - }, 1000); - - function onAnswer(letter) { - if (practice.answered) return; - practice.answered = true; - stopTimer(); - const elapsed = (Date.now() - practice.startTs) / 1000; - practice.sessionSec += elapsed; - if (timerEl) timerEl.textContent = "⏱ " + formatTime(elapsed); - const correct = letter === String(q.answer); + function startTimer() { + // Counts up until the question is answered. + practice.startTs = Date.now(); + practice.timerId = setInterval(() => { + if (timerEl) timerEl.textContent = "⏱ " + formatTime((Date.now() - practice.startTs) / 1000); + }, 1000); + } + function elapsedSec() { + const e = (Date.now() - practice.startTs) / 1000; + practice.sessionSec += e; + if (timerEl) timerEl.textContent = "⏱ " + formatTime(e); + return e; + } + + // Shared post-answer tail: score pill, pace line, explanation, hints, Next. + function finishQuestion(correct, elapsed, verdictHtml) { practice.doneCount++; if (correct) practice.correctCount++; recordAnswer(q.id, correct, elapsed); const pill = card.querySelector(".scorepill"); if (pill) pill.textContent = "Score " + practice.correctCount + " / " + practice.doneCount; - const btns = list.querySelectorAll(".choice"); - btns.forEach((b, i) => { - const L = letters[i]; - b.disabled = true; - if (L === String(q.answer)) b.classList.add("correct"); - else if (L === letter) b.classList.add("wrong"); - }); - const tgt = targetFor(q.section); const over = elapsed > tgt; feedback.innerHTML = - '
' + - (correct ? "Correct! ✓" : "Not quite — the answer is " + escapeHtml(String(q.answer)) + ".") + - "
" + + verdictHtml + '
⏱ You took ' + formatTime(elapsed) + " · target ~" + formatTime(tgt) + " · " + (over ? "over pace" : "on pace") + "
" + '

Explanation

' + @@ -457,13 +454,14 @@ "
"; if (q.hints && q.hints.length) { - const hints = el( - '
Show hints (' + q.hints.length + ")" + - '
" + feedback.appendChild( + el( + '
Show hints (' + q.hints.length + ")" + + '
" + ) ); - feedback.appendChild(hints); } const isLast = practice.index + 1 >= practice.queue.length; @@ -479,6 +477,104 @@ }); feedback.appendChild(actions); } + + if (isMultiPart(q)) { + // Multi-part formats: one labeled row of options per part, all graded + // together on Submit (correct only if every part matches). + const partKeys = Object.keys(q.parts); + const key = parsePartsAnswer(q.answer); + const chosen = {}; + const optButtons = {}; // partKey -> [buttons] + const partsWrap = el('
'); + const submitRow = el('
'); + const submitBtn = submitRow.querySelector('[data-act="submit"]'); + + partKeys.forEach((pk) => { + const block = el('
' + escapeHtml(pk) + "
"); + const optWrap = el('
'); + optButtons[pk] = []; + partOptions(q.parts[pk]).forEach((opt) => { + const b = el('"); + b.dataset.val = opt; + b.addEventListener("click", () => { + if (practice.answered) return; + optButtons[pk].forEach((x) => x.classList.remove("selected")); + b.classList.add("selected"); + chosen[pk] = opt; + submitBtn.disabled = partKeys.some((k) => chosen[k] === undefined); + }); + optButtons[pk].push(b); + optWrap.appendChild(b); + }); + block.appendChild(optWrap); + partsWrap.appendChild(block); + }); + card.appendChild(partsWrap); + card.appendChild(submitRow); + card.appendChild(feedback); + holder.appendChild(card); + startTimer(); + + submitBtn.addEventListener("click", () => { + if (practice.answered) return; + practice.answered = true; + stopTimer(); + const elapsed = elapsedSec(); + submitRow.remove(); + let allCorrect = true; + const misses = []; + partKeys.forEach((pk) => { + const right = (key[pk] || "").toLowerCase(); + const mine = (chosen[pk] || "").toLowerCase(); + const ok = right && mine === right; + if (!ok) { allCorrect = false; misses.push(escapeHtml(pk) + " → " + escapeHtml(key[pk] || "?")); } + optButtons[pk].forEach((b) => { + b.disabled = true; + const val = (b.dataset.val || "").toLowerCase(); + if (val === right) b.classList.add("correct"); + else if (val === mine) b.classList.add("wrong"); + }); + }); + const verdictHtml = + '
' + + (allCorrect + ? "All parts correct! ✓" + : "Not quite — correct answers: " + misses.join(" · ")) + + "
"; + finishQuestion(allCorrect, elapsed, verdictHtml); + }); + } else { + const choices = choicesFor(q); + const letters = Object.keys(choices); + const list = el('
'); + letters.forEach((L) => { + const btn = el( + '" + ); + btn.addEventListener("click", () => { + if (practice.answered) return; + practice.answered = true; + stopTimer(); + const elapsed = elapsedSec(); + const correct = L === String(q.answer); + list.querySelectorAll(".choice").forEach((b, i) => { + b.disabled = true; + if (letters[i] === String(q.answer)) b.classList.add("correct"); + else if (letters[i] === L) b.classList.add("wrong"); + }); + const verdictHtml = + '
' + + (correct ? "Correct! ✓" : "Not quite — the answer is " + escapeHtml(String(q.answer)) + ".") + + "
"; + finishQuestion(correct, elapsed, verdictHtml); + }); + list.appendChild(btn); + }); + card.appendChild(list); + card.appendChild(feedback); + holder.appendChild(card); + startTimer(); + } } renderPractice(); @@ -536,13 +632,30 @@ head.addEventListener("click", () => { row.classList.toggle("open"); if (!built) { - const choices = choicesFor(q); - const choiceHtml = Object.keys(choices) - .map((L) => "
  • " + L + ". " + renderInline(choices[L]) + "
  • ") - .join(""); + let optsHtml; + if (isMultiPart(q)) { + const key = parsePartsAnswer(q.answer); + optsHtml = + '"; + } else { + const choices = choicesFor(q); + const choiceHtml = Object.keys(choices) + .map((L) => "
  • " + L + ". " + renderInline(choices[L]) + "
  • ") + .join(""); + optsHtml = choiceHtml ? '
      ' + choiceHtml + "
    " : ""; + } body.innerHTML = '
    ' + renderMarkdown(q.prompt) + "
    " + - (choiceHtml ? '
      ' + choiceHtml + "
    " : "") + + optsHtml + '

    Answer: ' + escapeHtml(String(q.answer)) + "

    " + '
    ' + renderMarkdown(q.explanation) + "
    "; built = true; diff --git a/docs/data/content.json b/docs/data/content.json index 9ef981c..1e207e5 100644 --- a/docs/data/content.json +++ b/docs/data/content.json @@ -7,8 +7,8 @@ "stats": { "quant": { "label": "Quantitative", - "questions": 16, - "lessons": 5 + "questions": 22, + "lessons": 7 }, "verbal": { "label": "Verbal", @@ -17,13 +17,13 @@ }, "data-insights": { "label": "Data Insights", - "questions": 8, - "lessons": 1 + "questions": 10, + "lessons": 3 } }, "counts": { - "questions": 32, - "lessons": 8 + "questions": 40, + "lessons": 12 }, "questions": [ { @@ -38,6 +38,7 @@ "algebra" ], "choices": null, + "parts": null, "answer": "C", "author": "openmat", "reviewers": [], @@ -62,6 +63,7 @@ "powers" ], "choices": null, + "parts": null, "answer": "B", "author": "openmat", "reviewers": [], @@ -85,6 +87,7 @@ "number-properties" ], "choices": null, + "parts": null, "answer": "C", "author": "openmat", "reviewers": [], @@ -108,6 +111,7 @@ "lcm" ], "choices": null, + "parts": null, "answer": "C", "author": "openmat", "reviewers": [], @@ -131,6 +135,7 @@ "even-odd" ], "choices": null, + "parts": null, "answer": "D", "author": "openmat", "reviewers": [], @@ -154,6 +159,7 @@ "insufficient" ], "choices": null, + "parts": null, "answer": "E", "author": "openmat", "reviewers": [], @@ -177,6 +183,7 @@ "statistics" ], "choices": null, + "parts": null, "answer": "A", "author": "openmat", "reviewers": [], @@ -200,6 +207,7 @@ "integer-constraints" ], "choices": null, + "parts": null, "answer": "C", "author": "openmat", "reviewers": [], @@ -211,6 +219,63 @@ "With both equations you have a solvable 2×2 system — check that the solution is a valid (non-negative integer) count." ] }, + { + "id": "data-insights-table-analysis-ratios-thresholds-0010", + "section": "data-insights", + "topic": "table-analysis", + "subtopic": "ratios-thresholds", + "type": "table-analysis", + "difficulty": "medium", + "tags": [ + "table-analysis", + "percent-change", + "thresholds" + ], + "choices": null, + "parts": { + "Claim1": "Yes|No", + "Claim2": "Yes|No", + "Claim3": "Yes|No" + }, + "answer": "Claim1=No; Claim2=Yes; Claim3=Yes", + "author": "openmat", + "reviewers": [], + "status": "in-review", + "prompt": "The table shows units sold by three stores in the first two quarters of a year.\n\n| Store | Q1 units | Q2 units |\n|-------|---------:|---------:|\n| Alpha | 120 | 150 |\n| Beta | 200 | 180 |\n| Gamma | 90 | 140 |\n\nFor each claim, select **Yes** if it is supported by the table and **No** if it is not.\n\n- **Claim 1.** Every store sold more units in Q2 than in Q1.\n- **Claim 2.** Beta had the greatest two-quarter total (Q1 + Q2) of the three stores.\n- **Claim 3.** Gamma's Q2 units were more than 40% above its Q1 units.", + "explanation": "Work one claim at a time; each is a quick check, not a calculation marathon.\n\n**Claim 1 — No.** Alpha (120 → 150) and Gamma (90 → 140) rose, but **Beta fell** from 200 to 180.\nA single counterexample makes an \"every\" statement false.\n\n**Claim 2 — Yes.** Compute the two-quarter totals: Alpha \\(= 120 + 150 = 270\\), Beta \\(= 200 + 180 = 380\\),\nGamma \\(= 90 + 140 = 230\\). Beta's 380 is the largest.\n\n**Claim 3 — Yes.** Gamma went from 90 to 140, an increase of 50. As a percent of the original,\n\n\\[\\frac{50}{90} \\approx 55.6\\% ,\\]\n\nwhich is more than 40%. (Shortcut: 40% of 90 is 36, so 90 + 36 = 126; since 140 > 126, the increase\nclears the 40% threshold.)\n\nSo the answers are **No, Yes, Yes**.\n\nThe trap on Claim 3 is dividing by the wrong base — percent change is always measured against the\n**original** value (90), not the new one (140).", + "hints": [ + "For \"every\"-type claims, hunt for one counterexample before checking the rest.", + "Percent increase = (new − old) / **old**. Or compare against a threshold: 40% of 90 is 36." + ] + }, + { + "id": "data-insights-two-part-analysis-simultaneous-conditions-0009", + "section": "data-insights", + "topic": "two-part-analysis", + "subtopic": "simultaneous-conditions", + "type": "two-part-analysis", + "difficulty": "medium", + "tags": [ + "two-part-analysis", + "system-of-equations", + "simultaneous-conditions" + ], + "choices": null, + "parts": { + "Nuts": "$1|$2|$3|$4|$5|$6", + "Juice": "$1|$2|$3|$4|$5|$6" + }, + "answer": "Nuts=$2; Juice=$3", + "author": "openmat", + "reviewers": [], + "status": "in-review", + "prompt": "A vending machine sells only two items: a bag of nuts and a bottle of juice, each at a fixed\nwhole-dollar price. A customer notes two receipts:\n\n- 2 bags of nuts and 1 bottle of juice cost **$7** in total.\n- 1 bag of nuts and 2 bottles of juice cost **$8** in total.\n\nIn the first column select the price of one **bag of nuts**, and in the second column select the\nprice of one **bottle of juice**, consistent with both receipts. Make only one selection per column.", + "explanation": "Let \\(n\\) be the price of nuts and \\(j\\) the price of juice. The two receipts give a system:\n\n\\[2n + j = 7 \\qquad\\text{and}\\qquad n + 2j = 8.\\]\n\n**Add** the equations to exploit the symmetry:\n\n\\[(2n + j) + (n + 2j) = 7 + 8 \\;\\Rightarrow\\; 3n + 3j = 15 \\;\\Rightarrow\\; n + j = 5.\\]\n\nNow subtract \\(n + j = 5\\) from \\(2n + j = 7\\):\n\n\\[(2n + j) - (n + j) = 7 - 5 \\;\\Rightarrow\\; n = 2,\\]\n\nso \\(j = 5 - 2 = 3\\). Check the untouched equation: \\(n + 2j = 2 + 6 = 8\\). ✓\n\nSo **Nuts = $2** and **Juice = $3**.\n\nA common slip is to solve only the first equation and guess a pair that fits it (e.g. \\(n=3, j=1\\)\ngives \\(2(3)+1 = 7\\)) — but that pair fails the *second* condition (\\(3 + 2 = 5 \\ne 8\\)). In two-part\nquestions both conditions must hold simultaneously.", + "hints": [ + "Write one equation per receipt, then combine them — adding these two makes the numbers collapse nicely.", + "A pair that satisfies only one condition is a trap; test your answer against **both** receipts." + ] + }, { "id": "quant-algebra-inequalities-absolute-value-0008", "section": "quant", @@ -230,6 +295,7 @@ "D": "10", "E": "11" }, + "parts": null, "answer": "C", "author": "openmat", "reviewers": [], @@ -260,6 +326,7 @@ "D": "17", "E": "21" }, + "parts": null, "answer": "D", "author": "openmat", "reviewers": [], @@ -290,6 +357,7 @@ "D": "-5", "E": "13" }, + "parts": null, "answer": "B", "author": "openmat", "reviewers": [], @@ -319,6 +387,7 @@ "D": "36", "E": "48" }, + "parts": null, "answer": "C", "author": "openmat", "reviewers": [], @@ -348,6 +417,7 @@ "D": "105% of the original", "E": "125% of the original" }, + "parts": null, "answer": "B", "author": "openmat", "reviewers": [], @@ -378,6 +448,7 @@ "D": "1/2", "E": "3/5" }, + "parts": null, "answer": "A", "author": "openmat", "reviewers": [], @@ -407,6 +478,7 @@ "D": "12", "E": "14" }, + "parts": null, "answer": "D", "author": "openmat", "reviewers": [], @@ -418,6 +490,191 @@ "If \\(N = p^a q^b\\), the divisor count is \\((a+1)(b+1)\\). Remember the \"+1\" accounts for using the prime zero times." ] }, + { + "id": "quant-number-properties-odds-evens-signs-0017", + "section": "quant", + "topic": "number-properties", + "subtopic": "odds-evens-signs", + "type": "problem-solving", + "difficulty": "easy", + "tags": [ + "parity", + "odd-even", + "must-be-true" + ], + "choices": { + "A": "xy", + "B": "x - y", + "C": "x^2 + y^2", + "D": "2x + y", + "E": "xy + 1" + }, + "parts": null, + "answer": "A", + "author": "openmat", + "reviewers": [], + "status": "in-review", + "prompt": "If \\(x\\) and \\(y\\) are integers and \\(x + y\\) is odd, which of the following must be even?", + "explanation": "If \\(x + y\\) is odd, then one of \\(x, y\\) is even and the other is odd (a sum is odd only when you\nmix parities). Test each choice against that fact.\n\n- **A. \\(xy\\)** — one factor is even, and a product with any even factor is even. So \\(xy\\) is\n **always even**. ✓\n- **B. \\(x - y\\)** — a difference has the same parity as the corresponding sum, so \\(x - y\\) is\n odd, just like \\(x + y\\).\n- **C. \\(x^2 + y^2\\)** — squaring preserves parity, so this is \\(\\text{even} + \\text{odd} = \\text{odd}\\).\n- **D. \\(2x + y\\)** — \\(2x\\) is even, so this has the parity of \\(y\\), which could be either. Not\n guaranteed.\n- **E. \\(xy + 1\\)** — from A, \\(xy\\) is even, so \\(xy + 1\\) is odd.\n\nOnly choice **A** must be even.", + "hints": [ + "A sum of two integers is odd only when one is even and one is odd — so exactly one of \\(x, y\\) is even here.", + "A product is even as soon as *any* factor is even." + ] + }, + { + "id": "quant-number-properties-odds-evens-signs-0018", + "section": "quant", + "topic": "number-properties", + "subtopic": "odds-evens-signs", + "type": "problem-solving", + "difficulty": "medium", + "tags": [ + "signs", + "positive-negative", + "must-be-true" + ], + "choices": { + "A": "a > 0", + "B": "a < 0", + "C": "b > 0", + "D": "c < 0", + "E": "b + c < 0" + }, + "parts": null, + "answer": "B", + "author": "openmat", + "reviewers": [], + "status": "in-review", + "prompt": "If \\(a\\), \\(b\\), and \\(c\\) are nonzero numbers with \\(abc > 0\\) and \\(bc < 0\\), which of the\nfollowing must be true?", + "explanation": "The key is that you can recover the sign of one factor from the signs of the rest. Write \\(a\\) in\nterms of the two given products:\n\n\\[a = \\frac{abc}{bc} = \\frac{(\\text{positive})}{(\\text{negative})} < 0.\\]\n\nSo \\(a\\) must be **negative** — choice **B**.\n\nWhy the others fail: \\(bc < 0\\) tells you \\(b\\) and \\(c\\) have **opposite** signs, but not which is\nwhich. So \\(b\\) could be positive or negative (C not forced), \\(c\\) could be positive or negative\n(D not forced), and \\(b + c\\) could be positive or negative depending on magnitudes (E not forced).\nOnly the sign of \\(a\\) is pinned down.\n\nConcretely, \\(a = -2\\) works with either \\((b, c) = (3, -1)\\) or \\((b, c) = (-3, 1)\\): both give\n\\(bc < 0\\) and \\(abc = (-2)(bc) > 0\\). Across those cases \\(b\\), \\(c\\), and \\(b+c\\) all change sign,\nbut \\(a\\) stays negative.", + "hints": [ + "Divide the two given products: \\(abc \\div bc\\) isolates \\(a\\).", + "\\(bc < 0\\) means \\(b\\) and \\(c\\) have opposite signs — so neither one's sign is determined alone." + ] + }, + { + "id": "quant-number-properties-odds-evens-signs-0019", + "section": "quant", + "topic": "number-properties", + "subtopic": "odds-evens-signs", + "type": "problem-solving", + "difficulty": "medium", + "tags": [ + "parity", + "odd-even", + "consecutive-integers", + "must-be-true" + ], + "choices": { + "A": "n^2 + n", + "B": "n^2 + n + 1", + "C": "2n^2 + 3n", + "D": "n^2 - 1", + "E": "3n" + }, + "parts": null, + "answer": "B", + "author": "openmat", + "reviewers": [], + "status": "in-review", + "prompt": "If \\(n\\) is an integer, which of the following is always odd?", + "explanation": "The unlock is recognizing \\(n^2 + n = n(n+1)\\), the product of two **consecutive** integers. One of\nany two consecutive integers is even, so \\(n(n+1)\\) is **always even**. Now check each choice:\n\n- **A. \\(n^2 + n = n(n+1)\\)** — always even, never odd.\n- **B. \\(n^2 + n + 1\\)** — an even number plus 1 is **always odd**. ✓\n- **C. \\(2n^2 + 3n = n(2n + 3)\\)** — if \\(n\\) is even this is even; if \\(n\\) is odd it is odd. Not\n always odd.\n- **D. \\(n^2 - 1\\)** — for \\(n = 3\\) this is 8 (even), for \\(n = 2\\) it is 3 (odd). Not always odd.\n- **E. \\(3n\\)** — has the same parity as \\(n\\), which varies.\n\nOnly **B** is odd for every integer \\(n\\).", + "hints": [ + "Factor \\(n^2 + n\\). What do you notice about \\(n\\) and \\(n + 1\\)?", + "A product of two consecutive integers is always even — so \"that product plus 1\" is always odd." + ] + }, + { + "id": "quant-number-properties-remainders-0020", + "section": "quant", + "topic": "number-properties", + "subtopic": "remainders", + "type": "problem-solving", + "difficulty": "medium", + "tags": [ + "remainders", + "division" + ], + "choices": { + "A": "0", + "B": "1", + "C": "2", + "D": "3", + "E": "5" + }, + "parts": null, + "answer": "D", + "author": "openmat", + "reviewers": [], + "status": "in-review", + "prompt": "When the positive integer \\(n\\) is divided by 7, the remainder is 4. What is the remainder when\n\\(3n + 5\\) is divided by 7?", + "explanation": "Start from the division identity: \"\\(n\\) divided by 7 leaves remainder 4\" means\n\\(n = 7q + 4\\) for some integer \\(q \\ge 0\\). Substitute:\n\n\\[3n + 5 = 3(7q + 4) + 5 = 21q + 12 + 5 = 21q + 17.\\]\n\nThe \\(21q\\) term is a multiple of 7, so it contributes no remainder. That leaves the remainder of\n\\(17\\) on division by 7:\n\n\\[17 = 2 \\times 7 + 3,\\]\n\nso the remainder is **3**.\n\nShortcut: work with the remainder directly. Replace \\(n\\) by its remainder 4, compute\n\\(3(4) + 5 = 17\\), then reduce mod 7 to get 3. (Sanity check with \\(n = 11\\): \\(3(11) + 5 = 38 = 5 \\times 7 + 3\\). ✓)\n\nThe trap answer is **E (5)**, from stopping at \"\\(+5\\)\" without accounting for the \\(3 \\times 4 = 12\\),\nwhich itself contributes \\(12 = 7 + 5\\), i.e. another 5 — the two combine to 17, not 5.", + "hints": [ + "Write \\(n = 7q + 4\\) and substitute into \\(3n + 5\\).", + "Any multiple of 7 drops out; you only need the remainder of the leftover constant." + ] + }, + { + "id": "quant-number-properties-remainders-0021", + "section": "quant", + "topic": "number-properties", + "subtopic": "remainders", + "type": "problem-solving", + "difficulty": "hard", + "tags": [ + "remainders", + "cyclicity", + "powers" + ], + "choices": { + "A": "0", + "B": "1", + "C": "2", + "D": "3", + "E": "4" + }, + "parts": null, + "answer": "C", + "author": "openmat", + "reviewers": [], + "status": "in-review", + "prompt": "What is the remainder when \\(3^{47}\\) is divided by 5?", + "explanation": "You never compute \\(3^{47}\\). Remainders of successive powers repeat in a **cycle**, so find the\ncycle and then locate the exponent within it. Take powers of 3 mod 5:\n\n- \\(3^1 = 3\\) → remainder 3\n- \\(3^2 = 9\\) → remainder 4\n- \\(3^3 = 27\\) → remainder 2\n- \\(3^4 = 81\\) → remainder 1\n- \\(3^5 = 243\\) → remainder 3 (the pattern restarts)\n\nSo the remainders cycle with **period 4**: \\(3, 4, 2, 1, \\;3, 4, 2, 1, \\dots\\)\n\nLocate the exponent 47 in the cycle by dividing by the period:\n\n\\[47 = 4 \\times 11 + 3,\\]\n\nso \\(3^{47}\\) sits at **position 3** in the cycle. The third entry is **2**, so the remainder is **2**.\n\nWatch the counting: a remainder of 0 in \"\\(47 \\bmod 4\\)\" would put you at the *end* of a cycle\n(position 4, remainder 1), not the start. Here the remainder is 3, giving position 3.", + "hints": [ + "Compute the remainders of \\(3^1, 3^2, 3^3, \\dots\\) mod 5 until they repeat.", + "Divide the exponent by the cycle length; the remainder tells you the position within the cycle." + ] + }, + { + "id": "quant-number-properties-remainders-0022", + "section": "quant", + "topic": "number-properties", + "subtopic": "remainders", + "type": "problem-solving", + "difficulty": "hard", + "tags": [ + "remainders", + "simultaneous-conditions" + ], + "choices": { + "A": "12", + "B": "16", + "C": "17", + "D": "22", + "E": "27" + }, + "parts": null, + "answer": "D", + "author": "openmat", + "reviewers": [], + "status": "in-review", + "prompt": "A positive integer \\(N\\) leaves a remainder of 2 when divided by 5 and a remainder of 1 when\ndivided by 3. What is the least value of \\(N\\) greater than 10?", + "explanation": "Handle the two conditions together by listing one and testing it against the other.\n\nNumbers that leave remainder 2 when divided by 5: \\(2, 7, 12, 17, 22, 27, \\dots\\)\n\nNow keep only those that also leave remainder 1 when divided by 3:\n\n- \\(2 \\to 2 \\bmod 3 = 2\\) ✗\n- \\(7 \\to 7 \\bmod 3 = 1\\) ✓\n- \\(12 \\to 12 \\bmod 3 = 0\\) ✗\n- \\(17 \\to 17 \\bmod 3 = 2\\) ✗\n- \\(22 \\to 22 \\bmod 3 = 1\\) ✓\n\nBoth conditions hold at \\(N = 7\\), and then again every \\(\\text{lcm}(5, 3) = 15\\): \\(7, 22, 37, \\dots\\)\nThe smallest such value **greater than 10** is **22**.\n\nCheck: \\(22 = 4 \\times 5 + 2\\) (remainder 2 mod 5 ✓) and \\(22 = 7 \\times 3 + 1\\) (remainder 1 mod 3 ✓).\n\nThe distractors each satisfy only one condition: 12 and 27 leave remainder 2 mod 5 but are\ndivisible by 3; 17 leaves remainder 2 mod 5 but remainder 2 (not 1) mod 3; 16 leaves remainder 1\nmod 5. Only 22 satisfies both.", + "hints": [ + "List the numbers satisfying one condition, then test each against the other — don't try to guess.", + "Once you find the first value that works, the next ones repeat every \\(\\text{lcm}\\) of the two divisors." + ] + }, { "id": "quant-statistics-descriptive-0009", "section": "quant", @@ -436,6 +693,7 @@ "D": "87", "E": "88" }, + "parts": null, "answer": "C", "author": "openmat", "reviewers": [], @@ -466,6 +724,7 @@ "D": "24", "E": "66" }, + "parts": null, "answer": "C", "author": "openmat", "reviewers": [], @@ -495,6 +754,7 @@ "D": "15", "E": "17" }, + "parts": null, "answer": "C", "author": "openmat", "reviewers": [], @@ -525,6 +785,7 @@ "D": "43", "E": "47" }, + "parts": null, "answer": "D", "author": "openmat", "reviewers": [], @@ -555,6 +816,7 @@ "D": "{1, 5, 6, 7, 11}", "E": "{5, 6, 6, 6, 7}" }, + "parts": null, "answer": "D", "author": "openmat", "reviewers": [], @@ -585,6 +847,7 @@ "D": "60", "E": "Cannot be determined from the information given" }, + "parts": null, "answer": "A", "author": "openmat", "reviewers": [], @@ -614,6 +877,7 @@ "D": "10", "E": "12" }, + "parts": null, "answer": "C", "author": "openmat", "reviewers": [], @@ -643,6 +907,7 @@ "D": "52 mph", "E": "55 mph" }, + "parts": null, "answer": "B", "author": "openmat", "reviewers": [], @@ -672,6 +937,7 @@ "D": "5 hours", "E": "10 hours" }, + "parts": null, "answer": "B", "author": "openmat", "reviewers": [], @@ -701,6 +967,7 @@ "D": "Neighboring counties do not impose a tax on sugary drinks.", "E": "Obesity is a problem that taxation is unable to solve." }, + "parts": null, "answer": "A", "author": "openmat", "reviewers": [], @@ -730,6 +997,7 @@ "D": "The new dedicated lane will be used exclusively by buses and by no other vehicles.", "E": "Commute times on streets other than Main Street will be unaffected by the change." }, + "parts": null, "answer": "B", "author": "openmat", "reviewers": [], @@ -759,6 +1027,7 @@ "D": "relies on data from a single year, which may be too short a period to judge a trend.", "E": "fails to specify exactly which acts the city classifies as theft." }, + "parts": null, "answer": "A", "author": "openmat", "reviewers": [], @@ -789,6 +1058,7 @@ "D": "Some items from last season's collection are in the front window display.", "E": "Every item that is on sale is in the front window display." }, + "parts": null, "answer": "A", "author": "openmat", "reviewers": [], @@ -818,6 +1088,7 @@ "D": "At a nearby company that did not install standing desks, reported back pain was unchanged over the same six months.", "E": "Back pain is among the most common reasons for missed workdays in office jobs." }, + "parts": null, "answer": "B", "author": "openmat", "reviewers": [], @@ -847,6 +1118,7 @@ "D": "completing the entire round-trip migration within one generation", "E": "increasing the total distance the butterflies are able to travel" }, + "parts": null, "answer": "A", "author": "openmat", "reviewers": [], @@ -876,6 +1148,7 @@ "D": "compare the severity of traffic congestion across several major cities", "E": "trace the development of economic thought over the past two centuries" }, + "parts": null, "answer": "A", "author": "openmat", "reviewers": [], @@ -905,6 +1178,7 @@ "D": "neutral, presenting both sides without offering any judgment", "E": "alarmed by the risks the apps pose to their users" }, + "parts": null, "answer": "A", "author": "openmat", "reviewers": [], @@ -934,6 +1208,39 @@ "status": "in-review", "body": "## Overview\n\nData Sufficiency (part of Data Insights on the GMAT Focus Edition) doesn't ask you to *solve* —\nit asks whether you *could*. You're given a question and two statements, and you decide which\nstatements provide enough information to answer it. The five answer choices are always the same,\nso learn them cold.\n\n## The five answer choices\n\n- **A** — Statement (1) ALONE is sufficient, but statement (2) alone is not.\n- **B** — Statement (2) ALONE is sufficient, but statement (1) alone is not.\n- **C** — BOTH statements TOGETHER are sufficient, but NEITHER alone is.\n- **D** — EACH statement ALONE is sufficient.\n- **E** — The statements TOGETHER are still NOT sufficient.\n\n## Core concepts\n\n**\"Sufficient\" means a single, definite answer.** For a *value* question (\"what is \\(x\\)?\"), a\nstatement is sufficient only if it pins down exactly one value. For a *yes/no* question (\"is\n\\(n\\) even?\"), a statement is sufficient if it always gives the same answer — a definite \"yes\" and\na definite \"no\" are *both* sufficient. An \"it depends\" is insufficient.\n\n**Use the AD / BCE decision tree.** Test statement (1) first:\n\n- If (1) is sufficient, the answer is **A or D**. (Now test (2): sufficient → D, not → A.)\n- If (1) is not sufficient, the answer is **B, C, or E**. (Test (2): if sufficient → B; if not, test them together → C if enough, E if not.)\n\n**Evaluate each statement independently first.** Don't let information from statement (1) leak\ninto your judgment of statement (2). Only combine them in the final \"together\" step.\n\n## Worked example\n\n*Is the integer \\(n\\) even?* (1) \\(n^2\\) is even. (2) \\(3n\\) is even.\n\n- (1): odd² is odd, so \\(n^2\\) even forces \\(n\\) even → definite \"yes\" → **sufficient**.\n- (2): 3 is odd, so \\(3n\\) even forces \\(n\\) even → definite \"yes\" → **sufficient**.\n\nEach alone gives a definite answer → **D**.\n\n## Common traps\n\n- **The C-trap.** Combining the statements often *feels* safe, but if either works alone the\n answer is A, B, or D — and picking C loses the point. Always test each alone first.\n- **Solving too far.** You don't need the actual value, only whether it's *determined*. Stop as\n soon as you know a unique answer exists.\n- **Forgetting yes/no can be \"definitely no.\"** A statement that guarantees \"no\" is sufficient.\n\n## Key takeaways\n\n- Memorize the five choices and the AD/BCE tree.\n- \"Sufficient\" = yields one definite answer (value) or a consistent yes/no.\n- Judge each statement alone before combining; beware the reflex to choose C." }, + { + "id": "data-insights-table-analysis-ratios-thresholds", + "section": "data-insights", + "topic": "table-analysis", + "subtopic": "ratios-thresholds", + "title": "Table Analysis: Ratios & Thresholds", + "tags": [ + "table-analysis", + "percent-change", + "ratios", + "thresholds" + ], + "author": "openmat", + "reviewers": [], + "status": "in-review", + "body": "## Overview\n\nTable Analysis presents a sortable table and a set of **Yes/No** (or True/False) statements you\nmust judge one at a time. Each row of statements is graded independently, so a single question is\nreally several mini-questions. The skill is reading the table precisely and testing each claim with\nthe least arithmetic possible.\n\n## Core concepts\n\n**Read the claim's quantifier first.** \"Every,\" \"at least one,\" \"the greatest,\" \"more than\" — the\nquantifier tells you what evidence settles the claim. An \"every\"/\"all\" claim is disproved by **one**\ncounterexample; a \"there exists\" claim is proved by one supporting case. Find that one case fast.\n\n**Percent change is measured against the original.** For a jump from an old value to a new value,\n\n\\[\\text{percent change} = \\frac{\\text{new} - \\text{old}}{\\text{old}} \\times 100\\%.\\]\n\nAlways divide by the **old** value, not the new one — the most common table-analysis error.\n\n**Turn a threshold into a target number.** Instead of computing an exact percent, convert \"more than\n40% above 90\" into a concrete bar: 40% of 90 is 36, so the target is \\(90 + 36 = 126\\). Now you just\ncompare: is the new value above 126? This is faster and less error-prone than dividing.\n\n**Only compute what the claim needs.** You rarely need every cell. For \"greatest two-quarter total,\"\nsum each store's two columns and compare — ignore everything else.\n\n## Worked examples\n\nUsing a table with Q1/Q2 units — Alpha (120, 150), Beta (200, 180), Gamma (90, 140):\n\n**\"Every store grew in Q2.\" → No.** Beta fell from 200 to 180. One counterexample settles it; you\nneedn't check the others once you find it.\n\n**\"Beta had the greatest two-quarter total.\" → Yes.** Totals: 270, 380, 230. Beta's 380 wins.\n\n**\"Gamma rose more than 40% from Q1 to Q2.\" → Yes.** Threshold: 40% of 90 = 36, target 126. Since\n\\(140 > 126\\), the increase clears 40%. (Exact: \\(50/90 \\approx 55.6\\%\\).)\n\n## Common traps\n\n- **Dividing by the new value** when finding percent change — use the original as the base.\n- **Over-computing.** Don't calculate every percent; convert thresholds to target numbers and compare.\n- **Treating the statements as linked.** Each Yes/No row stands alone — judge it on its own evidence.\n\n## Key takeaways\n\n- Let the quantifier (\"every,\" \"at least one,\" \"greatest\") tell you what evidence to look for.\n- Percent change divides by the **original** value.\n- Convert a percent threshold into a concrete target number, then just compare.\n- Evaluate each statement independently and compute only what that statement requires." + }, + { + "id": "data-insights-two-part-analysis-simultaneous-conditions", + "section": "data-insights", + "topic": "two-part-analysis", + "subtopic": "simultaneous-conditions", + "title": "Two-Part Analysis: Simultaneous Conditions", + "tags": [ + "two-part-analysis", + "system-of-equations", + "simultaneous-conditions" + ], + "author": "openmat", + "reviewers": [], + "status": "in-review", + "body": "## Overview\n\nTwo-Part Analysis questions give you a single scenario and ask for **two** answers — one per\ncolumn — chosen from a shared list of options. The two answers are usually linked, so the trap is\npicking a value that satisfies one condition while quietly breaking the other. Treat the two\ncolumns as **one system** to solve, not two independent questions.\n\n## Core concepts\n\n**Translate each condition into an equation or inequality.** Most two-part prompts hand you two\nconstraints. Name a variable for each column and write one relation per constraint. Two linked\nconstraints in two unknowns almost always pin down a unique pair.\n\n**Solve the system, don't guess-and-check one column.** With two linear equations, use elimination\n(add or subtract to cancel a variable) or substitution. A pair that fits only the first equation is\nexactly the distractor the question is built around.\n\n**Watch what each column actually asks for.** The columns can request different things — a value\nand a rate, a \"before\" and an \"after,\" a minimum and a maximum. Read the column headers carefully;\nthe two answers are not always the same *kind* of quantity.\n\n**Verify against every condition.** Before committing, plug your two answers back into **all** the\nconstraints, including the one you didn't use to solve. This single habit catches most two-part\nmistakes.\n\n## Worked examples\n\n**A linked system.** Two receipts: \\(2n + j = 7\\) and \\(n + 2j = 8\\). Adding gives\n\\(3n + 3j = 15\\), so \\(n + j = 5\\); subtracting that from the first gives \\(n = 2\\), hence \\(j = 3\\).\nCheck the second equation: \\(2 + 2(3) = 8\\). ✓ Column 1 = 2, Column 2 = 3.\n\n**Guarding against a partial fit.** In the example above, \\((n, j) = (3, 1)\\) satisfies the first\nreceipt (\\(2(3) + 1 = 7\\)) but not the second (\\(3 + 2 = 5 \\ne 8\\)). Only a pair that clears **both**\nconditions is correct.\n\n## Common traps\n\n- **Solving one column in isolation.** The columns are coupled — find the pair, not two separate answers.\n- **Grabbing the first pair that fits one equation.** Always test against the other condition too.\n- **Mixing up the columns.** Confirm which quantity each column wants before you select.\n\n## Key takeaways\n\n- Assign one variable per column and turn each condition into an equation or inequality.\n- Solve the constraints as a single system (elimination/substitution), then verify against all of them.\n- The classic distractor satisfies one condition but not the other — a full check kills it." + }, { "id": "quant-algebra-linear-equations", "section": "quant", @@ -984,6 +1291,40 @@ "status": "in-review", "body": "## Overview\n\nPercents and ratios are the most frequently tested arithmetic ideas on GMAT Focus Quant, and\nthey hide inside word problems everywhere. Master three moves: converting between forms, handling\npercent *change*, and scaling ratios.\n\n## Core concepts\n\n**Percent as a factor.** A percent is just a number over 100. The fastest way to apply a percent\nchange is to turn it into a **multiplier**:\n\n- Increase by \\(r\\%\\): multiply by \\(1 + \\tfrac{r}{100}\\). (+25% → \\(\\times 1.25\\))\n- Decrease by \\(r\\%\\): multiply by \\(1 - \\tfrac{r}{100}\\). (−20% → \\(\\times 0.80\\))\n\n**Successive changes multiply.** Two changes in a row are multiplied, never added:\n\n\\[(+25\\%)\\text{ then }(-20\\%): \\quad 1.25 \\times 0.80 = 1.00 \\quad (\\text{no net change})\\]\n\n**Percent change formula.**\n\n\\[\\text{percent change} = \\frac{\\text{new} - \\text{old}}{\\text{old}} \\times 100\\%\\]\n\nAlways divide by the **original** value, not the new one.\n\n**Ratios scale together.** A ratio \\(a : b\\) means the quantities are \\(ak\\) and \\(bk\\) for some\nmultiplier \\(k\\). If boys : girls \\(= 3 : 5\\) and there are 24 boys, then \\(k = 8\\), so there are\n\\(5 \\times 8 = 40\\) girls.\n\n## Worked examples\n\n**Percent change.** A stock rises from $80 to $100. Percent increase \\(= \\tfrac{100 - 80}{80} = \\tfrac{20}{80} = 25\\%\\).\nNote it later falls from $100 back to $80: that's \\(\\tfrac{-20}{100} = -20\\%\\) — a *smaller* percent, because the base is now larger.\n\n**Ratio scaling.** A recipe uses flour : sugar \\(= 7 : 2\\). To use 21 cups of flour, \\(k = 3\\), so\nyou need \\(2 \\times 3 = 6\\) cups of sugar.\n\n## Common traps\n\n- **Adding successive percents.** +25% then −20% is *not* +5%; it's \\(1.25 \\times 0.80 = 1.00\\).\n- **Wrong base.** Percent change always divides by the original amount. A rise then an equal-percent fall does not return to the start.\n- **Ratio ≠ actual count.** \\(3 : 5\\) does not mean 3 and 5 — it means \\(3k\\) and \\(5k\\). Find \\(k\\) first.\n\n## Key takeaways\n\n- Convert percent changes to multipliers and multiply them for successive changes.\n- Percent change = (new − old) / old.\n- A ratio \\(a : b\\) represents \\(ak\\) and \\(bk\\); solve for the multiplier \\(k\\), then scale." }, + { + "id": "quant-number-properties-odds-evens-signs", + "section": "quant", + "topic": "number-properties", + "subtopic": "odds-evens-signs", + "title": "Odds, Evens & Signs", + "tags": [ + "parity", + "odd-even", + "signs", + "positive-negative" + ], + "author": "openmat", + "reviewers": [], + "status": "in-review", + "body": "## Overview\n\nMany GMAT Focus Quant questions never ask you to compute a value — they ask what *must* be true\nabout whether an expression is odd or even, or positive or negative. These are **parity** and\n**sign** questions. You almost never need the actual numbers; you only need to track two-state\ninformation (odd/even, +/−) through the arithmetic. Learn the rules and you can answer in seconds.\n\n## Core concepts\n\n**Parity rules (odd/even).** An even number is a multiple of 2; an odd number is not. The only\nrules you need:\n\n- **Addition/subtraction:** the result is odd exactly when you combine one odd and one even.\n even ± even = even, odd ± odd = even, even ± odd = **odd**.\n- **Multiplication:** a product is even if *any* factor is even. It is odd only when *every*\n factor is odd. So \\(\\text{even} \\times \\text{anything} = \\text{even}\\).\n\nA useful consequence: \\(n(n+1)\\), the product of two **consecutive** integers, is always even —\none of any two consecutive integers is even. Likewise \\(n^2\\) has the same parity as \\(n\\).\n\n**Sign rules (positive/negative).** For a product or quotient, only the *count of negative\nfactors* matters:\n\n- An **even** number of negative factors → the result is **positive**.\n- An **odd** number of negative factors → the result is **negative**.\n\nZero is neither positive nor negative, and any product containing a zero factor is zero. Watch\nfor it — \"\\(xy > 0\\)\" quietly tells you neither \\(x\\) nor \\(y\\) is 0, while \"\\(xy \\ge 0\\)\" does not.\n\n**Recovering one sign from a product.** If you know the sign of a whole product and the signs of\nall but one factor, you can solve for the last one. If \\(abc > 0\\) and \\(bc < 0\\), then\n\\(a = \\dfrac{abc}{bc} = \\dfrac{(+)}{(-)} < 0\\).\n\n## Worked examples\n\n**Parity of an expression.** Is \\(n^2 + n + 1\\) odd or even for every integer \\(n\\)?\n\\(n^2 + n = n(n+1)\\) is a product of consecutive integers, so it is always even. Adding 1 makes\nthe whole expression **always odd** — no need to test cases.\n\n**Signs from constraints.** If \\(x < 0\\) and \\(xy^2 z > 0\\), what is the sign of \\(z\\)?\nSince \\(y^2 \\ge 0\\) and the product is nonzero, \\(y^2 > 0\\) (positive). The product's sign is\n\\((\\text{sign of } x)(\\text{sign of } y^2)(\\text{sign of } z) = (-)(+)(\\text{sign of } z) > 0\\),\nso \\(z\\) must be **negative**.\n\n## Common traps\n\n- **Assuming a variable is an integer.** Parity rules apply only to integers. If a problem\n doesn't say \"integer,\" \\(x\\) could be \\(2.5\\) and \"odd/even\" is meaningless.\n- **Forgetting even × odd = even.** A product is even as soon as *one* factor is even; you do not\n need both.\n- **Losing zero.** \\(x^2 \\ge 0\\), not \\(> 0\\), unless you know \\(x \\ne 0\\). A stray zero flips a\n \"must be positive\" into \"could be zero.\"\n- **Squares don't erase parity.** \\(n^2\\) is odd when \\(n\\) is odd. Squaring changes the sign\n situation (never negative) but not the parity.\n\n## Key takeaways\n\n- Sum/difference is odd only when mixing one odd and one even; a product is even whenever any\n factor is even.\n- \\(n(n+1)\\) is always even; \\(n^2\\) has the same parity as \\(n\\).\n- For products/quotients, count the negatives: even count → positive, odd count → negative.\n- Track only the two-state information (odd/even, +/−); you rarely need the actual values." + }, + { + "id": "quant-number-properties-remainders", + "section": "quant", + "topic": "number-properties", + "subtopic": "remainders", + "title": "Remainders", + "tags": [ + "remainders", + "division", + "modular-arithmetic", + "cyclicity" + ], + "author": "openmat", + "reviewers": [], + "status": "in-review", + "body": "## Overview\n\nRemainder questions look intimidating but reduce to one equation and a few habits. The GMAT loves\nthem because they reward structure over brute force: you can answer \"what is the remainder when\n\\(3^{47}\\) is divided by 5?\" without ever computing \\(3^{47}\\).\n\n## Core concepts\n\n**The division identity.** When a positive integer \\(n\\) is divided by a positive integer \\(d\\),\nthere is a unique quotient \\(q\\) and remainder \\(r\\) with\n\n\\[n = qd + r, \\qquad 0 \\le r < d.\\]\n\nThe remainder is always at least 0 and strictly less than the divisor. Whenever a problem says\n\"the remainder is \\(r\\) when divided by \\(d\\),\" immediately write \\(n = qd + r\\) — that single\nsubstitution unlocks most questions.\n\n**Remainders add and multiply.** You can do arithmetic on remainders directly (this is modular\narithmetic). If \\(n\\) leaves remainder \\(r\\) on division by \\(d\\), then to find the remainder of\n\\(an + b\\), just compute \\(ar + b\\) and reduce mod \\(d\\). Substituting \\(n = qd + r\\) shows why:\nthe \\(qd\\) part is divisible by \\(d\\) and contributes nothing to the remainder.\n\n**Cyclicity of powers.** Remainders of \\(a^1, a^2, a^3, \\dots\\) on division by \\(d\\) eventually\nrepeat in a fixed-length cycle. Find the cycle, then use the exponent's position within it. For\n\\(3^k \\bmod 5\\): the remainders are \\(3, 4, 2, 1, 3, 4, 2, 1, \\dots\\) — a cycle of length 4. To get\n\\(3^{47}\\), note \\(47 = 4(11) + 3\\), so \\(3^{47}\\) sits at position 3 in the cycle → remainder \\(2\\).\n\n**Combining two conditions.** \"Leaves remainder 2 mod 5 and remainder 1 mod 3\" defines a single\nfamily of numbers. List the smaller list and check it against the other condition:\n\\(\\{2, 7, 12, 17, 22, \\dots\\}\\) against \"\\(\\equiv 1 \\bmod 3\\)\" first hits at \\(7\\), and then every\n\\(15\\) (\\(= 5 \\times 3\\)) after that: \\(7, 22, 37, \\dots\\).\n\n## Worked examples\n\n**Linear expression.** When \\(n\\) is divided by 7 the remainder is 4. What is the remainder when\n\\(3n + 5\\) is divided by 7? Work with the remainder: \\(3(4) + 5 = 17\\), and \\(17 = 2(7) + 3\\), so\nthe remainder is **3**. (Check with \\(n = 11\\): \\(3(11)+5 = 38 = 5(7)+3\\). ✓)\n\n**Power.** Remainder of \\(7^{100}\\) mod 4? \\(7 \\equiv 3 \\bmod 4\\), and powers of 3 mod 4 cycle\n\\(3, 1, 3, 1, \\dots\\) (length 2). Even exponent → position 2 → remainder **1**.\n\n## Common traps\n\n- **Remainder ≥ divisor.** A remainder must be less than the divisor. If your work gives a\n remainder of 17 when dividing by 7, reduce it (\\(17 \\to 3\\)).\n- **Multiplying then forgetting to reduce.** \\(3 \\times 4 + 5 = 17\\) is not the answer mod 7 —\n reduce it to 3.\n- **Assuming a unique number.** \"Remainder 3 when divided by 5\" describes infinitely many numbers\n (\\(3, 8, 13, \\dots\\)); pick the smallest that fits, or keep it as \\(5q + 3\\).\n- **Miscounting the cycle position.** If the cycle has length 4 and the exponent is a multiple of\n 4, you are at the *end* of the cycle (position 4), not position 0.\n\n## Key takeaways\n\n- Write \\(n = qd + r\\) with \\(0 \\le r < d\\) the moment a remainder is mentioned.\n- Do arithmetic on the remainders themselves, then reduce mod \\(d\\).\n- For powers, find the repeating cycle of remainders and use the exponent's position in it.\n- For two simultaneous remainder conditions, list one and test against the other; solutions repeat\n every \\(\\text{lcm}\\) of the divisors." + }, { "id": "quant-statistics-descriptive", "section": "quant", diff --git a/docs/style.css b/docs/style.css index 5dac373..b950355 100644 --- a/docs/style.css +++ b/docs/style.css @@ -181,6 +181,13 @@ h2.view-title { font-size: 1.5rem; margin: 8px 0 4px; letter-spacing: -0.01em; } .choice.wrong .letter { color: var(--bad); } .choice:disabled { cursor: default; } +/* Multi-part answering (two-part-analysis, table-analysis, …) */ +.parts { margin-top: 20px; display: grid; gap: 18px; } +.part-block { display: grid; gap: 8px; } +.part-label { font-weight: 700; color: var(--muted); font-size: 0.9rem; letter-spacing: 0.02em; } +.part-options { margin: 0; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); } +.part-choice { justify-content: center; text-align: center; } + .verdict { margin-top: 20px; padding: 14px 16px; border-radius: 12px; font-weight: 600; } .verdict.correct { background: var(--good-soft); color: var(--good); } .verdict.wrong { background: var(--bad-soft); color: var(--bad); } diff --git a/scripts/build.mjs b/scripts/build.mjs index 50cf5c6..10ff344 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -152,6 +152,10 @@ async function buildQuestions() { difficulty: data.difficulty, tags: Array.isArray(data.tags) ? data.tags : [], choices: data.choices && typeof data.choices === 'object' ? data.choices : null, + // Multi-part formats (two-part-analysis, table-analysis, …) declare one + // option list per part: { PartKey: "Opt A|Opt B|Opt C" }. Passed through + // so the study site can render a selector per part and grade them together. + parts: data.parts && typeof data.parts === 'object' ? data.parts : null, answer: String(data.answer ?? ''), author: data.author || '', reviewers: Array.isArray(data.reviewers) ? data.reviewers : [],