{
"version": "1.0.0",
"tasks": [
{
"id": "num-001",
"category": "numeric",
"difficulty": 1,
"weight": 1,
"time_limit_s": 45,
"prompt": {
"text": "2, 4, 6, 8, ?",
"svg": null
},
"choices": [
{
"text": "7",
"svg": null
},
{
"text": "9",
"svg": null
},
{
"text": "10",
"svg": null
},
{
"text": "12",
"svg": null
}
],
"answer_index": 2,
"explanation": "Arithmetic progression: +2 each step."
},
{
"id": "num-002",
"category": "numeric",
"difficulty": 1,
"weight": 1,
"time_limit_s": 45,
"prompt": {
"text": "1, 3, 5, 7, ?",
"svg": null
},
"choices": [
{
"text": "8",
"svg": null
},
{
"text": "9",
"svg": null
},
{
"text": "10",
"svg": null
},
{
"text": "11",
"svg": null
}
],
"answer_index": 1,
"explanation": "Odd numbers: +2 each step."
},
{
"id": "num-003",
"category": "numeric",
"difficulty": 2,
"weight": 2,
"time_limit_s": 45,
"prompt": {
"text": "3, 6, 12, 24, ?",
"svg": null
},
"choices": [
{
"text": "30",
"svg": null
},
{
"text": "36",
"svg": null
},
{
"text": "48",
"svg": null
},
{
"text": "64",
"svg": null
}
],
"answer_index": 2,
"explanation": "Each term doubles: ×2."
},
{
"id": "num-004",
"category": "numeric",
"difficulty": 2,
"weight": 2,
"time_limit_s": 45,
"prompt": {
"text": "1, 1, 2, 3, 5, 8, ?",
"svg": null
},
"choices": [
{
"text": "11",
"svg": null
},
{
"text": "12",
"svg": null
},
{
"text": "13",
"svg": null
},
{
"text": "14",
"svg": null
}
],
"answer_index": 2,
"explanation": "Fibonacci: each term is the sum of the two before it (5+8=13)."
},
{
"id": "num-005",
"category": "numeric",
"difficulty": 2,
"weight": 2,
"time_limit_s": 45,
"prompt": {
"text": "81, 64, 49, 36, ?",
"svg": null
},
"choices": [
{
"text": "16",
"svg": null
},
{
"text": "25",
"svg": null
},
{
"text": "28",
"svg": null
},
{
"text": "30",
"svg": null
}
],
"answer_index": 1,
"explanation": "Descending perfect squares: 9², 8², 7², 6², 5²=25."
},
{
"id": "num-006",
"category": "numeric",
"difficulty": 3,
"weight": 3,
"time_limit_s": 60,
"prompt": {
"text": "2, 3, 5, 9, 17, ?",
"svg": null
},
"choices": [
{
"text": "31",
"svg": null
},
{
"text": "32",
"svg": null
},
{
"text": "33",
"svg": null
},
{
"text": "34",
"svg": null
}
],
"answer_index": 2,
"explanation": "Differences double: +1, +2, +4, +8, +16 → 17+16=33."
},
{
"id": "num-007",
"category": "numeric",
"difficulty": 3,
"weight": 3,
"time_limit_s": 60,
"prompt": {
"text": "4, 7, 13, 25, ?",
"svg": null
},
"choices": [
{
"text": "37",
"svg": null
},
{
"text": "43",
"svg": null
},
{
"text": "49",
"svg": null
},
{
"text": "51",
"svg": null
}
],
"answer_index": 2,
"explanation": "Differences double: +3, +6, +12, +24 → 25+24=49."
},
{
"id": "num-008",
"category": "numeric",
"difficulty": 3,
"weight": 3,
"time_limit_s": 60,
"prompt": {
"text": "1, 4, 9, 16, 25, ?",
"svg": null
},
"choices": [
{
"text": "30",
"svg": null
},
{
"text": "32",
"svg": null
},
{
"text": "36",
"svg": null
},
{
"text": "49",
"svg": null
}
],
"answer_index": 2,
"explanation": "Perfect squares: 6²=36."
},
{
"id": "num-009",
"category": "numeric",
"difficulty": 4,
"weight": 4,
"time_limit_s": 75,
"prompt": {
"text": "2, 6, 12, 20, 30, ?",
"svg": null
},
"choices": [
{
"text": "36",
"svg": null
},
{
"text": "40",
"svg": null
},
{
"text": "42",
"svg": null
},
{
"text": "44",
"svg": null
}
],
"answer_index": 2,
"explanation": "n(n+1): 1·2, 2·3, 3·4, 4·5, 5·6, 6·7=42. Also +4,+6,+8,+10,+12."
},
{
"id": "num-010",
"category": "numeric",
"difficulty": 5,
"weight": 5,
"time_limit_s": 90,
"prompt": {
"text": "1, 2, 6, 24, 120, ?",
"svg": null
},
"choices": [
{
"text": "240",
"svg": null
},
{
"text": "360",
"svg": null
},
{
"text": "600",
"svg": null
},
{
"text": "720",
"svg": null
}
],
"answer_index": 3,
"explanation": "Factorials: 1!, 2!, 3!, 4!, 5!, 6!=720."
},
{
"id": "mat-001",
"category": "matrix",
"difficulty": 1,
"weight": 1,
"time_limit_s": 45,
"prompt": {
"text": "How many circles should replace the question mark?",
"svg": "<svg viewBox='0 0 230 44' xmlns='http://www.w3.org/2000/svg'><circle cx='25' cy='22' r='11' fill='#111'/><circle cx='65' cy='22' r='11' fill='#111'/><circle cx='90' cy='22' r='11' fill='#111'/><circle cx='130' cy='22' r='11' fill='#111'/><circle cx='155' cy='22' r='11' fill='#111'/><circle cx='180' cy='22' r='11' fill='#111'/><text x='215' y='28' font-size='18' fill='#111'>?</text></svg>"
},
"choices": [
{
"text": "4 circles",
"svg": "<svg viewBox='0 0 170 40' xmlns='http://www.w3.org/2000/svg'><circle cx='15' cy='20' r='11' fill='#111'/><circle cx='55' cy='20' r='11' fill='#111'/><circle cx='95' cy='20' r='11' fill='#111'/><circle cx='135' cy='20' r='11' fill='#111'/></svg>"
},
{
"text": "5 circles",
"svg": "<svg viewBox='0 0 210 40' xmlns='http://www.w3.org/2000/svg'><circle cx='15' cy='20' r='11' fill='#111'/><circle cx='55' cy='20' r='11' fill='#111'/><circle cx='95' cy='20' r='11' fill='#111'/><circle cx='135' cy='20' r='11' fill='#111'/><circle cx='175' cy='20' r='11' fill='#111'/></svg>"
},
{
"text": "3 circles",
"svg": "<svg viewBox='0 0 130 40' xmlns='http://www.w3.org/2000/svg'><circle cx='15' cy='20' r='11' fill='#111'/><circle cx='55' cy='20' r='11' fill='#111'/><circle cx='95' cy='20' r='11' fill='#111'/></svg>"
},
{
"text": "2 circles",
"svg": "<svg viewBox='0 0 90 40' xmlns='http://www.w3.org/2000/svg'><circle cx='15' cy='20' r='11' fill='#111'/><circle cx='55' cy='20' r='11' fill='#111'/></svg>"
}
],
"answer_index": 0,
"explanation": "Count grows by one each step: 1, 2, 3 → 4."
},
{
"id": "mat-002",
"category": "matrix",
"difficulty": 2,
"weight": 2,
"time_limit_s": 60,
"prompt": {
"text": "Which figure continues the sequence?",
"svg": "<svg viewBox='0 0 160 44' xmlns='http://www.w3.org/2000/svg'><polygon points='25.0,6.0 37.1,27.0 12.9,27.0' fill='none' stroke='#111' stroke-width='2'/><polygon points='75.0,6.0 89.0,20.0 75.0,34.0 61.0,20.0' fill='none' stroke='#111' stroke-width='2'/><polygon points='125.0,6.0 138.3,15.7 133.2,31.3 116.8,31.3 111.7,15.7' fill='none' stroke='#111' stroke-width='2'/></svg>"
},
"choices": [
{
"text": "Hexagon",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><polygon points='20.0,6.0 32.1,13.0 32.1,27.0 20.0,34.0 7.9,27.0 7.9,13.0' fill='none' stroke='#111' stroke-width='2'/></svg>"
},
{
"text": "Heptagon",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><polygon points='20.0,6.0 30.9,11.3 33.6,23.1 26.1,32.6 13.9,32.6 6.4,23.1 9.1,11.3' fill='none' stroke='#111' stroke-width='2'/></svg>"
},
{
"text": "Circle",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><circle cx='20' cy='20' r='14' fill='none' stroke='#111' stroke-width='2'/></svg>"
},
{
"text": "Square",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><polygon points='20.0,6.0 34.0,20.0 20.0,34.0 6.0,20.0' fill='none' stroke='#111' stroke-width='2'/></svg>"
}
],
"answer_index": 0,
"explanation": "Number of sides increases by one: 3, 4, 5 → 6."
},
{
"id": "mat-003",
"category": "matrix",
"difficulty": 2,
"weight": 2,
"time_limit_s": 60,
"prompt": {
"text": "Which arrow comes next?",
"svg": "<svg viewBox='0 0 140 40' xmlns='http://www.w3.org/2000/svg'><g transform='translate(0,0)'>viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><g transform='rotate(0 20 20)'><path d='M20 5 L31 23 L24.5 23 L24.5 35 L15.5 35 L15.5 23 L9 23 Z' fill='#111' stroke='none' stroke-width='2'/></g></g><g transform='translate(50,0)'>viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><g transform='rotate(90 20 20)'><path d='M20 5 L31 23 L24.5 23 L24.5 35 L15.5 35 L15.5 23 L9 23 Z' fill='white' stroke='#111' stroke-width='2'/></g></g><g transform='translate(100,0)'>viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><g transform='rotate(180 20 20)'><path d='M20 5 L31 23 L24.5 23 L24.5 35 L15.5 35 L15.5 23 L9 23 Z' fill='#111' stroke='none' stroke-width='2'/></g></g></svg>"
},
"choices": [
{
"text": "Left",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><g transform='rotate(270 20 20)'><path d='M20 5 L31 23 L24.5 23 L24.5 35 L15.5 35 L15.5 23 L9 23 Z' fill='#111' stroke='none' stroke-width='2'/></g></svg>"
},
{
"text": "Up",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><g transform='rotate(0 20 20)'><path d='M20 5 L31 23 L24.5 23 L24.5 35 L15.5 35 L15.5 23 L9 23 Z' fill='#111' stroke='none' stroke-width='2'/></g></svg>"
},
{
"text": "Right",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><g transform='rotate(90 20 20)'><path d='M20 5 L31 23 L24.5 23 L24.5 35 L15.5 35 L15.5 23 L9 23 Z' fill='#111' stroke='none' stroke-width='2'/></g></svg>"
},
{
"text": "Down",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><g transform='rotate(180 20 20)'><path d='M20 5 L31 23 L24.5 23 L24.5 35 L15.5 35 L15.5 23 L9 23 Z' fill='#111' stroke='none' stroke-width='2'/></g></svg>"
}
],
"answer_index": 0,
"explanation": "The arrow rotates 90° clockwise each step: up, right, down → left."
},
{
"id": "mat-004",
"category": "matrix",
"difficulty": 3,
"weight": 3,
"time_limit_s": 60,
"prompt": {
"text": "Which circle comes next?",
"svg": "<svg viewBox='0 0 220 40' xmlns='http://www.w3.org/2000/svg'>viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><circle cx='20' cy='20' r='14' fill='#111'/><g transform='translate(50,0)'>viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><circle cx='20' cy='20' r='14' fill='none' stroke='#111' stroke-width='2'/><path d='M20 6 A14 14 0 0 1 20 34 Z' fill='#111'/></g><g transform='translate(100,0)'>viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><circle cx=20 cy=20 r=14 fill=none stroke=#111 stroke-width=2/></g><g transform='translate(150,0)'>viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><circle cx=20 cy=20 r=14 fill=#111/></g><text x='205' y='26' font-size='18' fill='#111'>?</text></svg>"
},
"choices": [
{
"text": "Half-filled",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><circle cx='20' cy='20' r='14' fill='none' stroke='#111' stroke-width='2'/><path d='M20 6 A14 14 0 0 1 20 34 Z' fill='#111'/></svg>"
},
{
"text": "Fully filled",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><circle cx='20' cy='20' r='14' fill='#111'/></svg>"
},
{
"text": "Empty",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><circle cx='20' cy='20' r='14' fill='none' stroke='#111' stroke-width='2'/></svg>"
},
{
"text": "Half-filled, other side",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><circle cx='20' cy='20' r='14' fill='none' stroke='#111' stroke-width='2'/><path d='M20 6 A14 14 0 0 0 20 34 Z' fill='#111'/></svg>"
}
],
"answer_index": 0,
"explanation": "Cycle of three: full, half, empty — after the 4th (full) comes half."
},
{
"id": "mat-005",
"category": "matrix",
"difficulty": 3,
"weight": 3,
"time_limit_s": 60,
"prompt": {
"text": "What number replaces the question mark?\n4 9 16\n25 36 49\n64 ? 100",
"svg": null
},
"choices": [
{
"text": "72",
"svg": null
},
{
"text": "81",
"svg": null
},
{
"text": "83",
"svg": null
},
{
"text": "90",
"svg": null
}
],
"answer_index": 1,
"explanation": "Perfect squares in reading order: 2²…10²; missing is 9²=81."
},
{
"id": "mat-006",
"category": "matrix",
"difficulty": 3,
"weight": 3,
"time_limit_s": 60,
"prompt": {
"text": "What letter replaces the question mark?\nB D F\nH J L\nN P ?",
"svg": null
},
"choices": [
{
"text": "Q",
"svg": null
},
{
"text": "R",
"svg": null
},
{
"text": "S",
"svg": null
},
{
"text": "T",
"svg": null
}
],
"answer_index": 1,
"explanation": "Each row skips one letter and continues from the previous row: …N, P, R."
},
{
"id": "mat-007",
"category": "matrix",
"difficulty": 4,
"weight": 4,
"time_limit_s": 75,
"prompt": {
"text": "Which arrow comes next? (Fill matters.)",
"svg": "<svg viewBox='0 0 170 40' xmlns='http://www.w3.org/2000/svg'><g transform='translate(0,0)'>viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><g transform='rotate(0 20 20)'><path d='M20 5 L31 23 L24.5 23 L24.5 35 L15.5 35 L15.5 23 L9 23 Z' fill='#111' stroke='none' stroke-width='2'/></g></g><g transform='translate(50,0)'>viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><g transform='rotate(90 20 20)'><path d='M20 5 L31 23 L24.5 23 L24.5 35 L15.5 35 L15.5 23 L9 23 Z' fill='white' stroke='#111' stroke-width='2'/></g></g><g transform='translate(100,0)'>viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><g transform='rotate(180 20 20)'><path d='M20 5 L31 23 L24.5 23 L24.5 35 L15.5 35 L15.5 23 L9 23 Z' fill='#111' stroke='none' stroke-width='2'/></g></g><text x='155' y='26' font-size='18' fill='#111'>?</text></svg>"
},
"choices": [
{
"text": "Left, empty",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><g transform='rotate(270 20 20)'><path d='M20 5 L31 23 L24.5 23 L24.5 35 L15.5 35 L15.5 23 L9 23 Z' fill='white' stroke='#111' stroke-width='2'/></g></svg>"
},
{
"text": "Left, filled",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><g transform='rotate(270 20 20)'><path d='M20 5 L31 23 L24.5 23 L24.5 35 L15.5 35 L15.5 23 L9 23 Z' fill='#111' stroke='none' stroke-width='2'/></g></svg>"
},
{
"text": "Up, empty",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><g transform='rotate(0 20 20)'><path d='M20 5 L31 23 L24.5 23 L24.5 35 L15.5 35 L15.5 23 L9 23 Z' fill='white' stroke='#111' stroke-width='2'/></g></svg>"
},
{
"text": "Down, empty",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><g transform='rotate(180 20 20)'><path d='M20 5 L31 23 L24.5 23 L24.5 35 L15.5 35 L15.5 23 L9 23 Z' fill='white' stroke='#111' stroke-width='2'/></g></svg>"
}
],
"answer_index": 0,
"explanation": "Two combined rules: rotate 90° clockwise; fill alternates filled/empty. 4th arrow: left, empty."
},
{
"id": "mat-008",
"category": "matrix",
"difficulty": 4,
"weight": 4,
"time_limit_s": 75,
"prompt": {
"text": "Which figure completes the matrix?",
"svg": "<svg viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'><rect x='0' y='0' width='100' height='100' fill='none' stroke='#bbb'/><line x1='50' y1='0' x2='50' y2='100' stroke='#bbb'/><line x1='0' y1='50' x2='100' y2='50' stroke='#bbb'/><polygon points='25.0,18.0 32.0,25.0 25.0,32.0 18.0,25.0' fill='none' stroke='#111' stroke-width='2'/><polygon points='75.0,12.0 88.0,25.0 75.0,38.0 62.0,25.0' fill='none' stroke='#111' stroke-width='2'/><circle cx='25' cy='75' r='7' fill='none' stroke='#111' stroke-width='2'/><text x='75' y='82' font-size='24' fill='#111' text-anchor='middle'>?</text></svg>"
},
"choices": [
{
"text": "Big circle",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><circle cx='20' cy='20' r='14' fill='none' stroke='#111' stroke-width='2'/></svg>"
},
{
"text": "Small circle",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><circle cx='20' cy='20' r='6' fill='none' stroke='#111' stroke-width='2'/></svg>"
},
{
"text": "Big square",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><polygon points='20.0,6.0 34.0,20.0 20.0,34.0 6.0,20.0' fill='none' stroke='#111' stroke-width='2'/></svg>"
},
{
"text": "Small triangle",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><polygon points='20.0,10.0 28.7,25.0 11.3,25.0' fill='none' stroke='#111' stroke-width='2'/></svg>"
}
],
"answer_index": 0,
"explanation": "Rows: size grows (small → big). Columns: shape stays (squares top, circles bottom). Missing: big circle."
},
{
"id": "mat-009",
"category": "matrix",
"difficulty": 4,
"weight": 4,
"time_limit_s": 75,
"prompt": {
"text": "What number replaces the question mark?\n3 5 8\n4 7 11\n5 9 ?",
"svg": null
},
"choices": [
{
"text": "12",
"svg": null
},
{
"text": "13",
"svg": null
},
{
"text": "14",
"svg": null
},
{
"text": "15",
"svg": null
}
],
"answer_index": 2,
"explanation": "Third column = first + second: 3+5=8, 4+7=11, 5+9=14."
},
{
"id": "mat-010",
"category": "matrix",
"difficulty": 5,
"weight": 5,
"time_limit_s": 90,
"prompt": {
"text": "Panel C must combine panels A and B by XOR: a position gets a dot only if it appears in exactly one of A, B. Which is C?",
"svg": "<svg viewBox='0 0 230 40' xmlns='http://www.w3.org/2000/svg'><g transform='translate(0,0)'>viewBox='0 0 60 40' xmlns='http://www.w3.org/2000/svg'><text x='4' y='12' font-size='11' fill='#666'>A</text><circle cx='10' cy='26' r='6' fill='#111'/><circle cx='30' cy='26' r='6' fill='#111'/></g><g transform='translate(70,0)'>viewBox='0 0 60 40' xmlns='http://www.w3.org/2000/svg'><text x='4' y='12' font-size='11' fill='#666'>B</text><circle cx='30' cy='26' r='6' fill='#111'/><circle cx='50' cy='26' r='6' fill='#111'/></g><g transform='translate(140,0)'>viewBox='0 0 60 40' xmlns='http://www.w3.org/2000/svg'><text x='4' y='12' font-size='11' fill='#666'>C</text></g><text x='215' y='30' font-size='18' fill='#111'>?</text></svg>"
},
"choices": [
{
"text": "Dots at 1 and 3",
"svg": "<svg viewBox='0 0 60 40' xmlns='http://www.w3.org/2000/svg'><circle cx='10' cy='26' r='6' fill='#111'/><circle cx='50' cy='26' r='6' fill='#111'/></svg>"
},
{
"text": "Dot at 2 only",
"svg": "<svg viewBox='0 0 60 40' xmlns='http://www.w3.org/2000/svg'><circle cx='30' cy='26' r='6' fill='#111'/></svg>"
},
{
"text": "Dots at 1, 2 and 3",
"svg": "<svg viewBox='0 0 60 40' xmlns='http://www.w3.org/2000/svg'><circle cx='10' cy='26' r='6' fill='#111'/><circle cx='30' cy='26' r='6' fill='#111'/><circle cx='50' cy='26' r='6' fill='#111'/></svg>"
},
{
"text": "No dots",
"svg": "<svg viewBox='0 0 60 40' xmlns='http://www.w3.org/2000/svg'></svg>"
}
],
"answer_index": 0,
"explanation": "A={1,2}, B={2,3}; XOR keeps positions present in exactly one set: {1,3}."
},
{
"id": "ver-001",
"category": "verbal",
"difficulty": 1,
"weight": 1,
"time_limit_s": 40,
"prompt": {
"text": "Which word does not belong?",
"svg": null
},
"choices": [
{
"text": "apple",
"svg": null
},
{
"text": "banana",
"svg": null
},
{
"text": "carrot",
"svg": null
},
{
"text": "cherry",
"svg": null
}
],
"answer_index": 2,
"explanation": "Carrot is a vegetable; the rest are fruits."
},
{
"id": "ver-002",
"category": "verbal",
"difficulty": 1,
"weight": 1,
"time_limit_s": 40,
"prompt": {
"text": "kitten : cat :: puppy : ?",
"svg": null
},
"choices": [
{
"text": "dog",
"svg": null
},
{
"text": "wolf",
"svg": null
},
{
"text": "horse",
"svg": null
},
{
"text": "kitten",
"svg": null
}
],
"answer_index": 0,
"explanation": "A kitten is a young cat; a puppy is a young dog."
},
{
"id": "ver-003",
"category": "verbal",
"difficulty": 2,
"weight": 2,
"time_limit_s": 40,
"prompt": {
"text": "Which word does not belong?",
"svg": null
},
"choices": [
{
"text": "triangle",
"svg": null
},
{
"text": "square",
"svg": null
},
{
"text": "circle",
"svg": null
},
{
"text": "pentagon",
"svg": null
}
],
"answer_index": 2,
"explanation": "A circle has no straight sides or vertices; the rest are polygons."
},
{
"id": "ver-004",
"category": "verbal",
"difficulty": 2,
"weight": 2,
"time_limit_s": 40,
"prompt": {
"text": "author : book :: composer : ?",
"svg": null
},
"choices": [
{
"text": "symphony",
"svg": null
},
{
"text": "orchestra",
"svg": null
},
{
"text": "piano",
"svg": null
},
{
"text": "conductor",
"svg": null
}
],
"answer_index": 0,
"explanation": "An author creates a book; a composer creates a symphony."
},
{
"id": "ver-005",
"category": "verbal",
"difficulty": 2,
"weight": 2,
"time_limit_s": 40,
"prompt": {
"text": "thermometer : temperature :: barometer : ?",
"svg": null
},
"choices": [
{
"text": "humidity",
"svg": null
},
{
"text": "pressure",
"svg": null
},
{
"text": "wind",
"svg": null
},
{
"text": "rainfall",
"svg": null
}
],
"answer_index": 1,
"explanation": "A thermometer measures temperature; a barometer measures pressure."
},
{
"id": "ver-006",
"category": "verbal",
"difficulty": 3,
"weight": 3,
"time_limit_s": 50,
"prompt": {
"text": "Which word does not belong?",
"svg": null
},
"choices": [
{
"text": "run",
"svg": null
},
{
"text": "walk",
"svg": null
},
{
"text": "swim",
"svg": null
},
{
"text": "think",
"svg": null
}
],
"answer_index": 3,
"explanation": "Think is a mental process; the rest are physical activities."
},
{
"id": "ver-007",
"category": "verbal",
"difficulty": 3,
"weight": 3,
"time_limit_s": 50,
"prompt": {
"text": "All roses fade. Some flowers fade. Which conclusion necessarily follows?",
"svg": null
},
"choices": [
{
"text": "All flowers are roses",
"svg": null
},
{
"text": "Some flowers are roses",
"svg": null
},
{
"text": "No flower is a rose",
"svg": null
},
{
"text": "None of these necessarily follows",
"svg": null
}
],
"answer_index": 3,
"explanation": "The premises do not force any overlap between roses and flowers beyond what is stated; none of A–C is entailed."
},
{
"id": "ver-008",
"category": "verbal",
"difficulty": 4,
"weight": 4,
"time_limit_s": 60,
"prompt": {
"text": "A, C, F, J, O, ?",
"svg": null
},
"choices": [
{
"text": "S",
"svg": null
},
{
"text": "T",
"svg": null
},
{
"text": "U",
"svg": null
},
{
"text": "V",
"svg": null
}
],
"answer_index": 2,
"explanation": "Gaps grow: +2, +3, +4, +5, +6 → O(15)+6=U(21)."
},
{
"id": "ver-009",
"category": "verbal",
"difficulty": 4,
"weight": 4,
"time_limit_s": 60,
"prompt": {
"text": "No artists are cheap. Some cheap things are useful. Which conclusion necessarily follows?",
"svg": null
},
"choices": [
{
"text": "Some useful things are not artists",
"svg": null
},
{
"text": "All useful things are artists",
"svg": null
},
{
"text": "Some artists are useful",
"svg": null
},
{
"text": "None of these necessarily follows",
"svg": null
}
],
"answer_index": 0,
"explanation": "Take a useful cheap thing: it is cheap, and no artist is cheap, so it is not an artist."
},
{
"id": "ver-010",
"category": "verbal",
"difficulty": 5,
"weight": 5,
"time_limit_s": 75,
"prompt": {
"text": "In a certain code CAT is written DBU (each letter shifts +1). How is DOG written?",
"svg": null
},
"choices": [
{
"text": "EPH",
"svg": null
},
{
"text": "EPG",
"svg": null
},
{
"text": "FPH",
"svg": null
},
{
"text": "DPH",
"svg": null
}
],
"answer_index": 0,
"explanation": "D→E, O→P, G→H."
},
{
"id": "spa-001",
"category": "spatial",
"difficulty": 1,
"weight": 1,
"time_limit_s": 60,
"prompt": {
"text": "How many triangles are in the figure?",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><polygon points='20,4 36,34 4,34' fill='none' stroke='#111' stroke-width='2'/><line x1='12' y1='19' x2='28' y2='19' stroke='#111' stroke-width='1.5'/><line x1='28' y1='19' x2='20' y2='34' stroke='#111' stroke-width='1.5'/><line x1='12' y1='19' x2='20' y2='34' stroke='#111' stroke-width='1.5'/></svg>"
},
"choices": [
{
"text": "4",
"svg": null
},
{
"text": "5",
"svg": null
},
{
"text": "6",
"svg": null
},
{
"text": "8",
"svg": null
}
],
"answer_index": 1,
"explanation": "4 small triangles + 1 large outer triangle = 5."
},
{
"id": "spa-002",
"category": "spatial",
"difficulty": 2,
"weight": 2,
"time_limit_s": 60,
"prompt": {
"text": "The figure can be rotated in the plane but never flipped (mirrored). Which option is the same figure?",
"svg": "<svg viewBox='0 0 46 46' xmlns='http://www.w3.org/2000/svg'><rect x='2' y='2' width='42' height='42' fill='none' stroke='#bbb' stroke-width='1'/><rect x='2' y='2' width='14' height='14' fill='#111'/><rect x='2' y='16' width='14' height='14' fill='#111'/><rect x='2' y='30' width='14' height='14' fill='#111'/><rect x='16' y='30' width='14' height='14' fill='#111'/></svg>"
},
"choices": [
{
"text": "A",
"svg": "<svg viewBox='0 0 46 46' xmlns='http://www.w3.org/2000/svg'><rect x='2' y='2' width='42' height='42' fill='none' stroke='#bbb' stroke-width='1'/><rect x='30' y='2' width='14' height='14' fill='#111'/><rect x='16' y='2' width='14' height='14' fill='#111'/><rect x='2' y='2' width='14' height='14' fill='#111'/><rect x='2' y='16' width='14' height='14' fill='#111'/></svg>"
},
{
"text": "B",
"svg": "<svg viewBox='0 0 46 46' xmlns='http://www.w3.org/2000/svg'><rect x='2' y='2' width='42' height='42' fill='none' stroke='#bbb' stroke-width='1'/><rect x='16' y='2' width='14' height='14' fill='#111'/><rect x='16' y='16' width='14' height='14' fill='#111'/><rect x='16' y='30' width='14' height='14' fill='#111'/><rect x='2' y='30' width='14' height='14' fill='#111'/></svg>"
},
{
"text": "C",
"svg": "<svg viewBox='0 0 46 46' xmlns='http://www.w3.org/2000/svg'><rect x='2' y='2' width='42' height='42' fill='none' stroke='#bbb' stroke-width='1'/><rect x='2' y='2' width='14' height='14' fill='#111'/><rect x='16' y='2' width='14' height='14' fill='#111'/><rect x='30' y='2' width='14' height='14' fill='#111'/><rect x='16' y='16' width='14' height='14' fill='#111'/></svg>"
},
{
"text": "D",
"svg": "<svg viewBox='0 0 46 46' xmlns='http://www.w3.org/2000/svg'><rect x='2' y='2' width='42' height='42' fill='none' stroke='#bbb' stroke-width='1'/><rect x='16' y='2' width='14' height='14' fill='#111'/><rect x='30' y='2' width='14' height='14' fill='#111'/><rect x='2' y='16' width='14' height='14' fill='#111'/><rect x='16' y='16' width='14' height='14' fill='#111'/></svg>"
}
],
"answer_index": 0,
"explanation": "Option A is the original rotated 90° clockwise. B is its mirror image; C and D are different shapes."
},
{
"id": "spa-003",
"category": "spatial",
"difficulty": 1,
"weight": 1,
"time_limit_s": 60,
"prompt": {
"text": "How many edges does a triangular prism have?",
"svg": null
},
"choices": [
{
"text": "6",
"svg": null
},
{
"text": "8",
"svg": null
},
{
"text": "9",
"svg": null
},
{
"text": "12",
"svg": null
}
],
"answer_index": 2,
"explanation": "2 triangular bases (3+3 edges) + 3 side edges = 9."
},
{
"id": "spa-004",
"category": "spatial",
"difficulty": 3,
"weight": 3,
"time_limit_s": 75,
"prompt": {
"text": "Which net folds into a cube?",
"svg": null
},
"choices": [
{
"text": "A",
"svg": "<svg viewBox='0 0 68 52' xmlns='http://www.w3.org/2000/svg'><rect x='2' y='18' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='18' y='18' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='34' y='18' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='50' y='18' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='18' y='2' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='18' y='34' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/></svg>"
},
{
"text": "B",
"svg": "<svg viewBox='0 0 52 36' xmlns='http://www.w3.org/2000/svg'><rect x='2' y='2' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='18' y='2' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='34' y='2' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='2' y='18' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='18' y='18' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='34' y='18' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/></svg>"
},
{
"text": "C",
"svg": "<svg viewBox='0 0 100 20' xmlns='http://www.w3.org/2000/svg'><rect x='2' y='2' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='18' y='2' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='34' y='2' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='50' y='2' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='66' y='2' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='82' y='2' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/></svg>"
},
{
"text": "D",
"svg": "<svg viewBox='0 0 68 36' xmlns='http://www.w3.org/2000/svg'><rect x='2' y='18' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='18' y='18' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='34' y='18' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='50' y='18' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='18' y='2' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/><rect x='34' y='2' width='16' height='16' fill='#e8e8e8' stroke='#111' stroke-width='1.5'/></svg>"
}
],
"answer_index": 0,
"explanation": "A is the classic cross net. B (2×3 block) and C (1×6 strip) overlap faces; D has two tabs covering the same face."
},
{
"id": "spa-005",
"category": "spatial",
"difficulty": 3,
"weight": 3,
"time_limit_s": 75,
"prompt": {
"text": "A 3×3×3 cube is painted on the outside, then cut into 27 unit cubes. How many unit cubes have exactly two painted faces?",
"svg": null
},
"choices": [
{
"text": "6",
"svg": null
},
{
"text": "12",
"svg": null
},
{
"text": "18",
"svg": null
},
{
"text": "27",
"svg": null
}
],
"answer_index": 1,
"explanation": "Exactly-two-face cubes sit on edges (not corners): 12 edges × 1 middle cube = 12."
},
{
"id": "spa-006",
"category": "spatial",
"difficulty": 2,
"weight": 2,
"time_limit_s": 60,
"prompt": {
"text": "Which flag is the original rotated 180°? (No flipping allowed.)",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><line x1='10' y1='5' x2='10' y2='35' stroke='#111' stroke-width='2'/><polygon points='10,5 30,12 10,19' fill='#111'/></svg>"
},
"choices": [
{
"text": "A",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><line x1='30' y1='5' x2='30' y2='35' stroke='#111' stroke-width='2'/><polygon points='30,35 10,28 30,21' fill='#111'/></svg>"
},
{
"text": "B",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><line x1='30' y1='5' x2='30' y2='35' stroke='#111' stroke-width='2'/><polygon points='30,5 10,12 30,19' fill='#111'/></svg>"
},
{
"text": "C",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><line x1='10' y1='5' x2='10' y2='35' stroke='#111' stroke-width='2'/><polygon points='10,5 30,12 10,19' fill='#111'/></svg>"
},
{
"text": "D",
"svg": "<svg viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'><line x1='10' y1='5' x2='10' y2='35' stroke='#111' stroke-width='2'/><polygon points='10,35 30,28 10,21' fill='#111'/></svg>"
}
],
"answer_index": 0,
"explanation": "A is the 180° rotation: pole on the right, pennant pointing left at the bottom. B and D are mirrors; C is the original."
},
{
"id": "spa-007",
"category": "spatial",
"difficulty": 2,
"weight": 2,
"time_limit_s": 60,
"prompt": {
"text": "How many faces does a square pyramid have?",
"svg": null
},
"choices": [
{
"text": "4",
"svg": null
},
{
"text": "5",
"svg": null
},
{
"text": "6",
"svg": null
},
{
"text": "8",
"svg": null
}
],
"answer_index": 1,
"explanation": "1 square base + 4 triangular sides = 5."
},
{
"id": "spa-008",
"category": "spatial",
"difficulty": 3,
"weight": 3,
"time_limit_s": 75,
"prompt": {
"text": "Each stack is one unit cube deep. How many cubes are shown in total?",
"svg": "<svg viewBox='0 0 56 56' xmlns='http://www.w3.org/2000/svg'><rect x='4' y='40' width='12' height='12' fill='none' stroke='#111' stroke-width='1.5'/><rect x='4' y='28' width='12' height='12' fill='none' stroke='#111' stroke-width='1.5'/><rect x='4' y='16' width='12' height='12' fill='none' stroke='#111' stroke-width='1.5'/><rect x='4' y='4' width='12' height='12' fill='none' stroke='#111' stroke-width='1.5'/><rect x='16' y='40' width='12' height='12' fill='none' stroke='#111' stroke-width='1.5'/><rect x='16' y='28' width='12' height='12' fill='none' stroke='#111' stroke-width='1.5'/><rect x='28' y='40' width='12' height='12' fill='none' stroke='#111' stroke-width='1.5'/><rect x='28' y='28' width='12' height='12' fill='none' stroke='#111' stroke-width='1.5'/><rect x='28' y='16' width='12' height='12' fill='none' stroke='#111' stroke-width='1.5'/><rect x='40' y='40' width='12' height='12' fill='none' stroke='#111' stroke-width='1.5'/></svg>"
},
"choices": [
{
"text": "8",
"svg": null
},
{
"text": "9",
"svg": null
},
{
"text": "10",
"svg": null
},
{
"text": "12",
"svg": null
}
],
"answer_index": 2,
"explanation": "Columns of 4, 2, 3, 1: 4+2+3+1=10."
},
{
"id": "spa-009",
"category": "spatial",
"difficulty": 4,
"weight": 4,
"time_limit_s": 90,
"prompt": {
"text": "A square sheet is folded in half along the vertical dashed line (left half over right). A hole is punched at the marked position through all layers. Where are the holes after unfolding?",
"svg": "<svg viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'><rect x='4' y='4' width='52' height='52' fill='none' stroke='#111' stroke-width='2'/><line x1='30' y1='4' x2='30' y2='56' stroke='#999' stroke-width='1.5' stroke-dasharray='4 3'/><circle cx='15' cy='15' r='4' fill='#111'/></svg>"
},
"choices": [
{
"text": "A",
"svg": "<svg viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'><rect x='4' y='4' width='52' height='52' fill='none' stroke='#111' stroke-width='2'/><circle cx='15' cy='15' r='4' fill='#111'/><circle cx='45' cy='15' r='4' fill='#111'/></svg>"
},
{
"text": "B",
"svg": "<svg viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'><rect x='4' y='4' width='52' height='52' fill='none' stroke='#111' stroke-width='2'/><circle cx='15' cy='15' r='4' fill='#111'/><circle cx='15' cy='45' r='4' fill='#111'/></svg>"
},
{
"text": "C",
"svg": "<svg viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'><rect x='4' y='4' width='52' height='52' fill='none' stroke='#111' stroke-width='2'/><circle cx='15' cy='15' r='4' fill='#111'/><circle cx='45' cy='45' r='4' fill='#111'/></svg>"
},
{
"text": "D",
"svg": "<svg viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'><rect x='4' y='4' width='52' height='52' fill='none' stroke='#111' stroke-width='2'/><circle cx='15' cy='15' r='4' fill='#111'/></svg>"
}
],
"answer_index": 0,
"explanation": "Unfolding mirrors the hole across the fold line: two holes at the same height, symmetric left-right."
},
{
"id": "spa-010",
"category": "spatial",
"difficulty": 5,
"weight": 5,
"time_limit_s": 120,
"prompt": {
"text": "A cube is painted: top and bottom red, one pair of opposite sides green, the other pair blue. It is cut into 27 unit cubes. How many unit cubes have exactly one green face?",
"svg": null
},
"choices": [
{
"text": "2",
"svg": null
},
{
"text": "4",
"svg": null
},
{
"text": "6",
"svg": null
},
{
"text": "8",
"svg": null
}
],
"answer_index": 0,
"explanation": "Only the center cube of each green face has exactly one green face (edge-adjacent cubes touch red or blue too): 2 faces × 1 = 2."
}
]
}