{
  "schema": "ml-prep/catalog@2",
  "generated_at": "build-time",
  "capabilities": {
    "browser_bridge": "window.mlPrepAgent@1",
    "search": "https://mlprep.iwase.dev/data/search.json",
    "screening": "https://mlprep.iwase.dev/screening/",
    "screening_results": "https://mlprep.iwase.dev/screening/results/",
    "practice": "https://mlprep.iwase.dev/practice/",
    "custom_sets": "https://mlprep.iwase.dev/browse/",
    "local_storage": "IndexedDB"
  },
  "scope": {
    "release": {
      "version": "1.0.0"
    },
    "areas": [
      {
        "id": "mathematics",
        "title": "Mathematics",
        "summary": "Study the calculus, linear algebra, probability, and statistics used in machine learning.",
        "topics": [
          "linear-algebra",
          "calculus",
          "probability",
          "statistics"
        ]
      },
      {
        "id": "programming",
        "title": "Programming",
        "summary": "Study Python, control flow, core data structures, and recursion.",
        "topics": [
          "python",
          "control-flow",
          "data-structures",
          "recursion"
        ]
      },
      {
        "id": "machine-learning",
        "title": "Machine Learning",
        "summary": "Study core models, objectives, optimization methods, and evaluation concepts.",
        "topics": [
          "regression",
          "classification",
          "gradient-descent",
          "optimization",
          "neural-networks",
          "convolution",
          "dimensionality-reduction",
          "unsupervised-learning",
          "theory"
        ]
      }
    ],
    "topics": [
      {
        "id": "calculus",
        "area": "mathematics",
        "title": "Calculus",
        "summary": "Differentiate, approximate, and optimize scalar and vector-valued functions.",
        "recommended_sources": [
          "mit-18-02sc-f2010"
        ],
        "skills": [
          "limits",
          "continuity",
          "single-variable-differentiation",
          "single-variable-integration",
          "partial-derivatives",
          "gradient",
          "directional-derivative",
          "jacobian",
          "multivariable-chain-rule",
          "taylor-approximation",
          "hessian",
          "calculus-stationary-points",
          "unconstrained-optimization",
          "calculus-convexity",
          "constrained-optimization",
          "implicit-differentiation",
          "matrix-calculus"
        ]
      },
      {
        "id": "linear-algebra",
        "area": "mathematics",
        "title": "Linear Algebra",
        "summary": "Move between algebraic, geometric, and spectral views of matrices.",
        "recommended_sources": [
          "mit-18-06-s2010"
        ],
        "skills": [
          "matrix-operations",
          "linear-systems",
          "row-reduction",
          "rank",
          "subspaces",
          "rank-nullity",
          "linear-independence",
          "basis-dimension",
          "inverse",
          "determinant",
          "trace",
          "change-of-basis",
          "orthogonality",
          "projection",
          "least-squares",
          "qr",
          "eigenvalues",
          "eigenvectors",
          "diagonalization",
          "symmetric-matrices",
          "quadratic-forms",
          "positive-definite-semidefinite",
          "svd",
          "low-rank-approximation",
          "pca-via-svd",
          "matrix-norms"
        ]
      },
      {
        "id": "probability",
        "area": "mathematics",
        "title": "Probability",
        "summary": "Reason from events and conditioning through multivariate random variables and limit theorems.",
        "recommended_sources": [
          "mit-18-05-s2022",
          "harvard-stat110-f2011"
        ],
        "skills": [
          "counting",
          "event-algebra",
          "inclusion-exclusion",
          "conditional-probability",
          "total-probability",
          "bayes-rule",
          "probabilistic-independence",
          "discrete-random-variables",
          "pmf",
          "cdf",
          "continuous-random-variables",
          "pdf",
          "named-distributions",
          "transformations",
          "joint-distributions",
          "marginal-distributions",
          "conditional-distributions",
          "expectation",
          "variance",
          "covariance",
          "correlation",
          "conditional-expectation",
          "law-total-expectation",
          "law-total-variance",
          "sums-of-random-variables",
          "law-of-large-numbers",
          "central-limit-theorem",
          "multivariate-gaussian"
        ]
      },
      {
        "id": "statistics",
        "area": "mathematics",
        "title": "Statistics",
        "summary": "Derive estimators and interpret uncertainty, tests, and simple models.",
        "recommended_sources": [
          "mit-18-05-s2022",
          "pml-book1-2022"
        ],
        "skills": [
          "samples",
          "sample-statistics",
          "sampling-distributions",
          "estimator-bias",
          "estimator-variance",
          "mean-squared-error",
          "consistency",
          "standard-error",
          "likelihood",
          "maximum-likelihood",
          "map",
          "method-of-moments",
          "bayesian-updating",
          "confidence-intervals",
          "null-alternative",
          "type-i-error",
          "type-ii-error",
          "statistical-power",
          "p-values",
          "critical-regions",
          "goodness-of-fit",
          "chi-square",
          "simple-linear-regression"
        ]
      },
      {
        "id": "control-flow",
        "area": "programming",
        "title": "Control Flow",
        "summary": "Trace and write string traversal, branching, and loops accurately.",
        "recommended_sources": [
          "mit-6-100l-f2022"
        ],
        "skills": [
          "conditionals",
          "loops",
          "strings"
        ]
      },
      {
        "id": "data-structures",
        "area": "programming",
        "title": "Data Structures",
        "summary": "Choose and operate Python's built-ins and basic algorithmic containers.",
        "recommended_sources": [
          "mit-6-100l-f2022",
          "leetcode"
        ],
        "skills": [
          "sequence-data-structures",
          "dictionaries",
          "sets",
          "stack",
          "queue",
          "heap",
          "hash-map",
          "binary-search",
          "dfs",
          "bfs"
        ]
      },
      {
        "id": "python",
        "area": "programming",
        "title": "Python",
        "summary": "Understand Python-specific semantics that produce common screening mistakes.",
        "recommended_sources": [
          "mit-6-100l-f2022"
        ],
        "skills": [
          "python-syntax",
          "functions",
          "python-sequence-semantics",
          "mutability",
          "aliasing",
          "shallow-copy",
          "complexity",
          "classes",
          "value-equality"
        ]
      },
      {
        "id": "recursion",
        "area": "programming",
        "title": "Recursion",
        "summary": "Identify base cases, trace calls, and implement recursive decompositions.",
        "recommended_sources": [
          "mit-6-100l-f2022",
          "leetcode"
        ],
        "skills": [
          "base-case",
          "recursive-trace",
          "recursive-implementation"
        ]
      },
      {
        "id": "classification",
        "area": "machine-learning",
        "title": "Classification",
        "summary": "Work with logistic models, losses, decision rules, and metrics.",
        "recommended_sources": [
          "google-mlcc",
          "pml-book1-2022"
        ],
        "skills": [
          "logistic-regression",
          "cross-entropy",
          "decision-boundary",
          "classification-thresholds",
          "confusion-matrix",
          "accuracy",
          "precision-recall"
        ]
      },
      {
        "id": "convolution",
        "area": "machine-learning",
        "title": "Convolution",
        "summary": "Compute convolution outputs, receptive geometry, and parameter counts.",
        "recommended_sources": [
          "mit-6-036-exams"
        ],
        "skills": [
          "convolution-operation",
          "output-shape",
          "padding",
          "stride",
          "convolution-parameter-count",
          "pooling",
          "receptive-field"
        ]
      },
      {
        "id": "dimensionality-reduction",
        "area": "machine-learning",
        "title": "Dimensionality Reduction",
        "summary": "Connect PCA objectives to covariance eigendecomposition and SVD.",
        "recommended_sources": [
          "pml-book1-2022"
        ],
        "skills": [
          "pca-objective",
          "centering",
          "covariance-eigendecomposition",
          "pca-via-svd",
          "explained-variance"
        ]
      },
      {
        "id": "gradient-descent",
        "area": "machine-learning",
        "title": "Gradient Descent",
        "summary": "Compute updates and reason about scale, learning rate, and convergence.",
        "recommended_sources": [
          "google-mlcc",
          "mit-6-036-exams"
        ],
        "skills": [
          "gradient-update",
          "learning-rate",
          "convergence",
          "sgd"
        ]
      },
      {
        "id": "neural-networks",
        "area": "machine-learning",
        "title": "Neural Networks",
        "summary": "Perform forward passes and backpropagate through small networks.",
        "recommended_sources": [
          "google-mlcc",
          "pml-book1-2022",
          "mit-6-036-exams"
        ],
        "skills": [
          "forward-pass",
          "activations",
          "neural-network-chain-rule",
          "backpropagation",
          "neural-network-losses",
          "dense-network-parameter-count"
        ]
      },
      {
        "id": "optimization",
        "area": "machine-learning",
        "title": "Optimization",
        "summary": "Relate objectives, stationary points, convexity, and regularization.",
        "recommended_sources": [
          "mit-6-036-exams",
          "pml-book1-2022"
        ],
        "skills": [
          "objective-functions",
          "optimization-stationary-points",
          "optimization-convexity",
          "optimization-regularization",
          "optimization-diagnostics"
        ]
      },
      {
        "id": "regression",
        "area": "machine-learning",
        "title": "Regression",
        "summary": "Derive and interpret linear regression objectives and estimators.",
        "recommended_sources": [
          "google-mlcc",
          "pml-book1-2022"
        ],
        "skills": [
          "linear-regression",
          "squared-loss",
          "normal-equations",
          "regression-gradient",
          "regression-regularization"
        ]
      },
      {
        "id": "theory",
        "area": "machine-learning",
        "title": "Theory",
        "summary": "Reason about generalization, model complexity, evaluation, and bias–variance.",
        "recommended_sources": [
          "google-mlcc",
          "mit-6-036-exams",
          "pml-book1-2022"
        ],
        "skills": [
          "bias-variance",
          "generalization",
          "overfitting",
          "train-validation-test",
          "model-complexity"
        ]
      },
      {
        "id": "unsupervised-learning",
        "area": "machine-learning",
        "title": "Unsupervised Learning",
        "summary": "Optimize and interpret clustering and latent-variable objectives.",
        "recommended_sources": [
          "pml-book1-2022"
        ],
        "skills": [
          "k-means",
          "clustering-objective",
          "gaussian-mixtures",
          "expectation-maximization"
        ]
      }
    ]
  },
  "screening": {
    "items": [
      {
        "id": "ml-screen-regression-foundation-gradient",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "regression",
        "origin": "original",
        "title": "Squared loss and gradient",
        "skills": [
          "linear-regression",
          "squared-loss",
          "regression-gradient"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 6,
        "prerequisites": [
          "basic-derivatives",
          "vector-arithmetic"
        ],
        "prompt": "For $x=(0,1,2)$, $y=(1,3,5)$, and $\\hat{y}=b+wx$ at $(b,w)=(0,1)$, use\n\n$$\nJ=\\frac{1}{2n}\\sum_{i=1}^{n}(\\hat{y}_i-y_i)^2.\n$$\n\nCompute the predictions, residuals, $J$, and the gradient with respect to $(b,w)$.\n",
        "answer": "The predictions are $(0,1,2)$, so the residuals $\\hat{y}-y$ are $(-1,-2,-3)$. Thus,\n\n$$\nJ=\\frac{1+4+9}{6}=\\frac{7}{3}.\n$$\n\nThe intercept gradient is\n\n$$\n\\frac{\\partial J}{\\partial b}=\\operatorname{mean}(\\hat{y}-y)=-2,\n$$\n\nand the slope gradient is\n\n$$\n\\frac{\\partial J}{\\partial w}=\\operatorname{mean}\\bigl(x(\\hat{y}-y)\\bigr)=-\\frac{8}{3}.\n$$\n\nTherefore, $\\nabla J=(-2,-\\frac{8}{3})$.\n"
      },
      {
        "id": "ml-screen-regression-standard-normal-equations",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "regression",
        "origin": "original",
        "title": "Solve normal equations",
        "skills": [
          "linear-regression",
          "squared-loss",
          "normal-equations"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 8,
        "prerequisites": [
          "matrix-multiplication",
          "linear-systems"
        ],
        "prompt": "Fit $\\hat{y}=b+wx$ by ordinary least squares to $(0,1)$, $(1,2)$, and $(2,2)$. Form $X^{\\mathsf T}X$ and $X^{\\mathsf T}y$ using an intercept column, then solve for $(b,w)$.\n",
        "answer": "The normal-equation quantities are\n\n$$\nX^{\\mathsf T}X=\\begin{bmatrix}3&3\\\\3&5\\end{bmatrix},\\qquad X^{\\mathsf T}y=\\begin{bmatrix}5\\\\6\\end{bmatrix}.\n$$\n\nSolving gives $b=\\frac{7}{6}$ and $w=\\frac{1}{2}$. The fitted values are $(\\frac{7}{6},\\frac{5}{3},\\frac{13}{6})$.\n"
      },
      {
        "id": "ml-screen-regression-advanced-ridge",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "regression",
        "origin": "original",
        "title": "One-dimensional ridge estimate",
        "skills": [
          "linear-regression",
          "normal-equations",
          "regression-regularization"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 10,
        "prerequisites": [
          "derivatives",
          "least-squares"
        ],
        "prompt": "With no intercept, fit $\\hat{y}=wx$ to $(1,1)$ and $(2,3)$ by minimizing\n\n$$\nJ(w)=\\frac{1}{2}\\sum_i(wx_i-y_i)^2+\\frac{\\lambda}{2}w^2\n$$\n\nwith $\\lambda=2$. Derive the minimizer and compare it with the unregularized estimate.\n",
        "answer": "The derivative is\n\n$$\nJ'(w)=(1^2+2^2+2)w-(1\\cdot1+2\\cdot3)=7w-7,\n$$\n\nso the ridge estimate is $w=1$. The unregularized estimate is $\\frac{7}{5}=1.4$. The penalty shrinks the coefficient toward zero. At $w=1$, the data term is $\\frac{1}{2}$, the penalty is $1$, and $J=\\frac{3}{2}$.\n"
      },
      {
        "id": "ml-screen-classification-foundation-logistic",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "classification",
        "origin": "original",
        "title": "Logistic probability and loss",
        "skills": [
          "logistic-regression",
          "cross-entropy",
          "decision-boundary",
          "classification-thresholds"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 5,
        "prerequisites": [
          "logarithms",
          "sigmoid"
        ],
        "prompt": "A binary logistic model has logit $z=w_1x_1+w_2x_2+b$. State its feature-space decision boundary at threshold $0.5$. Then, for an example with $z=\\ln 4$ and $y=0$, compute $P(y=1\\mid x)$, the predicted class, and binary cross-entropy.\n",
        "answer": "Since $\\sigma(z)=0.5$ exactly when $z=0$, the decision boundary is\n\n$$\nw_1x_1+w_2x_2+b=0.\n$$\n\nAlso, $\\sigma(\\ln 4)=\\frac{4}{5}$. Since $\\frac{4}{5}\\ge 0.5$, the predicted class is $1$. For $y=0$, the loss is\n\n$$\n-\\ln\\left(1-\\frac{4}{5}\\right)=\\ln 5\\approx 1.6094379124.\n$$\n"
      },
      {
        "id": "ml-screen-classification-standard-metrics",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "classification",
        "origin": "original",
        "title": "Metrics from a confusion matrix",
        "skills": [
          "confusion-matrix",
          "accuracy",
          "precision-recall"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 6,
        "prerequisites": [
          "fractions"
        ],
        "prompt": "A classifier has $\\mathrm{TP}=18$, $\\mathrm{FP}=6$, $\\mathrm{FN}=2$, and $\\mathrm{TN}=24$. Compute accuracy, precision, recall, specificity, and $F_1$ for the positive class.\n",
        "answer": "There are $50$ examples. The metrics are\n\n$$\n\\begin{aligned}\n\\text{accuracy} &= \\frac{18+24}{50}=0.84,\\\\\n\\text{precision} &= \\frac{18}{24}=0.75,\\\\\n\\text{recall} &= \\frac{18}{20}=0.90,\\\\\n\\text{specificity} &= \\frac{24}{30}=0.80.\n\\end{aligned}\n$$\n\nFinally,\n\n$$\nF_1=\\frac{2\\,\\mathrm{TP}}{2\\,\\mathrm{TP}+\\mathrm{FP}+\\mathrm{FN}}=\\frac{36}{44}=\\frac{9}{11}\\approx 0.8181818.\n$$\n"
      },
      {
        "id": "ml-screen-classification-advanced-cost-threshold",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "classification",
        "origin": "original",
        "title": "Cost-sensitive threshold",
        "skills": [
          "cross-entropy",
          "classification-thresholds"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 10,
        "prerequisites": [
          "conditional-risk",
          "logarithms"
        ],
        "prompt": "A calibrated classifier outputs $p=P(y=1\\mid x)$. A false positive costs $1$, a false negative costs $4$, and correct decisions cost $0$. Derive the threshold for predicting $1$. With ties assigned to class $1$, classify $p=(0.1,0.2,0.7)$. If the labels are $(0,1,0)$, compute mean cross-entropy.\n",
        "answer": "Predicting $1$ costs $1-p$, while predicting $0$ costs $4p$. Thus, predict $1$ when\n\n$$\n1-p\\le 4p,\n$$\n\nor $p\\ge\\frac{1}{5}$. The predictions are $(0,1,1)$. The mean cross-entropy is\n\n$$\n-\\frac{\\ln(0.9)+\\ln(0.2)+\\ln(0.3)}{3}\\approx 0.9729237441.\n$$\n"
      },
      {
        "id": "ml-screen-gradient-descent-foundation-updates",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "gradient-descent",
        "origin": "original",
        "title": "Two gradient updates",
        "skills": [
          "gradient-update",
          "learning-rate"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 4,
        "prerequisites": [
          "derivatives"
        ],
        "prompt": "For $f(w)=(w-4)^2$, start at $w_0=1$ with learning rate $\\eta=\\frac{1}{4}$. Compute $w_1$ and $w_2$.\n",
        "answer": "The derivative is $f'(w)=2(w-4)$. The first gradient is $-6$, so\n\n$$\nw_1=1-\\frac{1}{4}(-6)=\\frac{5}{2}.\n$$\n\nThe next gradient is $-3$, so\n\n$$\nw_2=\\frac{5}{2}-\\frac{1}{4}(-3)=\\frac{13}{4}.\n$$\n\nBoth steps approach $w=4$.\n"
      },
      {
        "id": "ml-screen-gradient-descent-standard-convergence",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "gradient-descent",
        "origin": "original",
        "title": "Learning-rate stability",
        "skills": [
          "gradient-update",
          "learning-rate",
          "convergence"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 8,
        "prerequisites": [
          "quadratics",
          "inequalities"
        ],
        "prompt": "Let $f(u,v)=\\frac{1}{2}(u^2+9v^2)$. Derive the fixed learning-rate interval that converges from every start. From $(1,1)$, compute one update for $\\eta=0.2$ and explain what happens for $\\eta=0.25$.\n",
        "answer": "The updates are\n\n$$\nu_{\\text{next}}=(1-\\eta)u,\\qquad v_{\\text{next}}=(1-9\\eta)v.\n$$\n\nBoth multipliers must have magnitude less than $1$, giving\n\n$$\n0<\\eta<\\frac{2}{9}.\n$$\n\nAt $\\eta=0.2$, the next point is $(0.8,-0.8)$. At $\\eta=0.25$, the $v$ multiplier is $-1.25$, so nonzero $v$ oscillates with growing magnitude and diverges.\n"
      },
      {
        "id": "ml-screen-gradient-descent-advanced-sgd",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "gradient-descent",
        "origin": "original",
        "title": "SGD unbiasedness and variance",
        "skills": [
          "gradient-update",
          "sgd"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 9,
        "prerequisites": [
          "expectation",
          "variance"
        ],
        "prompt": "At $w=2$, three examples have gradients $0$, $4$, and $-2$. One example is sampled uniformly per SGD step. Compute the full gradient, the stochastic-gradient variance, all next iterates for $\\eta=0.3$, and the expected next iterate.\n",
        "answer": "The full gradient is\n\n$$\n\\frac{0+4-2}{3}=\\frac{2}{3}.\n$$\n\nThe variance is\n\n$$\n\\frac{0^2+4^2+(-2)^2}{3}-\\left(\\frac{2}{3}\\right)^2=\\frac{56}{9}.\n$$\n\nThe possible next iterates are $2$, $0.8$, and $2.6$. Their expectation is\n\n$$\n2-0.3\\left(\\frac{2}{3}\\right)=1.8,\n$$\n\nequal to the full-gradient update.\n"
      },
      {
        "id": "ml-screen-optimization-foundation-stationary",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "optimization",
        "origin": "original",
        "title": "Stationary point and convexity",
        "skills": [
          "objective-functions",
          "optimization-stationary-points",
          "optimization-convexity"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 4,
        "prerequisites": [
          "derivatives"
        ],
        "prompt": "For $f(w)=w^2-4w+5$, find all stationary points, determine convexity, and give the global minimum value.\n",
        "answer": "Since $f'(w)=2w-4$, the only stationary point is $w=2$. Because $f''(w)=2>0$ everywhere, $f$ is strictly convex and $w=2$ is the unique global minimizer. The minimum value is $f(2)=1$.\n"
      },
      {
        "id": "ml-screen-optimization-standard-l1-l2",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "optimization",
        "origin": "original",
        "title": "Compare L1 and L2 solutions",
        "skills": [
          "objective-functions",
          "optimization-stationary-points",
          "optimization-convexity",
          "optimization-regularization"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 8,
        "prerequisites": [
          "subgradients",
          "derivatives"
        ],
        "prompt": "Minimize\n\n$$\nJ_1(w)=\\frac{1}{2}(w-3)^2+|w|\\qquad\\text{and}\\qquad J_2(w)=\\frac{1}{2}(w-3)^2+\\frac{1}{2}w^2.\n$$\n\nFind both minimizers and explain their shrinkage behavior.\n",
        "answer": "For $J_1$, the derivative in the positive region is $w-3+1$, which gives $w^*=2$; the subgradient condition confirms the global minimum. For $J_2$, $J_2'(w)=2w-3$, giving $w^*=\\frac{3}{2}$. Both objectives are convex. $L_1$ soft-thresholding can produce exact zeros; $L_2$ gives smooth proportional shrinkage and usually does not produce exact zeros.\n"
      },
      {
        "id": "ml-screen-optimization-advanced-diagnostics",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "optimization",
        "origin": "original",
        "title": "Diagnose optimization traces",
        "skills": [
          "objective-functions",
          "optimization-regularization",
          "optimization-diagnostics"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 8,
        "prerequisites": [
          "gradient-norm",
          "hessian",
          "regularized-objectives"
        ],
        "prompt": "Diagnose and give one action for each trace.\n\n1. Loss is $10,2,9,1,8$; parameter norms grow and gradients stay large.\n2. Loss is stable; the gradient norm is $10^{-8}$; the Hessian is positive definite.\n3. Data-fit loss is low, but the total objective is dominated by a very large $L_2$ penalty.\n",
        "answer": "Trace $1$ indicates an excessively large learning rate; reduce it or use a line search. Trace $2$ is a converged strict local minimum; stop after checking tolerance. Trace $3$ indicates overly strong regularization; reduce the penalty coefficient if validation performance supports the change. The data-fit term alone is not the stated total objective.\n"
      },
      {
        "id": "ml-screen-neural-networks-foundation-forward",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "neural-networks",
        "origin": "original",
        "title": "ReLU forward pass",
        "skills": [
          "forward-pass",
          "activations"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 5,
        "prerequisites": [
          "matrix-vector-multiplication",
          "relu"
        ],
        "prompt": "Let\n\n$$\nz=Wx+b,\\qquad h=\\operatorname{ReLU}(z),\\qquad \\hat{y}=v^{\\mathsf T}h+c,\n$$\n\nwith\n\n$$\nW=\\begin{bmatrix}1&-1\\\\-2&1\\end{bmatrix},\\quad b=(0,1),\\quad x=(2,-1),\\quad v=(2,-1),\\quad c=\\frac{1}{2}.\n$$\n\nCompute $z$, $h$, and $\\hat{y}$.\n",
        "answer": "The preactivation is\n\n$$\nz=Wx+b=(3,-4).\n$$\n\nApplying ReLU gives $h=(3,0)$. Therefore,\n\n$$\n\\hat{y}=2(3)-1(0)+\\frac{1}{2}=\\frac{13}{2}=6.5.\n$$\n"
      },
      {
        "id": "ml-screen-neural-networks-standard-backprop",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "neural-networks",
        "origin": "original",
        "title": "Backpropagate through tanh",
        "skills": [
          "forward-pass",
          "activations",
          "neural-network-chain-rule",
          "backpropagation",
          "neural-network-losses"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 7,
        "prerequisites": [
          "chain-rule",
          "tanh-derivative"
        ],
        "prompt": "A scalar network has $h=\\tanh(wx)$, $\\hat{y}=vh$, and $L=\\frac{1}{2}(\\hat{y}-y)^2$. At $x=1$, $w=0$, $v=2$, and $y=1$, compute the forward pass, $\\frac{\\partial L}{\\partial v}$, and $\\frac{\\partial L}{\\partial w}$.\n",
        "answer": "The forward pass gives $h=0$, $\\hat{y}=0$, and $L=\\frac{1}{2}$. By the chain rule,\n\n$$\n\\frac{\\partial L}{\\partial v}=(\\hat{y}-y)h=0.\n$$\n\nAlso,\n\n$$\n\\frac{\\partial L}{\\partial w}=(\\hat{y}-y)v(1-h^2)x=(-1)(2)(1)(1)=-2.\n$$\n\nThe output weight has zero gradient because its input activation is zero.\n"
      },
      {
        "id": "ml-screen-neural-networks-advanced-softmax",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "neural-networks",
        "origin": "original",
        "title": "Parameters and output gradient",
        "skills": [
          "neural-network-chain-rule",
          "backpropagation",
          "neural-network-losses",
          "dense-network-parameter-count"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 10,
        "prerequisites": [
          "softmax-cross-entropy",
          "outer-products"
        ],
        "prompt": "A dense classifier has $4$ inputs, $3$ hidden units with biases, and $2$ softmax outputs with biases. Count the trainable scalars. For $h=(1,2,0)$, $p=(0.25,0.75)$, and one-hot $y=(1,0)$, compute the cross-entropy gradients for the output logits, output bias, and output weight matrix.\n",
        "answer": "The first layer has $3\\cdot4+3=15$ parameters, and the output layer has $2\\cdot3+2=8$, for a total of $23$. Softmax cross-entropy gives\n\n$$\n\\frac{\\partial L}{\\partial z}=p-y=(-0.75,0.75),\n$$\n\nwhich is also the bias gradient. The weight gradient is\n\n$$\n\\frac{\\partial L}{\\partial W}=(p-y)h^{\\mathsf T}=\\begin{bmatrix}-0.75&-1.5&0\\\\0.75&1.5&0\\end{bmatrix}.\n$$\n"
      },
      {
        "id": "ml-screen-convolution-foundation-operation",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "convolution",
        "origin": "original",
        "title": "Valid convolution output",
        "skills": [
          "convolution-operation"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 5,
        "prerequisites": [
          "matrix-arithmetic"
        ],
        "prompt": "Using the cross-correlation convention common in neural-network libraries, apply\n\n$$\nK=\\begin{bmatrix}1&0\\\\0&-1\\end{bmatrix}\n$$\n\nwith stride $1$ and no padding to\n\n$$\nX=\\begin{bmatrix}1&2&3\\\\4&5&6\\\\7&8&9\\end{bmatrix}.\n$$\n\nGive the output matrix.\n",
        "answer": "Each output is the top-left patch value minus the bottom-right patch value. The output is\n\n$$\n\\begin{bmatrix}1-5&2-6\\\\4-8&5-9\\end{bmatrix}=\\begin{bmatrix}-4&-4\\\\-4&-4\\end{bmatrix}.\n$$\n\nThe kernel is not flipped because the prompt specifies cross-correlation.\n"
      },
      {
        "id": "ml-screen-convolution-standard-shape",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "convolution",
        "origin": "original",
        "title": "Convolution and pooling geometry",
        "skills": [
          "output-shape",
          "padding",
          "stride",
          "convolution-parameter-count",
          "pooling"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 7,
        "prerequisites": [
          "floor-function",
          "tensor-shapes"
        ],
        "prompt": "The input shape is $28\\times28\\times3$. A convolution uses $10$ filters of size $3\\times3$, stride $2$, padding $1$, and one bias per filter. The convolution is followed by $2\\times2$ max pooling with stride $2$ and no padding. Compute the convolution shape, convolution parameter count, and pooled shape.\n",
        "answer": "Each convolution dimension is\n\n$$\n\\left\\lfloor\\frac{28+2(1)-3}{2}\\right\\rfloor+1=14,\n$$\n\nso the convolution shape is $14\\times14\\times10$. The parameter count is\n\n$$\n3\\cdot3\\cdot3\\cdot10+10=280.\n$$\n\nPooling gives $7\\times7\\times10$ and adds no parameters.\n"
      },
      {
        "id": "ml-screen-convolution-advanced-receptive-field",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "convolution",
        "origin": "original",
        "title": "Receptive field through a stack",
        "skills": [
          "output-shape",
          "pooling",
          "receptive-field"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 9,
        "prerequisites": [
          "convolution-output-size",
          "stride"
        ],
        "prompt": "A one-dimensional stack has a width-$3$ convolution with stride $1$, width-$2$ pooling with stride $2$, and a width-$3$ convolution with stride $1$, all without padding. For input length $32$, compute the final length, final receptive-field width, and spacing of adjacent final receptive-field centers in input coordinates.\n",
        "answer": "The lengths are\n\n$$\n32\\to30\\to15\\to13.\n$$\n\nTrack the receptive-field width $r$ and input jump $j$ from $(1,1)$ using\n\n$$\nr_{\\text{new}}=r+(k-1)j,\\qquad j_{\\text{new}}=js.\n$$\n\nThe sequence is\n\n$$\n(1,1)\\to(3,1)\\to(4,2)\\to(8,2).\n$$\n\nThus, the final length is $13$, the receptive-field width is $8$, and the center spacing is $2$.\n"
      },
      {
        "id": "ml-screen-dimensionality-foundation-centering",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "dimensionality-reduction",
        "origin": "original",
        "title": "Center data and find PCA direction",
        "skills": [
          "centering",
          "covariance-eigendecomposition",
          "explained-variance"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 6,
        "prerequisites": [
          "means",
          "covariance",
          "eigenvectors"
        ],
        "prompt": "For the points $(1,0)$, $(3,0)$, and $(5,0)$, compute the mean, centered data, covariance with factor $\\frac{1}{n}$, first principal direction, and its explained-variance fraction.\n",
        "answer": "The mean is $(3,0)$, and the centered points are $(-2,0)$, $(0,0)$, and $(2,0)$. The covariance is\n\n$$\n\\begin{bmatrix}\\frac{8}{3}&0\\\\0&0\\end{bmatrix}.\n$$\n\nA first principal direction is $(1,0)$, with sign reversal equivalent. It captures all nonzero variance, so the explained fraction is $1$.\n"
      },
      {
        "id": "ml-screen-dimensionality-standard-svd",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "dimensionality-reduction",
        "origin": "original",
        "title": "Connect SVD to PCA",
        "skills": [
          "covariance-eigendecomposition",
          "pca-via-svd",
          "explained-variance"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 8,
        "prerequisites": [
          "svd",
          "eigenvalues"
        ],
        "prompt": "For the centered matrix\n\n$$\nX=\\begin{bmatrix}2&0\\\\0&1\\\\-2&0\\\\0&-1\\end{bmatrix},\n$$\n\ncompute $X^{\\mathsf T}X$, the singular values, the first PCA direction, and the first-component explained-variance fraction.\n",
        "answer": "The Gram matrix is\n\n$$\nX^{\\mathsf T}X=\\begin{bmatrix}8&0\\\\0&2\\end{bmatrix},\n$$\n\nso the singular values are $\\sqrt{8}=2\\sqrt{2}$ and $\\sqrt{2}$. The right singular vector for the larger value is $(1,0)$, up to sign, and is the first PCA direction. The explained fraction is\n\n$$\n\\frac{8}{8+2}=\\frac{4}{5}.\n$$\n"
      },
      {
        "id": "ml-screen-dimensionality-advanced-objective",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "dimensionality-reduction",
        "origin": "original",
        "title": "Optimal rank-two PCA",
        "skills": [
          "pca-objective",
          "covariance-eigendecomposition",
          "explained-variance"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 7,
        "prerequisites": [
          "orthogonal-projection",
          "covariance-eigendecomposition"
        ],
        "prompt": "A centered three-dimensional population has covariance eigenvalues $5$, $2$, and $1$, with orthonormal eigenvectors $u_1$, $u_2$, and $u_3$. For rank-two PCA, state the optimal subspace, retained variance, explained fraction, and minimum expected squared reconstruction error.\n",
        "answer": "The optimal subspace is $\\operatorname{span}(u_1,u_2)$. It retains variance $5+2=7$ out of a total of $8$, so the explained fraction is $\\frac{7}{8}$. The minimum expected squared reconstruction error is the discarded variance, $1$.\n"
      },
      {
        "id": "ml-screen-unsupervised-foundation-kmeans",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "unsupervised-learning",
        "origin": "original",
        "title": "One k-means iteration",
        "skills": [
          "k-means",
          "clustering-objective"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 5,
        "prerequisites": [
          "squared-distance",
          "means"
        ],
        "prompt": "For the points $\\{0,2,7,9\\}$ and initial centers $1$ and $8$, perform one assignment and center update. Give the updated centers and within-cluster sum of squares.\n",
        "answer": "The clusters are $\\{0,2\\}$ and $\\{7,9\\}$. Their means remain $1$ and $8$. The objective is\n\n$$\n(0-1)^2+(2-1)^2+(7-8)^2+(9-8)^2=4.\n$$\n"
      },
      {
        "id": "ml-screen-unsupervised-standard-gmm",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "unsupervised-learning",
        "origin": "original",
        "title": "GMM responsibilities and M-step",
        "skills": [
          "gaussian-mixtures",
          "expectation-maximization"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 9,
        "prerequisites": [
          "bayes-rule",
          "weighted-means"
        ],
        "prompt": "Two GMM components have weights $(0.25,0.75)$ and densities at $x$ of $(0.6,0.2)$. Compute the responsibilities. Then, observations $(0,10)$ have responsibility rows $(0.5,0.5)$ and $(0.8,0.2)$. Compute the updated weights and means.\n",
        "answer": "The unnormalized values are $(0.15,0.15)$, so the responsibilities are $(0.5,0.5)$. The effective counts over the two observations are $(1.3,0.7)$, giving weights $(0.65,0.35)$. The means are\n\n$$\n\\frac{0.5(0)+0.8(10)}{1.3}=\\frac{80}{13}\\qquad\\text{and}\\qquad \\frac{0.5(0)+0.2(10)}{0.7}=\\frac{20}{7}.\n$$\n"
      },
      {
        "id": "ml-screen-unsupervised-advanced-local-optima",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "unsupervised-learning",
        "origin": "original",
        "title": "Compare k-means fixed points",
        "skills": [
          "k-means",
          "clustering-objective"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 11,
        "prerequisites": [
          "k-means",
          "squared-distance"
        ],
        "prompt": "For the points $\\{0,4,5,9\\}$ with $K=2$, evaluate the objective for contiguous splits after $0$, after $4$, and after $5$, using cluster means. Identify the globally best splits and show that the middle split is a Lloyd fixed point despite being worse.\n",
        "answer": "The objectives are $14$, $16$, and $14$. The first and third splits tie for best. The middle split has centers $(2,7)$, whose boundary is $4.5$; the assignments remain $\\{0,4\\}$ and $\\{5,9\\}$, and the recomputed means remain $(2,7)$. Thus, the middle split is a worse fixed point, illustrating a local optimum.\n"
      },
      {
        "id": "ml-screen-theory-foundation-splits",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "theory",
        "origin": "original",
        "title": "Train, validation, and test roles",
        "skills": [
          "generalization",
          "train-validation-test"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 5,
        "prerequisites": [
          "supervised-learning-basics"
        ],
        "prompt": "A team fits polynomial degrees $1$ through $10$. Which split fits the coefficients, which split selects the degree, and when is the test split used? Why does repeatedly selecting models by test performance invalidate the intended estimate?\n",
        "answer": "Fit the coefficients on training data, select the degree on validation data, and use test data once after all choices are fixed. Repeated test-based selection adapts development to accidental test-sample features, causing optimistic selection bias; the score is no longer an untouched generalization estimate.\n"
      },
      {
        "id": "ml-screen-theory-standard-bias-variance",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "theory",
        "origin": "original",
        "title": "Compute bias and variance",
        "skills": [
          "bias-variance",
          "generalization"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 7,
        "prerequisites": [
          "expectation",
          "variance",
          "squared-error"
        ],
        "prompt": "At a fixed input, the true value is $f(x)=3$, and noise is ignored. Across three training sets, model A predicts $(1,1,1)$ and model B predicts $(1,3,5)$. Using population variance, compute each model's bias, squared bias, variance, and expected squared error. Which model is better here?\n",
        "answer": "Model A has mean $1$, bias $-2$, squared bias $4$, variance $0$, and MSE $4$. Model B has mean $3$, bias $0$, squared bias $0$, variance\n\n$$\n\\frac{(1-3)^2+0+(5-3)^2}{3}=\\frac{8}{3},\n$$\n\nand MSE $\\frac{8}{3}$. Model B is better here because $\\frac{8}{3}<4$, though it varies more across training sets.\n"
      },
      {
        "id": "ml-screen-theory-advanced-complexity",
        "collection": "screening",
        "area": "machine-learning",
        "topic": "theory",
        "origin": "original",
        "title": "Select model complexity",
        "skills": [
          "bias-variance",
          "generalization",
          "overfitting",
          "train-validation-test",
          "model-complexity"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 8,
        "prerequisites": [
          "error-rates",
          "data-splits"
        ],
        "prompt": "Low-, medium-, and high-complexity models have training errors $(0.20,0.08,0.01)$ and validation errors $(0.22,0.10,0.18)$. Choose a model, compute the validation-minus-training gaps, diagnose low and high complexity, and state the next use of test data.\n",
        "answer": "The gaps are $(0.02,0.02,0.17)$. Select the medium-complexity model because its validation error, $0.10$, is lowest. The low-complexity model has high training and validation error, indicating underfitting or high bias. The high-complexity model has tiny training error but worse validation error and a large gap, indicating overfitting or high variance. After fixing all choices, evaluate the selected model once on untouched test data.\n"
      },
      {
        "id": "math-la-01-matrix-invariants",
        "collection": "screening",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "original",
        "title": "Matrix arithmetic and invariants",
        "skills": [
          "matrix-operations",
          "inverse",
          "determinant",
          "trace",
          "matrix-norms"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 4,
        "prerequisites": [
          "matrix-arithmetic",
          "square-roots"
        ],
        "prompt": "Let\n$$\nA=\\begin{bmatrix}1&2\\\\3&5\\end{bmatrix},\\qquad z=\\begin{bmatrix}1\\\\-1\\end{bmatrix}\n$$\nCompute $Az$, $\\det(A)$, $\\operatorname{tr}(A)$, $A^{-1}$, and the Frobenius norm $\\|A\\|_F$.\n",
        "answer": "Direct multiplication gives $Az=(-1,-2)^{\\mathsf T}$. Also,\n$$\n\\det(A)=1\\cdot5-2\\cdot3=-1,\\qquad \\operatorname{tr}(A)=6\n$$\nSince the determinant is nonzero, $A$ is invertible, and\n$$\nA^{-1}=\\frac1{-1}\\begin{bmatrix}5&-2\\\\-3&1\\end{bmatrix}\n=\\begin{bmatrix}-5&2\\\\3&-1\\end{bmatrix}\n$$\nFinally,\n$$\n\\|A\\|_F=\\sqrt{1^2+2^2+3^2+5^2}=\\sqrt{39}\n$$\n"
      },
      {
        "id": "math-la-02-system-subspaces",
        "collection": "screening",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "original",
        "title": "One reduction, four structural conclusions",
        "skills": [
          "linear-systems",
          "row-reduction",
          "rank",
          "subspaces",
          "rank-nullity"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 5,
        "prerequisites": [
          "linear-combinations",
          "reduced-row-echelon-form"
        ],
        "prompt": "For\n$$\nA=\\begin{bmatrix}1&2&3\\\\2&4&6\\end{bmatrix},\\qquad b=\\begin{bmatrix}1\\\\2\\end{bmatrix},\n$$\nrow-reduce $[A\\mid b]$. Give the rank of $A$, a basis for its column space,\na basis for its nullspace, and the full solution of $Ax=b$. Verify rank-nullity.\n",
        "answer": "Subtracting twice the first row from the second gives\n$$\n[A\\mid b]\\sim\\begin{bmatrix}1&2&3&\\mid&1\\\\0&0&0&\\mid&0\\end{bmatrix}\n$$\nThus $\\operatorname{rank}(A)=1$. A pivot-column basis for the column space is\n$\\{(1,2)^{\\mathsf T}\\}$. Writing $x_2=s$ and $x_3=t$ gives\n$$\nx=(1-2s-3t,s,t)^{\\mathsf T}\n$$\nFor the homogeneous system, a nullspace basis is\n$$\n\\{(-2,1,0)^{\\mathsf T},(-3,0,1)^{\\mathsf T}\\}\n$$\nThe nullity is $2$, so $\\operatorname{rank}(A)+\\operatorname{nullity}(A)=1+2=3$,\nthe number of columns.\n"
      },
      {
        "id": "math-la-03-basis-coordinates",
        "collection": "screening",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "original",
        "title": "Detect dependence and use a basis",
        "skills": [
          "linear-independence",
          "basis-dimension",
          "change-of-basis"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 3,
        "prerequisites": [
          "linear-combinations"
        ],
        "prompt": "In $\\mathbb R^3$, let $v_1=(1,0,1)$, $v_2=(0,1,1)$, and $v_3=(1,1,2)$.\nDetermine whether the three vectors are independent. Give a basis and dimension\nfor their span, then give the coordinates of $x=(2,3,5)$ in your basis.\n",
        "answer": "Since $v_3=v_1+v_2$, the three-vector list is dependent. The vectors $v_1,v_2$\nare independent, so $B=(v_1,v_2)$ is a basis and the span has dimension $2$.\nBecause $x=2v_1+3v_2$, its $B$-coordinates are $[x]_B=(2,3)^{\\mathsf T}$.\nThe basis matrix $P_B=[v_1\\ v_2]$ performs the change to standard coordinates:\n$x=P_B[x]_B$.\n"
      },
      {
        "id": "math-la-04-orthogonal-projection",
        "collection": "screening",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "original",
        "title": "Projection and orthogonal residual",
        "skills": [
          "orthogonality",
          "projection"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 3,
        "prerequisites": [
          "dot-products"
        ],
        "prompt": "Let $u=(1,1,0)^{\\mathsf T}$ and $v=(2,0,1)^{\\mathsf T}$. Compute the orthogonal\nprojection of $v$ onto $\\operatorname{span}(u)$ and the residual. Verify the\nresidual is orthogonal to $u$.\n",
        "answer": "$$\n\\operatorname{proj}_u(v)=\\frac{v^{\\mathsf T}u}{u^{\\mathsf T}u}u\n=\\frac2{2}u=(1,1,0)^{\\mathsf T}\n$$\nHence the residual is\n$$\nr=v-\\operatorname{proj}_u(v)=(1,-1,1)^{\\mathsf T}\n$$\nThe check is $u^{\\mathsf T}r=1-1+0=0$, so the residual is orthogonal to the\nprojection subspace.\n"
      },
      {
        "id": "math-la-05-qr-least-squares",
        "collection": "screening",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "original",
        "title": "Thin QR and a least-squares fit",
        "skills": [
          "qr",
          "least-squares"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 5,
        "prerequisites": [
          "orthogonality",
          "triangular-systems"
        ],
        "prompt": "Let $A$ have columns $a_1=(1,0,0)^{\\mathsf T}$ and $a_2=(1,1,0)^{\\mathsf T}$,\nand let $b=(1,2,3)^{\\mathsf T}$. Find a thin QR factorization $A=QR$, use it to\nsolve $\\min_x\\|Ax-b\\|_2$, and give the fitted vector and residual.\n",
        "answer": "Gram-Schmidt gives $q_1=(1,0,0)^{\\mathsf T}$ and $q_2=(0,1,0)^{\\mathsf T}$, so\n$$\nQ=\\begin{bmatrix}1&0\\\\0&1\\\\0&0\\end{bmatrix},\\qquad\nR=\\begin{bmatrix}1&1\\\\0&1\\end{bmatrix}\n$$\nThe least-squares equation is $Rx=Q^{\\mathsf T}b=(1,2)^{\\mathsf T}$. Thus\n$x_2=2$ and $x_1=-1$. The fitted vector and residual are\n$$\nAx=(1,2,0)^{\\mathsf T},\\qquad b-Ax=(0,0,3)^{\\mathsf T}\n$$\n"
      },
      {
        "id": "math-la-06-spectral-power",
        "collection": "screening",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "original",
        "title": "Diagonalize a symmetric matrix",
        "skills": [
          "eigenvalues",
          "eigenvectors",
          "diagonalization",
          "symmetric-matrices"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 5,
        "prerequisites": [
          "determinants",
          "matrix-multiplication"
        ],
        "prompt": "For $A=\\begin{bmatrix}2&1\\\\1&2\\end{bmatrix}$, find an orthogonal diagonalization\nand use it to compute $A^3$ without repeated matrix multiplication.\n",
        "answer": "The normalized eigenvectors $q_1=(1,1)^{\\mathsf T}/\\sqrt2$ and\n$q_2=(1,-1)^{\\mathsf T}/\\sqrt2$ have eigenvalues $3$ and $1$. Therefore\n$$\nA=Q\\begin{bmatrix}3&0\\\\0&1\\end{bmatrix}Q^{\\mathsf T},\\qquad\nQ=\\frac1{\\sqrt2}\\begin{bmatrix}1&1\\\\1&-1\\end{bmatrix}\n$$\nCubing the eigenvalues gives\n$$\nA^3=Q\\begin{bmatrix}27&0\\\\0&1\\end{bmatrix}Q^{\\mathsf T}\n=\\begin{bmatrix}14&13\\\\13&14\\end{bmatrix}\n$$\n"
      },
      {
        "id": "math-la-07-quadratic-positive",
        "collection": "screening",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "original",
        "title": "Certify a quadratic form",
        "skills": [
          "quadratic-forms",
          "positive-definite-semidefinite"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 5,
        "prerequisites": [
          "eigenvalues",
          "unit-vectors"
        ],
        "prompt": "Consider $q(x,y)=2x^2-2xy+2y^2$. Write $q=z^{\\mathsf T}Hz$, determine whether\n$H$ is positive definite, and find the minimum of $q$ over $x^2+y^2=1$.\n",
        "answer": "The symmetric matrix is\n$$\nH=\\begin{bmatrix}2&-1\\\\-1&2\\end{bmatrix}\n$$\nIts eigenvalues are $1$ and $3$, both positive, so $H$ is positive definite.\nOn the unit circle the Rayleigh quotient is minimized by an eigenvector for the\nsmallest eigenvalue. Hence the minimum is $1$, attained at\n$z=\\pm(1,1)^{\\mathsf T}/\\sqrt2$.\n"
      },
      {
        "id": "math-la-08-svd-low-rank-pca",
        "collection": "screening",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "original",
        "title": "SVD, best rank one, and PCA energy",
        "skills": [
          "svd",
          "low-rank-approximation",
          "pca-via-svd"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 5,
        "prerequisites": [
          "orthogonality",
          "matrix-norms",
          "eigenvalues"
        ],
        "prompt": "Let $X=\\operatorname{diag}(4,2,1)$. Give one SVD of $X$, its best rank-$1$\napproximation in Frobenius norm, and the approximation error. If $4,2,1$ are\nthe singular values of a centered data matrix, what fraction of its total squared\nvariation is retained by the first principal component?\n",
        "answer": "Since $X$ is diagonal with positive diagonal entries, one SVD is\n$X=I\\operatorname{diag}(4,2,1)I^{\\mathsf T}$. By Eckart-Young, retain only the\nlargest singular value:\n$$\nX_1=\\operatorname{diag}(4,0,0)\n$$\nThe Frobenius error is\n$$\n\\|X-X_1\\|_F=\\sqrt{2^2+1^2}=\\sqrt5\n$$\nFor a centered data matrix with these singular values, the first principal\ndirection is the first right singular vector $e_1$, and the retained squared\nvariation is\n$$\n\\frac{4^2}{4^2+2^2+1^2}=\\frac{16}{21}\n$$\n"
      },
      {
        "id": "math-calc-01-removable-limit",
        "collection": "screening",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "original",
        "title": "Limit, continuity, derivative, and integral",
        "skills": [
          "limits",
          "continuity",
          "single-variable-differentiation",
          "single-variable-integration"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 3,
        "prerequisites": [
          "factoring-polynomials",
          "basic-integration"
        ],
        "prompt": "For $x\\ne1$, let $f(x)=(x^2-1)/(x-1)$. Choose $f(1)$ so that $f$ is continuous.\nFor that continuous extension, find $f'(1)$ and $\\int_0^2 f(x)\\,dx$.\n",
        "answer": "For $x\\ne1$, $f(x)=x+1$, so $\\lim_{x\\to1}f(x)=2$. Set $f(1)=2$.\nThe extended function is $x+1$ everywhere, hence $f'(1)=1$ and\n$$\n\\int_0^2(x+1)\\,dx=\\left[\\frac{x^2}{2}+x\\right]_0^2=4\n$$\n"
      },
      {
        "id": "math-calc-02-gradient-direction",
        "collection": "screening",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "original",
        "title": "Gradient and a normalized direction",
        "skills": [
          "partial-derivatives",
          "gradient",
          "directional-derivative"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 3,
        "prerequisites": [
          "derivatives",
          "dot-products"
        ],
        "prompt": "Let $f(x,y)=x^2y+e^y$. Compute $\\nabla f(1,0)$ and the directional derivative\nthere in the direction from $(1,0)$ toward $(4,4)$.\n",
        "answer": "$$\n\\nabla f=(2xy,x^2+e^y),\\qquad \\nabla f(1,0)=(0,2)\n$$\nThe displacement direction is $(3,4)$, whose unit vector is $(3/5,4/5)$.\nTherefore\n$$\nD_uf(1,0)=\\nabla f(1,0)^{\\mathsf T}u=\\frac85\n$$\n"
      },
      {
        "id": "math-calc-03-jacobian-chain",
        "collection": "screening",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "original",
        "title": "Vector chain rule",
        "skills": [
          "jacobian",
          "multivariable-chain-rule"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 4,
        "prerequisites": [
          "partial-derivatives",
          "matrix-multiplication"
        ],
        "prompt": "Let $F(x,y)=(x^2+y,xy)$ and $h(u,v)=u^2+3v$. Compute $J_F(1,2)$ and\n$\\nabla(h\\circ F)(1,2)$.\n",
        "answer": "$$\nJ_F(x,y)=\\begin{bmatrix}2x&1\\\\y&x\\end{bmatrix},\\qquad\nJ_F(1,2)=\\begin{bmatrix}2&1\\\\2&1\\end{bmatrix}\n$$\nNow $F(1,2)=(3,2)$ and $\\nabla h(3,2)=(6,3)$. The chain rule gives\n$$\n\\nabla(h\\circ F)(1,2)=J_F(1,2)^{\\mathsf T}(6,3)^{\\mathsf T}\n=(18,9)^{\\mathsf T}\n$$\n"
      },
      {
        "id": "math-calc-04-second-order-taylor",
        "collection": "screening",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "original",
        "title": "A two-variable quadratic approximation",
        "skills": [
          "taylor-approximation",
          "hessian"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 5,
        "prerequisites": [
          "partial-derivatives",
          "quadratic-forms"
        ],
        "prompt": "For $f(x,y)=\\log x+xy+y^2$, form the second-order Taylor approximation at\n$(1,0)$ in increments $(h,k)$, then use it to approximate $f(1.1,0.2)$.\n",
        "answer": "At $(1,0)$, $f=0$, $\\nabla f=(1,1)$, and\n$$\nH=\\begin{bmatrix}-1&1\\\\1&2\\end{bmatrix}\n$$\nThus\n$$\nT_2(1+h,k)=h+k+\\frac12(-h^2+2hk+2k^2)\n$$\nAt $h=0.1$ and $k=0.2$ this is\n$$\n0.3+\\frac12(-0.01+0.04+0.08)=0.355=\\frac{71}{200}\n$$\n"
      },
      {
        "id": "math-calc-05-critical-classification",
        "collection": "screening",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "original",
        "title": "Classify all stationary points",
        "skills": [
          "calculus-stationary-points",
          "unconstrained-optimization",
          "calculus-convexity"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 6,
        "prerequisites": [
          "gradient",
          "hessian",
          "eigenvalue-sign-test"
        ],
        "prompt": "Find and classify every critical point of $f(x,y)=x^4-2x^2+y^2$. Is $f$ convex\non all of $\\mathbb R^2$?\n",
        "answer": "$$\n\\nabla f=(4x^3-4x,2y),\n$$\nso the critical points are $(0,0)$, $(1,0)$, and $(-1,0)$. The Hessian is\n$$\nH=\\operatorname{diag}(12x^2-4,2)\n$$\nAt $(0,0)$ it has eigenvalues $-4,2$, so this point is a saddle. At each of\n$(\\pm1,0)$ it is $\\operatorname{diag}(8,2)$, so both are strict (indeed global)\nminima with value $-1$. The function is not convex on all of $\\mathbb R^2$\nbecause $\\partial^2 f/\\partial x^2=-4$ at the origin.\n"
      },
      {
        "id": "math-calc-06-lagrange-circle",
        "collection": "screening",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "original",
        "title": "Minimum under an equality constraint",
        "skills": [
          "constrained-optimization"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 4,
        "prerequisites": [
          "partial-derivatives",
          "linear-equations"
        ],
        "prompt": "Minimize $x^2+y^2$ subject to $x+y=1$ using a Lagrange multiplier. Report the\noptimizer, multiplier for $L=x^2+y^2+\\lambda(x+y-1)$, and minimum value.\n",
        "answer": "Stationarity gives $2x+\\lambda=0$, $2y+\\lambda=0$, and $x+y=1$.\nHence $x=y=1/2$ and $\\lambda=-1$. The minimum value is\n$$\nx^2+y^2=\\frac14+\\frac14=\\frac12\n$$\nThe objective is strictly convex and the constraint is affine, so this feasible\nstationary point is the unique global minimum.\n"
      },
      {
        "id": "math-calc-07-implicit-slope",
        "collection": "screening",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "original",
        "title": "Implicit tangent slope",
        "skills": [
          "implicit-differentiation"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 3,
        "prerequisites": [
          "chain-rule",
          "algebra"
        ],
        "prompt": "The curve $x^2+xy+y^2=7$ passes through $(1,2)$. Find $dy/dx$ at that point.\n",
        "answer": "Differentiating with respect to $x$ gives\n$$\n2x+y+x\\,y'+2y\\,y'=0\n$$\nTherefore\n$$\ny'=-\\frac{2x+y}{x+2y},\n$$\nand at $(1,2)$, $y'=-4/5$.\n"
      },
      {
        "id": "math-calc-08-least-squares-derivatives",
        "collection": "screening",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "original",
        "title": "Matrix derivative with a numeric check",
        "skills": [
          "matrix-calculus"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 5,
        "prerequisites": [
          "chain-rule",
          "matrix-multiplication",
          "gradient"
        ],
        "prompt": "Let $f(w)=\\tfrac12\\|Xw-y\\|_2^2$, where\n$$\nX=\\begin{bmatrix}1&0\\\\1&1\\end{bmatrix},\\quad y=\\begin{bmatrix}1\\\\2\\end{bmatrix}\n$$\nDerive the gradient and Hessian for general $w$, then evaluate the gradient at\n$w=(0,1)^{\\mathsf T}$.\n",
        "answer": "Expanding the differential, or applying the vector chain rule, gives\n$$\n\\nabla f(w)=X^{\\mathsf T}(Xw-y),\\qquad \\nabla^2 f(w)=X^{\\mathsf T}X\n$$\nHere\n$$\nX^{\\mathsf T}X=\\begin{bmatrix}2&1\\\\1&1\\end{bmatrix}\n$$\nAt $w=(0,1)^{\\mathsf T}$, $Xw-y=(-1,-1)^{\\mathsf T}$, so\n$$\n\\nabla f(w)=X^{\\mathsf T}(-1,-1)^{\\mathsf T}=(-2,-1)^{\\mathsf T}\n$$\n"
      },
      {
        "id": "math-prob-01-counting-events",
        "collection": "screening",
        "area": "mathematics",
        "topic": "probability",
        "origin": "original",
        "title": "Count a union of selection events",
        "skills": [
          "counting",
          "event-algebra",
          "inclusion-exclusion"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 3,
        "prerequisites": [
          "combinations",
          "fractions"
        ],
        "prompt": "Two people are chosen uniformly from five people, including Ana and Ben. Let\n$A$ be the event that Ana is chosen and $B$ the event that Ben is chosen.\nCompute $P(A)$, $P(B)$, $P(A\\cap B)$, $P(A\\cup B)$, and $P(A^c\\cap B^c)$.\n",
        "answer": "There are $\\binom52=10$ equally likely pairs. Four include Ana and four include\nBen, while one includes both. Thus\n$$\nP(A)=P(B)=\\frac4{10}=\\frac25,\\qquad P(A\\cap B)=\\frac1{10}\n$$\nInclusion-exclusion gives\n$$\nP(A\\cup B)=\\frac25+\\frac25-\\frac1{10}=\\frac7{10}\n$$\nBy complementation, $P(A^c\\cap B^c)=1-7/10=3/10$.\n"
      },
      {
        "id": "math-prob-02-bayes-base-rate",
        "collection": "screening",
        "area": "mathematics",
        "topic": "probability",
        "origin": "original",
        "title": "Bayes rule with a base rate",
        "skills": [
          "conditional-probability",
          "total-probability",
          "bayes-rule",
          "probabilistic-independence"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 4,
        "prerequisites": [
          "event-probability",
          "fractions"
        ],
        "prompt": "A condition has prevalence $P(D)=0.10$. A test has sensitivity $P(+\\mid D)=0.80$\nand false-positive rate $P(+\\mid D^c)=0.20$. Find $P(+)$ and $P(D\\mid +)$.\nAre the events $D$ and $+$ independent?\n",
        "answer": "Total probability gives\n$$\nP(+)=0.8(0.1)+0.2(0.9)=0.26=\\frac{13}{50}\n$$\nBayes rule gives\n$$\nP(D\\mid +)=\\frac{P(+\\mid D)P(D)}{P(+)}\n=\\frac{0.08}{0.26}=\\frac4{13}\n$$\nThey are not independent because $P(+\\mid D)=0.80\\ne P(+)=0.26$.\n"
      },
      {
        "id": "math-prob-03-binomial-moments",
        "collection": "screening",
        "area": "mathematics",
        "topic": "probability",
        "origin": "original",
        "title": "A small discrete distribution",
        "skills": [
          "discrete-random-variables",
          "pmf",
          "named-distributions",
          "expectation",
          "variance"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 3,
        "prerequisites": [
          "binomial-coefficients"
        ],
        "prompt": "Let $X\\sim\\operatorname{Binomial}(3,1/2)$. List its pmf for $x=0,1,2,3$,\nthen compute $P(X\\ge2)$, $E[X]$, and $\\operatorname{Var}(X)$.\n",
        "answer": "$$\nP(X=x)=\\binom3x2^{-3},\n$$\nso the probabilities for $x=0,1,2,3$ are $(1,3,3,1)/8$. Therefore\n$$\nP(X\\ge2)=\\frac38+\\frac18=\\frac12\n$$\nFor a binomial variable, $E[X]=np=3/2$ and\n$\\operatorname{Var}(X)=np(1-p)=3/4$.\n"
      },
      {
        "id": "math-prob-04-exponential-transform",
        "collection": "screening",
        "area": "mathematics",
        "topic": "probability",
        "origin": "original",
        "title": "Transform an exponential variable",
        "skills": [
          "continuous-random-variables",
          "pdf",
          "cdf",
          "transformations",
          "named-distributions"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 4,
        "prerequisites": [
          "cumulative-distribution-functions",
          "exponential-distribution"
        ],
        "prompt": "Let $X\\sim\\operatorname{Exponential}(2)$ under the rate parameterization and\ndefine $Y=2X$. Derive the CDF and PDF of $Y$, identify its distribution, and\ngive its mean and variance.\n",
        "answer": "For $y<0$, $F_Y(y)=0$. For $y\\ge0$,\n$$\nF_Y(y)=P(2X\\le y)=P(X\\le y/2)=1-e^{-2(y/2)}=1-e^{-y}\n$$\nDifferentiating gives $f_Y(y)=e^{-y}$ for $y\\ge0$ and $0$ otherwise. Hence\n$Y\\sim\\operatorname{Exponential}(1)$. Its mean is $1$ and its variance is $1$.\n"
      },
      {
        "id": "math-prob-05-joint-correlation",
        "collection": "screening",
        "area": "mathematics",
        "topic": "probability",
        "origin": "original",
        "title": "Read dependence from a joint table",
        "skills": [
          "joint-distributions",
          "marginal-distributions",
          "conditional-distributions",
          "covariance",
          "correlation"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 6,
        "prerequisites": [
          "conditional-probability",
          "expectation",
          "variance"
        ],
        "prompt": "Binary variables $X,Y\\in\\{0,1\\}$ have joint probabilities\n$$\np_{00}=0.3,\\quad p_{01}=0.2,\\quad p_{10}=0.1,\\quad p_{11}=0.4\n$$\nFind $P(X=1)$, $P(Y=1)$, $P(X=1\\mid Y=1)$, $\\operatorname{Cov}(X,Y)$,\nand $\\operatorname{Corr}(X,Y)$.\n",
        "answer": "The marginals are $P(X=1)=0.1+0.4=0.5$ and $P(Y=1)=0.2+0.4=0.6$.\nThus $P(X=1\\mid Y=1)=0.4/0.6=2/3$. Since $E[XY]=P(X=Y=1)=0.4$,\n$$\n\\operatorname{Cov}(X,Y)=0.4-(0.5)(0.6)=0.1\n$$\nThe Bernoulli variances are $0.25$ and $0.24$, so\n$$\n\\operatorname{Corr}(X,Y)=\\frac{0.1}{\\sqrt{0.25\\cdot0.24}}\n=\\frac1{\\sqrt6}\\approx0.4082\n$$\n"
      },
      {
        "id": "math-prob-06-total-variance",
        "collection": "screening",
        "area": "mathematics",
        "topic": "probability",
        "origin": "original",
        "title": "Condition first, then remove conditioning",
        "skills": [
          "conditional-expectation",
          "law-total-expectation",
          "law-total-variance"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 4,
        "prerequisites": [
          "conditional-probability",
          "expectation",
          "variance"
        ],
        "prompt": "Let $Z\\sim\\operatorname{Bernoulli}(1/4)$. Conditional on $Z=0$, $X$ has mean $0$\nand variance $1$; conditional on $Z=1$, $X$ has mean $4$ and variance $1$.\nFind $E[X\\mid Z]$, $E[X]$, and $\\operatorname{Var}(X)$.\n",
        "answer": "The conditional mean is $E[X\\mid Z]=4Z$. Therefore\n$$\nE[X]=E[4Z]=1\n$$\nAlso $E[\\operatorname{Var}(X\\mid Z)]=1$, while\n$$\n\\operatorname{Var}(E[X\\mid Z])=\\operatorname{Var}(4Z)\n=16\\left(\\frac14\\right)\\left(\\frac34\\right)=3\n$$\nBy total variance, $\\operatorname{Var}(X)=1+3=4$.\n"
      },
      {
        "id": "math-prob-07-sum-clt",
        "collection": "screening",
        "area": "mathematics",
        "topic": "probability",
        "origin": "original",
        "title": "Approximate a binomial central range",
        "skills": [
          "sums-of-random-variables",
          "central-limit-theorem"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 4,
        "prerequisites": [
          "bernoulli-distribution",
          "normal-standardization"
        ],
        "prompt": "Let $X_1,\\ldots,X_{100}$ be independent $\\operatorname{Bernoulli}(1/2)$ variables\nand $S=\\sum_iX_i$. Identify the exact distribution of $S$ and use a normal\napproximation with continuity correction to estimate $P(45\\le S\\le55)$.\n",
        "answer": "Exactly, $S\\sim\\operatorname{Binomial}(100,1/2)$, with mean $50$ and variance $25$.\nWith continuity correction,\n$$\nP(45\\le S\\le55)\\approx P(44.5\\le N(50,25)\\le55.5)\n$$\nStandardizing gives bounds $-1.1$ and $1.1$, hence\n$$\nP(45\\le S\\le55)\\approx2\\Phi(1.1)-1\\approx0.7287\n$$\n"
      },
      {
        "id": "math-prob-08-lln-interpretation",
        "collection": "screening",
        "area": "mathematics",
        "topic": "probability",
        "origin": "original",
        "title": "State the LLN operationally",
        "skills": [
          "law-of-large-numbers"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 2,
        "prerequisites": [
          "sample-means",
          "convergence-in-probability"
        ],
        "prompt": "If $X_1,X_2,\\ldots$ are i.i.d. $\\operatorname{Bernoulli}(0.3)$ and\n$\\bar X_n=n^{-1}\\sum_iX_i$, state the weak law of large numbers for this case.\nWhat does it imply about $P(|\\bar X_n-0.3|>0.05)$ as $n\\to\\infty$?\n",
        "answer": "The weak law says $\\bar X_n\\xrightarrow{p}0.3$. Equivalently, for every\n$\\varepsilon>0$,\n$$\nP(|\\bar X_n-0.3|>\\varepsilon)\\to0\n$$\nTaking $\\varepsilon=0.05$ gives\n$P(|\\bar X_n-0.3|>0.05)\\to0$.\n"
      },
      {
        "id": "math-prob-09-gaussian-linear-map",
        "collection": "screening",
        "area": "mathematics",
        "topic": "probability",
        "origin": "original",
        "title": "Linear image of a multivariate Gaussian",
        "skills": [
          "multivariate-gaussian",
          "transformations",
          "covariance"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 5,
        "prerequisites": [
          "matrix-multiplication",
          "gaussian-distribution"
        ],
        "prompt": "Let\n$$\nX\\sim\\mathcal N\\left(\\begin{bmatrix}1\\\\-1\\end{bmatrix},\n\\begin{bmatrix}2&1/2\\\\1/2&1\\end{bmatrix}\\right),\\qquad\nY=\\begin{bmatrix}1&2\\end{bmatrix}X+3\n$$\nFind the distribution of $Y$.\n",
        "answer": "An affine image of a Gaussian is Gaussian. Its mean is\n$$\n[1\\ 2](1,-1)^{\\mathsf T}+3=2\n$$\nIts variance is\n$$\n[1\\ 2]\\begin{bmatrix}2&1/2\\\\1/2&1\\end{bmatrix}\n\\begin{bmatrix}1\\\\2\\end{bmatrix}=8\n$$\nTherefore $Y\\sim\\mathcal N(2,8)$.\n"
      },
      {
        "id": "math-stats-01-sample-mean",
        "collection": "screening",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "original",
        "title": "Sampling distribution and standard error",
        "skills": [
          "samples",
          "sample-statistics",
          "sampling-distributions",
          "standard-error"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 3,
        "prerequisites": [
          "normal-distribution",
          "sample-mean"
        ],
        "prompt": "A normal population has mean $10$ and standard deviation $4$. For an i.i.d. sample\nof size $25$, give the exact distribution of $\\bar X$, its standard error, and\n$P(|\\bar X-10|\\le1.6)$.\n",
        "answer": "Normality makes the sample mean exactly normal:\n$$\n\\bar X\\sim\\mathcal N\\left(10,\\frac{4^2}{25}\\right)\n=\\mathcal N(10,0.64)\n$$\nIts standard error is $4/\\sqrt{25}=0.8$. Standardizing $1.6/0.8=2$ gives\n$$\nP(|\\bar X-10|\\le1.6)=P(|Z|\\le2)=2\\Phi(2)-1\\approx0.9545\n$$\n"
      },
      {
        "id": "math-stats-02-shrunken-proportion",
        "collection": "screening",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "original",
        "title": "Bias, variance, MSE, and consistency",
        "skills": [
          "estimator-bias",
          "estimator-variance",
          "mean-squared-error",
          "consistency"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 6,
        "prerequisites": [
          "expectation",
          "variance",
          "bernoulli-distribution"
        ],
        "prompt": "For i.i.d. $X_i\\sim\\operatorname{Bernoulli}(p)$, let $S_n=\\sum_iX_i$ and\n$T_n=(S_n+1)/(n+2)$. Derive the bias, variance, and MSE of $T_n$ as an estimator\nof $p$. Is $T_n$ consistent? Evaluate the bias and MSE at $n=10,p=1/2$.\n",
        "answer": "Since $E[S_n]=np$ and $\\operatorname{Var}(S_n)=np(1-p)$,\n$$\n\\operatorname{Bias}(T_n)=\\frac{np+1}{n+2}-p=\\frac{1-2p}{n+2},\n$$\n$$\n\\operatorname{Var}(T_n)=\\frac{np(1-p)}{(n+2)^2},\n$$\nand\n$$\n\\operatorname{MSE}(T_n)=\\frac{np(1-p)+(1-2p)^2}{(n+2)^2}\n$$\nBoth bias and variance tend to zero, so $T_n$ is consistent. At $n=10,p=1/2$,\nthe bias is $0$ and the MSE is $10(1/4)/12^2=5/288$.\n"
      },
      {
        "id": "math-stats-03-exponential-mle",
        "collection": "screening",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "original",
        "title": "Build and maximize a likelihood",
        "skills": [
          "likelihood",
          "maximum-likelihood"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 4,
        "prerequisites": [
          "exponential-distribution",
          "logarithms",
          "derivatives"
        ],
        "prompt": "Observations $1,2,3$ are i.i.d. from an exponential distribution with unknown\nrate $\\lambda>0$. Write the likelihood and log-likelihood, then find the MLE.\n",
        "answer": "The likelihood is\n$$\nL(\\lambda)=\\prod_{i=1}^3\\lambda e^{-\\lambda x_i}\n=\\lambda^3e^{-6\\lambda},\\qquad \\lambda>0\n$$\nThus $\\ell(\\lambda)=3\\log\\lambda-6\\lambda$. Setting\n$\\ell'(\\lambda)=3/\\lambda-6=0$ gives $\\hat\\lambda=1/2$.\nSince $\\ell''(\\lambda)=-3/\\lambda^2<0$, this is the unique maximum.\n"
      },
      {
        "id": "math-stats-04-beta-posterior-map",
        "collection": "screening",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "original",
        "title": "Conjugate update and MAP",
        "skills": [
          "map",
          "bayesian-updating"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 4,
        "prerequisites": [
          "bernoulli-likelihood",
          "beta-distribution"
        ],
        "prompt": "A Bernoulli success probability $p$ has prior $\\operatorname{Beta}(2,3)$. After\nobserving $7$ successes and $3$ failures, find the posterior distribution and its MAP.\n",
        "answer": "The Bernoulli likelihood contributes $p^7(1-p)^3$. Multiplying by the prior\nkernel $p^{2-1}(1-p)^{3-1}$ gives posterior\n$$\np\\mid\\text{data}\\sim\\operatorname{Beta}(9,6)\n$$\nSince both parameters exceed $1$, the beta mode is\n$$\n\\frac{9-1}{9+6-2}=\\frac8{13}\n$$\n"
      },
      {
        "id": "math-stats-05-uniform-mom",
        "collection": "screening",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "original",
        "title": "Method of moments for an endpoint",
        "skills": [
          "method-of-moments"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 2,
        "prerequisites": [
          "sample-mean",
          "uniform-distribution"
        ],
        "prompt": "A sample $2,4,3$ comes from $\\operatorname{Uniform}(0,\\theta)$ with $\\theta>0$.\nFind the one-moment method-of-moments estimate of $\\theta$.\n",
        "answer": "Since $E[X]=\\theta/2$, match the population mean to the sample mean\n$\\bar x=(2+4+3)/3=3$. Thus $3=\\hat\\theta/2$ and\n$$\n\\hat\\theta_{\\mathrm{MOM}}=6\n$$\n"
      },
      {
        "id": "math-stats-06-z-confidence-interval",
        "collection": "screening",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "original",
        "title": "Confidence interval with known variance",
        "skills": [
          "confidence-intervals"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 3,
        "prerequisites": [
          "standard-error",
          "normal-quantiles"
        ],
        "prompt": "A sample of size $100$ has mean $10$. The population standard deviation is known to\nbe $2$. Construct the usual two-sided $95\\%$ $z$-confidence interval for the population mean.\n",
        "answer": "The standard error is $2/\\sqrt{100}=0.2$. Using $z_{0.975}=1.96$ gives\n$$\n10\\pm1.96(0.2)=10\\pm0.392,\n$$\nso the interval is $[9.608,10.392]$.\n"
      },
      {
        "id": "math-stats-07-one-sided-z-test",
        "collection": "screening",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "original",
        "title": "Hypotheses, critical region, and p-value",
        "skills": [
          "null-alternative",
          "p-values",
          "critical-regions"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 4,
        "prerequisites": [
          "sampling-distributions",
          "standard-error"
        ],
        "prompt": "For a normal population with known standard deviation $5$, a sample of size $25$ has\nmean $2$. Test $H_0:\\mu=0$ against $H_1:\\mu>0$ at $\\alpha=0.05$. Give the $z$ statistic,\np-value, critical region in terms of $\\bar X$, and decision. Use $z_{0.95}=1.645$.\n",
        "answer": "The standard error is $5/\\sqrt{25}=1$, so $z=(2-0)/1=2$. The one-sided p-value is\n$$\n1-\\Phi(2)\\approx0.0228\n$$\nThe level-$0.05$ critical region is $z>1.645$, equivalently $\\bar X>1.645$.\nSince $2>1.645$ (and $0.0228<0.05$), reject $H_0$.\n"
      },
      {
        "id": "math-stats-08-power-of-z-test",
        "collection": "screening",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "original",
        "title": "Type II error and power at an alternative",
        "skills": [
          "type-i-error",
          "type-ii-error",
          "statistical-power"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 5,
        "prerequisites": [
          "null-alternative",
          "normal-standardization"
        ],
        "prompt": "Continue with a one-sided $z$-test whose rejection rule is $\\bar X>1.645$ and whose\nsampling standard error is $1$. Under $H_0:\\mu=0$, state the Type I error probability.\nAt the alternative $\\mu=2$, compute the Type II error probability and power.\n",
        "answer": "The cutoff was chosen so that under $H_0$, $P_0(\\bar X>1.645)=0.05$; this is the\nType I error probability. Under $\\mu=2$,\n$$\n\\beta=P_2(\\bar X\\le1.645)=\\Phi(1.645-2)=\\Phi(-0.355)\\approx0.3613\n$$\nTherefore the power is\n$$\n1-\\beta=\\Phi(0.355)\\approx0.6387\n$$\n"
      },
      {
        "id": "math-stats-09-chi-square-fit",
        "collection": "screening",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "original",
        "title": "Chi-square goodness of fit",
        "skills": [
          "goodness-of-fit",
          "chi-square"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 5,
        "prerequisites": [
          "hypothesis-tests",
          "expected-counts"
        ],
        "prompt": "A die is rolled $60$ times, producing face counts $(8,9,10,11,12,10)$. Test the\nnull hypothesis that the die is fair using a chi-square goodness-of-fit test.\nCompute the statistic and degrees of freedom, and decide at $5\\%$ using critical value $11.07$.\n",
        "answer": "Under fairness each expected count is $10$. The statistic is\n$$\n\\chi^2=\\sum_{i=1}^6\\frac{(O_i-10)^2}{10}\n=\\frac{4+1+0+1+4+0}{10}=1\n$$\nNo parameter was fitted, so the degrees of freedom are $6-1=5$.\nSince $1<11.07$, do not reject the fair-die null at the $5\\%$ level.\n"
      },
      {
        "id": "math-stats-10-simple-regression",
        "collection": "screening",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "original",
        "title": "Fit a simple regression line",
        "skills": [
          "simple-linear-regression"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 5,
        "prerequisites": [
          "sample-means",
          "algebra"
        ],
        "prompt": "Fit the ordinary least-squares line $\\hat y=\\hat\\beta_0+\\hat\\beta_1x$ to the three\npoints $(0,1),(1,2),(2,2)$. Give the slope, intercept, prediction at $x=3$, and\nthe three residuals in data order.\n",
        "answer": "Here $\\bar x=1$, $\\bar y=5/3$,\n$$\nS_{xx}=(-1)^2+0^2+1^2=2,\n$$\nand\n$$\nS_{xy}=(-1)(-2/3)+0(1/3)+1(1/3)=1\n$$\nHence $\\hat\\beta_1=S_{xy}/S_{xx}=1/2$ and\n$\\hat\\beta_0=\\bar y-\\hat\\beta_1\\bar x=7/6$.\nThe prediction at $3$ is $7/6+3/2=8/3$. The fitted values are\n$(7/6,5/3,13/6)$, so the residuals $y-\\hat y$ are\n$$\n(-1/6,1/3,-1/6)\n$$\n"
      },
      {
        "id": "prog-cf-trace-sentinel",
        "collection": "screening",
        "area": "programming",
        "topic": "control-flow",
        "origin": "original",
        "title": "Trace a sentinel-based string scan",
        "skills": [
          "conditionals",
          "loops",
          "strings"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 5,
        "prerequisites": [
          "string iteration",
          "character predicates"
        ],
        "prompt": "Without running the code, determine `scan_until_marker(\" A1-b 2#C9\")`.\nThe scan stops at the first `#`, ignores whitespace, adds digit values,\nlowercases letters, and records `?` for every other character.\n",
        "answer": "The result is `(\"a?b\", 3)`. The leading space and the space before `2`\nare ignored. `A` and `b` contribute `a` and `b`; `-` contributes `?`;\n$1 + 2 = 3$; and no character after `#` is visited.\n",
        "reference_solution": "def scan_until_marker(text: str) -> tuple[str, int]:\n    letters: list[str] = []\n    digit_sum = 0\n    for character in text:\n        if character == \"#\":\n            break\n        if character.isspace():\n            continue\n        if character.isdigit():\n            digit_sum += int(character)\n        elif character.isalpha():\n            letters.append(character.lower())\n        else:\n            letters.append(\"?\")\n    return \"\".join(letters), digit_sum\n",
        "tests": [
          {
            "call": "scan_until_marker(\" A1-b 2#C9\")",
            "expected": "('a?b', 3)"
          },
          {
            "call": "scan_until_marker(\"\")",
            "expected": "('', 0)"
          },
          {
            "call": "scan_until_marker(\"X7 Y3\")",
            "expected": "('xy', 10)"
          },
          {
            "call": "scan_until_marker(\"9#8\")",
            "expected": "('', 9)"
          }
        ]
      },
      {
        "id": "prog-cf-summarize-runs",
        "collection": "screening",
        "area": "programming",
        "topic": "control-flow",
        "origin": "original",
        "title": "Summarize consecutive character runs",
        "skills": [
          "conditionals",
          "loops",
          "strings"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 10,
        "prerequisites": [
          "string indexing",
          "list append"
        ],
        "prompt": "Implement `summarize_runs(text)`, which returns `(character, count)` for\neach maximal consecutive run. For example, `\"aaabbcaa\"` becomes\n`[(\"a\", 3), (\"b\", 2), (\"c\", 1), (\"a\", 2)]`. Return an empty list for\nan empty string.\n",
        "answer": "Keep the current character and count. When the next character differs,\nemit the completed run and reset the state. Emit the final run after the\nloop. The algorithm takes $O(n)$ time, $O(1)$ auxiliary space, and $O(r)$\noutput space for $r$ runs.\n",
        "reference_solution": "def summarize_runs(text: str) -> list[tuple[str, int]]:\n    if text == \"\":\n        return []\n    runs: list[tuple[str, int]] = []\n    current = text[0]\n    count = 1\n    for index in range(1, len(text)):\n        character = text[index]\n        if character == current:\n            count += 1\n        else:\n            runs.append((current, count))\n            current = character\n            count = 1\n    runs.append((current, count))\n    return runs\n",
        "tests": [
          {
            "call": "summarize_runs(\"\")",
            "expected": "[]"
          },
          {
            "call": "summarize_runs(\"z\")",
            "expected": "[('z', 1)]"
          },
          {
            "call": "summarize_runs(\"aaabbcaa\")",
            "expected": "[('a', 3), ('b', 2), ('c', 1), ('a', 2)]"
          },
          {
            "call": "summarize_runs(\"ab\")",
            "expected": "[('a', 1), ('b', 1)]"
          }
        ]
      },
      {
        "id": "prog-cf-split-top-level",
        "collection": "screening",
        "area": "programming",
        "topic": "control-flow",
        "origin": "original",
        "title": "Split only at top-level commas",
        "skills": [
          "conditionals",
          "loops",
          "strings"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 14,
        "prerequisites": [
          "string traversal",
          "loop invariants"
        ],
        "prompt": "Implement `split_top_level(text)`. Split at commas whose parenthesis\ndepth is zero, trim surrounding whitespace in each field, preserve empty\nfields, and raise `ValueError` for unbalanced parentheses. Parentheses may\nbe nested; quotes and escapes are outside the input contract.\n",
        "answer": "Scan once while maintaining a depth counter. An opening parenthesis\nincrements depth, a closing parenthesis decrements it, and a comma ends a\nfield only when depth is zero. Negative depth or nonzero final depth is\ninvalid. The scan is $O(n)$ time, excluding the returned strings.\n",
        "reference_solution": "def split_top_level(text: str) -> list[str]:\n    fields: list[str] = []\n    start = 0\n    depth = 0\n    for index, character in enumerate(text):\n        if character == \"(\":\n            depth += 1\n        elif character == \")\":\n            depth -= 1\n            if depth < 0:\n                raise ValueError(\"unbalanced parentheses\")\n        elif character == \",\" and depth == 0:\n            fields.append(text[start:index].strip())\n            start = index + 1\n    if depth != 0:\n        raise ValueError(\"unbalanced parentheses\")\n    fields.append(text[start:].strip())\n    return fields\n",
        "tests": [
          {
            "call": "split_top_level(\"a,(b,c),d\")",
            "expected": "['a', '(b,c)', 'd']"
          },
          {
            "call": "split_top_level(\" f(a,(b,c)) , , z \")",
            "expected": "['f(a,(b,c))', '', 'z']"
          },
          {
            "call": "split_top_level(\"\")",
            "expected": "['']"
          },
          {
            "call": "split_top_level(\"a),b\")",
            "raises": "ValueError"
          },
          {
            "call": "split_top_level(\"a,(b,c\")",
            "raises": "ValueError"
          }
        ]
      },
      {
        "id": "prog-ds-container-plan",
        "collection": "screening",
        "area": "programming",
        "topic": "data-structures",
        "origin": "original",
        "title": "Choose a built-in container by operation",
        "skills": [
          "sequence-data-structures",
          "dictionaries",
          "sets",
          "stack",
          "queue",
          "heap",
          "hash-map"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 7,
        "prerequisites": [
          "Python built-in containers"
        ],
        "prompt": "Choose the most direct Python container or standard abstraction for each\ncase, in order: a mutable ordered batch; a fixed coordinate usable as a\nkey; counts by word; unique visited IDs; undo in reverse order; jobs in\narrival order; and repeatedly removing the smallest deadline. Give one\noperation-based reason for every choice.\n",
        "answer": "Use: `list` for a mutable ordered batch; `tuple` for a fixed hashable\ncoordinate; `dict` as a hash map from word to count; `set` for unique\nvisited IDs and average $O(1)$ membership; `list used as stack` for LIFO\nundo via append/pop; `collections.deque` for $O(1)$ queue operations at both\nends; and a `heapq min-heap` for repeated minimum removal in $O(\\log n)$.\n",
        "reference_solution": "def container_plan() -> tuple[str, ...]:\n    return (\n        \"list\",\n        \"tuple\",\n        \"dict\",\n        \"set\",\n        \"list used as stack\",\n        \"collections.deque\",\n        \"heapq min-heap\",\n    )\n",
        "tests": [
          {
            "call": "container_plan()",
            "expected": "('list', 'tuple', 'dict', 'set', 'list used as stack', 'collections.deque', 'heapq min-heap')"
          }
        ]
      },
      {
        "id": "prog-ds-postfix-stack",
        "collection": "screening",
        "area": "programming",
        "topic": "data-structures",
        "origin": "original",
        "title": "Evaluate postfix arithmetic with a stack",
        "skills": [
          "stack"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 12,
        "prerequisites": [
          "integer parsing",
          "valid postfix notation"
        ],
        "prompt": "Implement `evaluate_postfix(tokens)` for a valid postfix expression whose\ntokens are integer literals or `+`, `-`, and `*`. For an operator, pop the\nright operand and then the left operand. Return the final integer.\n",
        "answer": "Push integers. For an operator, pop `right`, pop `left`, compute\n`left operator right`, and push the result. Subtraction makes the pop\norder observable. The algorithm is $O(n)$ time and $O(n)$ worst-case space.\n",
        "reference_solution": "def evaluate_postfix(tokens: list[str]) -> int:\n    stack: list[int] = []\n    for token in tokens:\n        if token not in {\"+\", \"-\", \"*\"}:\n            stack.append(int(token))\n            continue\n        right = stack.pop()\n        left = stack.pop()\n        if token == \"+\":\n            stack.append(left + right)\n        elif token == \"-\":\n            stack.append(left - right)\n        else:\n            stack.append(left * right)\n    return stack[0]\n",
        "tests": [
          {
            "call": "evaluate_postfix([\"2\", \"3\", \"+\"])",
            "expected": "5"
          },
          {
            "call": "evaluate_postfix([\"7\", \"2\", \"-\"])",
            "expected": "5"
          },
          {
            "call": "evaluate_postfix([\"2\", \"3\", \"+\", \"4\", \"*\"])",
            "expected": "20"
          },
          {
            "call": "evaluate_postfix([\"5\"])",
            "expected": "5"
          }
        ]
      },
      {
        "id": "prog-ds-first-binary-search",
        "collection": "screening",
        "area": "programming",
        "topic": "data-structures",
        "origin": "original",
        "title": "Find the first matching index by binary search",
        "skills": [
          "binary-search",
          "sequence-data-structures"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 12,
        "prerequisites": [
          "sorted lists",
          "half-open intervals"
        ],
        "prompt": "Implement `first_index(nums, target)` for a list sorted in nondecreasing\norder. Return the first index containing `target`, including among\nduplicates, or `-1` when absent. Use $O(\\log n)$ comparisons.\n",
        "answer": "Search the half-open interval `[lo, hi)` for the first position whose\nvalue is not less than the target. Move `lo` past values below the target;\notherwise move `hi` to `mid`. Validate the final candidate before\nreturning it.\n",
        "reference_solution": "def first_index(nums: list[int], target: int) -> int:\n    lo = 0\n    hi = len(nums)\n    while lo < hi:\n        mid = (lo + hi) // 2\n        if nums[mid] < target:\n            lo = mid + 1\n        else:\n            hi = mid\n    if lo < len(nums) and nums[lo] == target:\n        return lo\n    return -1\n",
        "tests": [
          {
            "call": "first_index([], 3)",
            "expected": "-1"
          },
          {
            "call": "first_index([1, 2, 2, 2, 5], 2)",
            "expected": "1"
          },
          {
            "call": "first_index([1, 2, 2, 2, 5], 4)",
            "expected": "-1"
          },
          {
            "call": "first_index([1], 1)",
            "expected": "0"
          },
          {
            "call": "first_index([1, 3, 5], 1)",
            "expected": "0"
          }
        ]
      },
      {
        "id": "prog-ds-bfs-distances",
        "collection": "screening",
        "area": "programming",
        "topic": "data-structures",
        "origin": "original",
        "title": "Compute unweighted distances with BFS",
        "skills": [
          "queue",
          "bfs",
          "dictionaries",
          "hash-map"
        ],
        "priority": "stretch",
        "difficulty": "medium",
        "estimated_minutes": 18,
        "prerequisites": [
          "adjacency lists",
          "graph reachability"
        ],
        "prompt": "Implement `bfs_distances(graph, start)` for a directed unweighted graph\nrepresented by a dictionary from a node to its neighbors in deterministic\nlist order. Return a dictionary mapping each reachable node to its minimum\nedge distance from `start`. A node mentioned only as a neighbor has no\noutgoing edges.\n",
        "answer": "Enqueue the start at distance zero. The first time BFS discovers a node,\nassign its predecessor distance plus one and enqueue it. The distance\ndictionary also serves as the visited hash map. The complexity is\n$O(V + E)$ time and $O(V)$ auxiliary space over reachable nodes and edges.\n",
        "reference_solution": "from collections import deque\n\ndef bfs_distances(\n    graph: dict[str, list[str]], start: str\n) -> dict[str, int]:\n    distances = {start: 0}\n    frontier = deque([start])\n    while frontier:\n        node = frontier.popleft()\n        neighbors = graph[node] if node in graph else []\n        for neighbor in neighbors:\n            if neighbor in distances:\n                continue\n            distances[neighbor] = distances[node] + 1\n            frontier.append(neighbor)\n    return distances\n",
        "tests": [
          {
            "call": "bfs_distances({\"A\": [\"B\", \"C\"], \"B\": [\"D\"], \"C\": [\"D\"], \"D\": []}, \"A\")",
            "expected": "{'A': 0, 'B': 1, 'C': 1, 'D': 2}"
          },
          {
            "call": "bfs_distances({\"A\": [\"B\"], \"B\": [\"A\"], \"X\": []}, \"A\")",
            "expected": "{'A': 0, 'B': 1}"
          },
          {
            "call": "bfs_distances({}, \"Z\")",
            "expected": "{'Z': 0}"
          }
        ]
      },
      {
        "id": "prog-ds-iterative-dfs",
        "collection": "screening",
        "area": "programming",
        "topic": "data-structures",
        "origin": "original",
        "title": "Traverse reachable nodes with iterative DFS",
        "skills": [
          "dfs",
          "stack",
          "dictionaries",
          "sets"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 15,
        "prerequisites": [
          "adjacency lists",
          "stack operations"
        ],
        "prompt": "Implement `dfs_order(graph, start)` using an explicit stack. The graph is\na dictionary whose neighbor lists define the desired visit order. Return\nnodes in first-visit order, visiting the first listed unvisited neighbor\nbefore later neighbors. Handle cycles and neighbor-only nodes.\n",
        "answer": "Pop from a LIFO stack, skip previously seen nodes, then mark and record the\nnode. Push neighbors in reverse list order so the first listed neighbor is\npopped next. A set prevents revisits. The traversal is $O(V + E)$.\n",
        "reference_solution": "def dfs_order(graph: dict[str, list[str]], start: str) -> list[str]:\n    order: list[str] = []\n    seen: set[str] = set()\n    stack = [start]\n    while stack:\n        node = stack.pop()\n        if node in seen:\n            continue\n        seen.add(node)\n        order.append(node)\n        neighbors = graph[node] if node in graph else []\n        for neighbor in reversed(neighbors):\n            if neighbor not in seen:\n                stack.append(neighbor)\n    return order\n",
        "tests": [
          {
            "call": "dfs_order({\"A\": [\"B\", \"C\"], \"B\": [\"D\"], \"C\": [], \"D\": []}, \"A\")",
            "expected": "['A', 'B', 'D', 'C']"
          },
          {
            "call": "dfs_order({\"A\": [\"B\"], \"B\": [\"A\"]}, \"A\")",
            "expected": "['A', 'B']"
          },
          {
            "call": "dfs_order({}, \"Q\")",
            "expected": "['Q']"
          }
        ]
      },
      {
        "id": "prog-ds-merge-sorted-lists",
        "collection": "screening",
        "area": "programming",
        "topic": "data-structures",
        "origin": "original",
        "title": "Merge sorted lists with a heap",
        "skills": [
          "heap",
          "sequence-data-structures"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 18,
        "prerequisites": [
          "sorted lists",
          "heap push and pop"
        ],
        "prompt": "Implement `merge_sorted_lists(rows)` where every inner list is sorted.\nReturn one sorted list. Use a heap containing at most one pending value\nfrom each nonempty row, so $N$ total values across $k$ rows take\n$O(N \\log k)$ time.\n",
        "answer": "Seed the heap with each row's first value and its row and column indices.\nRepeatedly pop the smallest entry, append its value, and push the next\nvalue from the same row. Row and column indices break value ties\ndeterministically.\n",
        "reference_solution": "import heapq\n\ndef merge_sorted_lists(rows: list[list[int]]) -> list[int]:\n    heap: list[tuple[int, int, int]] = []\n    for row_index, row in enumerate(rows):\n        if row:\n            heapq.heappush(heap, (row[0], row_index, 0))\n    merged: list[int] = []\n    while heap:\n        value, row_index, column_index = heapq.heappop(heap)\n        merged.append(value)\n        next_column = column_index + 1\n        if next_column < len(rows[row_index]):\n            next_value = rows[row_index][next_column]\n            heapq.heappush(\n                heap, (next_value, row_index, next_column)\n            )\n    return merged\n",
        "tests": [
          {
            "call": "merge_sorted_lists([])",
            "expected": "[]"
          },
          {
            "call": "merge_sorted_lists([[], []])",
            "expected": "[]"
          },
          {
            "call": "merge_sorted_lists([[1, 4], [1, 3, 5], [2]])",
            "expected": "[1, 1, 2, 3, 4, 5]"
          },
          {
            "call": "merge_sorted_lists([[-3, 7], [-2, 0]])",
            "expected": "[-3, -2, 0, 7]"
          }
        ]
      },
      {
        "id": "prog-py-alias-copy-equality",
        "collection": "screening",
        "area": "programming",
        "topic": "python",
        "origin": "original",
        "title": "Trace aliasing, shallow copy, and equality",
        "skills": [
          "python-sequence-semantics",
          "mutability",
          "aliasing",
          "shallow-copy",
          "value-equality"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 8,
        "prerequisites": [
          "nested lists",
          "object identity"
        ],
        "prompt": "Predict every component returned by `alias_copy_report()`. Explain which\nmutations reach `b` and `c`, and distinguish `==` from `is`.\n",
        "answer": "`b` aliases the outer list, so it sees both mutations. `c` has a distinct\nouter list but shares the original inner lists, so it sees the `3` added\ninside the first inner list but not the new `[4]` appended to the outer\nlist. `a == b` and `a is b` are true. `a == c` is false because their\nouter contents differ. `c[0] is a[0]` is true.\n",
        "reference_solution": "def alias_copy_report() -> tuple[object, ...]:\n    a = [[1], [2]]\n    b = a\n    c = a.copy()\n    a[0].append(3)\n    a.append([4])\n    return a, b, c, a == b, a is b, a == c, c[0] is a[0]\n",
        "tests": [
          {
            "call": "alias_copy_report()",
            "expected": "([[1, 3], [2], [4]], [[1, 3], [2], [4]], [[1, 3], [2]], True, True, False, True)"
          }
        ]
      },
      {
        "id": "prog-py-mutable-default",
        "collection": "screening",
        "area": "programming",
        "topic": "python",
        "origin": "original",
        "title": "Diagnose a mutable default argument",
        "skills": [
          "python-syntax",
          "functions",
          "mutability",
          "aliasing"
        ],
        "priority": "foundation",
        "difficulty": "medium",
        "estimated_minutes": 8,
        "prerequisites": [
          "function parameters",
          "list mutation"
        ],
        "prompt": "In `default_argument_report`, predict the returned value and identity\nbooleans. Then rewrite `record` so calls that omit `bucket` receive a new\nlist while callers may still supply an existing list.\n",
        "answer": "The default list is created once, so `first`, `second`, and `third` alias\nthe same list, which ends as `[\"A\", \"B\", \"D\"]`. The explicit list used\nfor `\"C\"` is separate. The safe version uses `None` as the default and\ncreates a list inside the function only when the argument is `None`.\n",
        "reference_solution": "def default_argument_report() -> tuple[object, ...]:\n    def record(tag: str, bucket: list[str] = []) -> list[str]:\n        bucket.append(tag)\n        return bucket\n\n    first = record(\"A\")\n    second = record(\"B\")\n    separate = record(\"C\", [])\n    third = record(\"D\")\n    return (\n        first.copy(),\n        second.copy(),\n        separate.copy(),\n        third.copy(),\n        first is second,\n        second is third,\n    )\n\ndef safe_record(\n    tag: str, bucket: list[str] | None = None\n) -> list[str]:\n    if bucket is None:\n        bucket = []\n    bucket.append(tag)\n    return bucket\n",
        "tests": [
          {
            "call": "default_argument_report()",
            "expected": "(['A', 'B', 'D'], ['A', 'B', 'D'], ['C'], ['A', 'B', 'D'], True, True)"
          },
          {
            "call": "safe_record(\"X\")",
            "expected": "['X']"
          },
          {
            "call": "safe_record(\"Y\")",
            "expected": "['Y']"
          }
        ]
      },
      {
        "id": "prog-py-list-complexity",
        "collection": "screening",
        "area": "programming",
        "topic": "python",
        "origin": "original",
        "title": "Reason about list-operation complexity",
        "skills": [
          "complexity",
          "python-syntax",
          "functions",
          "python-sequence-semantics"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 8,
        "prerequisites": [
          "list membership",
          "list count",
          "asymptotic notation"
        ],
        "prompt": "For the function below on $n$ input values, give tight worst-case time and\nauxiliary-space bounds. Then state the expected-time bound after replacing\n`unique` with a set and replacing the final loop by `return len(values)`.\n\n```python\ndef duplicate_free_score(values):\n    unique = []\n    for value in values:\n        if value not in unique:\n            unique.append(value)\n    total = 0\n    for value in unique:\n        total += values.count(value)\n    return total\n```\n",
        "answer": "Worst-case time is $O(n^2)$: list membership can scan $O(n)$ elements on each\niteration, and up to $n$ calls to `values.count` each scan $n$ elements.\nAuxiliary space is $O(n)$ for `unique`. A set-based pass has $O(n)$ expected\ntime under ordinary hash-table assumptions, and `len(values)` removes the\nsecond scan entirely. The returned score is always $n$.\n",
        "reference_solution": "def complexity_answers() -> tuple[str, str, str]:\n    return \"O(n^2)\", \"O(n)\", \"O(n) expected\"\n",
        "tests": [
          {
            "call": "complexity_answers()",
            "expected": "('O(n^2)', 'O(n)', 'O(n) expected')"
          }
        ]
      },
      {
        "id": "prog-py-point-equality",
        "collection": "screening",
        "area": "programming",
        "topic": "python",
        "origin": "original",
        "title": "Implement value equality for a mutable class",
        "skills": [
          "classes",
          "value-equality",
          "mutability",
          "aliasing"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 15,
        "prerequisites": [
          "methods",
          "object identity",
          "NotImplemented"
        ],
        "prompt": "Implement `Point(x, y)` with public coordinates, a mutating\n`translate(dx, dy)` method, and value equality between Point instances.\nEquality with an unrelated type must not raise an exception. Then explain\nthe result of `point_report()`.\n",
        "answer": "`__eq__` compares both coordinates when the other object is a Point and\nreturns `NotImplemented` otherwise. Two distinct points initially have\nequal values but different identities. Translating `p` also changes its\nalias, not `q`, so `p != q` afterward while `p is alias` remains true.\n",
        "reference_solution": "class Point:\n    def __init__(self, x: int, y: int) -> None:\n        self.x = x\n        self.y = y\n\n    def translate(self, dx: int, dy: int) -> None:\n        self.x += dx\n        self.y += dy\n\n    def __eq__(self, other: object) -> bool:\n        if not isinstance(other, Point):\n            return NotImplemented\n        return self.x == other.x and self.y == other.y\n\ndef point_report() -> tuple[object, ...]:\n    point = Point(1, 2)\n    equal_point = Point(1, 2)\n    alias = point\n    before = (point == equal_point, point is equal_point, point == alias)\n    point.translate(1, -1)\n    after = (point == equal_point, point is alias)\n    return before, after, (point.x, point.y), (equal_point.x, equal_point.y)\n",
        "tests": [
          {
            "call": "point_report()",
            "expected": "((True, False, True), (False, True), (2, 1), (1, 2))"
          },
          {
            "call": "Point(0, 0) == Point(0, 0)",
            "expected": "True"
          },
          {
            "call": "Point(0, 0) == (0, 0)",
            "expected": "False"
          }
        ]
      },
      {
        "id": "prog-rec-digit-sum-trace",
        "collection": "screening",
        "area": "programming",
        "topic": "recursion",
        "origin": "original",
        "title": "Trace recursive calls and returns",
        "skills": [
          "base-case",
          "recursive-trace"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 6,
        "prerequisites": [
          "integer division",
          "remainder",
          "call stack"
        ],
        "prompt": "For nonnegative integers, `digit_sum_trace` recursively removes the last\ndigit until one digit remains. Write the exact call and return event order\nfor input `4072`, and give the final sum.\n",
        "answer": "Calls descend as `4072`, `407`, `40`, `4`. Returns unwind as `4 -> 4`,\n`40 -> 4`, `407 -> 11`, and `4072 -> 13`. The base case is any value less\nthan $10$, including zero. The final sum is $13$.\n",
        "reference_solution": "def digit_sum_trace(n: int) -> tuple[int, tuple[str, ...]]:\n    events: list[str] = []\n\n    def visit(value: int) -> int:\n        events.append(f\"call {value}\")\n        if value < 10:\n            result = value\n        else:\n            result = value % 10 + visit(value // 10)\n        events.append(f\"return {value} -> {result}\")\n        return result\n\n    total = visit(n)\n    return total, tuple(events)\n",
        "tests": [
          {
            "call": "digit_sum_trace(4072)",
            "expected": "(13, ('call 4072', 'call 407', 'call 40', 'call 4', 'return 4 -> 4', 'return 40 -> 4', 'return 407 -> 11', 'return 4072 -> 13'))"
          },
          {
            "call": "digit_sum_trace(0)",
            "expected": "(0, ('call 0', 'return 0 -> 0'))"
          }
        ]
      },
      {
        "id": "prog-rec-palindrome-indices",
        "collection": "screening",
        "area": "programming",
        "topic": "recursion",
        "origin": "original",
        "title": "Check a palindrome recursively by indices",
        "skills": [
          "base-case",
          "recursive-implementation"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 10,
        "prerequisites": [
          "string indexing",
          "recursive call stack"
        ],
        "prompt": "Implement `is_palindrome(text)` recursively without loops, slicing, or\nreversing. The comparison is case-sensitive and includes every character.\n",
        "answer": "Use two indices. Zero or one remaining characters is a palindrome. If the\nendpoint characters differ, return false; otherwise recurse inward. The\nalgorithm takes $O(n)$ time and $O(n)$ call-stack space.\n",
        "reference_solution": "def is_palindrome(text: str) -> bool:\n    def check(left: int, right: int) -> bool:\n        if left >= right:\n            return True\n        if text[left] != text[right]:\n            return False\n        return check(left + 1, right - 1)\n\n    return check(0, len(text) - 1)\n",
        "tests": [
          {
            "call": "is_palindrome(\"\")",
            "expected": "True"
          },
          {
            "call": "is_palindrome(\"x\")",
            "expected": "True"
          },
          {
            "call": "is_palindrome(\"racecar\")",
            "expected": "True"
          },
          {
            "call": "is_palindrome(\"abca\")",
            "expected": "False"
          },
          {
            "call": "is_palindrome(\"Aa\")",
            "expected": "False"
          }
        ]
      },
      {
        "id": "prog-rec-nested-total",
        "collection": "screening",
        "area": "programming",
        "topic": "recursion",
        "origin": "original",
        "title": "Sum an arbitrarily nested integer list",
        "skills": [
          "base-case",
          "recursive-implementation"
        ],
        "priority": "stretch",
        "difficulty": "hard",
        "estimated_minutes": 15,
        "prerequisites": [
          "type checks",
          "recursive decomposition"
        ],
        "prompt": "Implement `nested_total(value)` where `value` is either an integer or a\nlist containing more valid values. Lists may be empty and nesting depth is\narbitrary. Do not use loops, `sum`, or slicing.\n",
        "answer": "Use one base case for an integer and a second base case for reaching the\nend of a list. Recursively total the current child and the remainder by\nindex. Every integer and list position is processed once; stack depth\ndepends on both nesting and list length.\n",
        "reference_solution": "def nested_total(value: int | list) -> int:\n    if isinstance(value, int):\n        return value\n\n    def total_from(index: int) -> int:\n        if index == len(value):\n            return 0\n        return nested_total(value[index]) + total_from(index + 1)\n\n    return total_from(0)\n",
        "tests": [
          {
            "call": "nested_total(7)",
            "expected": "7"
          },
          {
            "call": "nested_total([])",
            "expected": "0"
          },
          {
            "call": "nested_total([1, [2, [], [3]], 4])",
            "expected": "10"
          },
          {
            "call": "nested_total([[-2], [5, [-1]]])",
            "expected": "2"
          },
          {
            "call": "nested_total([[[[0]]]])",
            "expected": "0"
          }
        ]
      }
    ]
  },
  "practice": {
    "sources": [
      {
        "id": "mit-18-06-s2010",
        "title": "MIT 18.06 Linear Algebra",
        "organization": "MIT OpenCourseWare",
        "course_url": "https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/",
        "materials_url": "https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/pages/exams/"
      },
      {
        "id": "mit-18-02sc-f2010",
        "title": "MIT 18.02SC Multivariable Calculus",
        "organization": "MIT OpenCourseWare",
        "course_url": "https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/",
        "materials_url": "https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/pages/2.-partial-derivatives/exam-2/"
      },
      {
        "id": "mit-18-01sc-f2010",
        "title": "MIT 18.01SC Single Variable Calculus",
        "organization": "MIT OpenCourseWare",
        "course_url": "https://ocw.mit.edu/courses/18-01sc-single-variable-calculus-fall-2010/",
        "materials_url": "https://ocw.mit.edu/courses/18-01sc-single-variable-calculus-fall-2010/pages/exams/"
      },
      {
        "id": "mit-18-05-s2022",
        "title": "MIT 18.05 Introduction to Probability and Statistics",
        "organization": "MIT OpenCourseWare",
        "course_url": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/",
        "materials_url": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/pages/exams/"
      },
      {
        "id": "mit-6-036-exams",
        "title": "MIT 6.036 Introduction to Machine Learning Exams",
        "organization": "Massachusetts Institute of Technology",
        "course_url": "https://introml.mit.edu/",
        "materials_url": "https://introml.mit.edu/spring23/final/review"
      },
      {
        "id": "mit-6-100l-f2022",
        "title": "MIT 6.100L Introduction to CS and Programming using Python",
        "organization": "MIT OpenCourseWare",
        "course_url": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/",
        "materials_url": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/finger-exercises/"
      },
      {
        "id": "google-mlcc",
        "title": "Machine Learning Crash Course",
        "organization": "Google for Developers",
        "course_url": "https://developers.google.com/machine-learning/crash-course",
        "materials_url": "https://developers.google.com/machine-learning/crash-course/exercises"
      },
      {
        "id": "leetcode",
        "title": "LeetCode Problem Set",
        "organization": "LeetCode",
        "course_url": "https://leetcode.com/problemset/",
        "materials_url": "https://leetcode.com/problemset/"
      },
      {
        "id": "harvard-stat110-f2011",
        "title": "Harvard Stat 110 Probability — Strategic Practice",
        "organization": "Harvard University",
        "course_url": "https://stat110.hsites.harvard.edu/",
        "materials_url": "https://stat110.hsites.harvard.edu/strategic-practice-problems"
      },
      {
        "id": "pml-book1-2022",
        "title": "Probabilistic Machine Learning: An Introduction — online draft dated 2025-04-18",
        "organization": "Kevin P. Murphy and MIT Press",
        "course_url": "https://probml.github.io/pml-book/book1.html",
        "materials_url": "https://probml.github.io/pml-book/solns-public.pdf"
      }
    ],
    "items": [
      {
        "id": "mit-6-100l-finger-06",
        "collection": "practice",
        "area": "programming",
        "topic": "data-structures",
        "origin": "external",
        "title": "Bisection search finger exercise",
        "skills": [
          "binary-search",
          "loops",
          "conditionals"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 10,
        "prerequisites": [
          "integer-arithmetic"
        ],
        "source_id": "mit-6-100l-f2022",
        "locator": {
          "document": "Finger Exercises",
          "label": "Lecture 6"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/finger-exercises/#finger-exercise-lecture-6",
          "solution": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/resources/mit6_100l_f22_ex06_sol_pdf/"
        },
        "selection_note": "A small official exercise that separates binary-search reasoning from library use.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-6-100l-finger-11",
        "collection": "practice",
        "area": "programming",
        "topic": "python",
        "origin": "external",
        "title": "List mutation and sorting finger exercise",
        "skills": [
          "python-sequence-semantics",
          "mutability"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 8,
        "prerequisites": [
          "lists"
        ],
        "source_id": "mit-6-100l-f2022",
        "locator": {
          "document": "Finger Exercises",
          "label": "Lecture 11"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/finger-exercises/#finger-exercise-lecture-11",
          "solution": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/resources/mit6_100l_f22_ex11_sol_pdf/"
        },
        "selection_note": "Directly tests in-place mutation and ordering semantics.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-6-100l-finger-14",
        "collection": "practice",
        "area": "programming",
        "topic": "data-structures",
        "origin": "external",
        "title": "Dictionary selection finger exercise",
        "skills": [
          "dictionaries",
          "sets",
          "hash-map"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 10,
        "prerequisites": [
          "dictionaries"
        ],
        "source_id": "mit-6-100l-f2022",
        "locator": {
          "document": "Finger Exercises",
          "label": "Lecture 14",
          "solution_pages": "1"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/finger-exercises/#finger-exercise-lecture-14",
          "solution": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/resources/mit6_100l_f22_ex14_sol_pdf/"
        },
        "selection_note": "Uses dictionary iteration, filtering, and deterministic output ordering.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-6-100l-finger-15",
        "collection": "practice",
        "area": "programming",
        "topic": "recursion",
        "origin": "external",
        "title": "Recursive power finger exercise",
        "skills": [
          "base-case",
          "recursive-trace",
          "recursive-implementation"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 7,
        "prerequisites": [
          "functions"
        ],
        "source_id": "mit-6-100l-f2022",
        "locator": {
          "document": "Finger Exercises",
          "label": "Lecture 15"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/finger-exercises/#finger-exercise-lecture-15",
          "solution": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/resources/mit6_100l_f22_ex15_sol_pdf/"
        },
        "selection_note": "A minimal official check of base and recursive cases.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-6-100l-finger-16",
        "collection": "practice",
        "area": "programming",
        "topic": "recursion",
        "origin": "external",
        "title": "Recursive flattening finger exercise",
        "skills": [
          "base-case",
          "recursive-implementation",
          "sequence-data-structures"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 10,
        "prerequisites": [
          "recursion",
          "lists"
        ],
        "source_id": "mit-6-100l-f2022",
        "locator": {
          "document": "Finger Exercises",
          "label": "Lecture 16"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/finger-exercises/#finger-exercise-lecture-16",
          "solution": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/resources/mit6_100l_f22_ex16_sol_pdf/"
        },
        "selection_note": "Adds recursive structural decomposition beyond a scalar recurrence.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-6-100l-finger-23",
        "collection": "practice",
        "area": "programming",
        "topic": "python",
        "origin": "external",
        "title": "Asymptotic complexity finger exercise",
        "skills": [
          "complexity",
          "loops"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 10,
        "prerequisites": [
          "loops"
        ],
        "source_id": "mit-6-100l-f2022",
        "locator": {
          "document": "Finger Exercises",
          "label": "Lecture 23"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/finger-exercises/#finger-exercise-lecture-23",
          "solution": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/resources/mit6_100l_f22_ex23_sol_pdf/"
        },
        "selection_note": "Tests complexity from actual Python operations rather than memorized algorithm names.",
        "answer_status": "official-solution"
      },
      {
        "id": "google-mlcc-linear-regression-quiz",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "regression",
        "origin": "external",
        "title": "Linear regression knowledge check",
        "skills": [
          "linear-regression",
          "squared-loss",
          "gradient-update"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 10,
        "prerequisites": [
          "algebra"
        ],
        "source_id": "google-mlcc",
        "locator": {
          "document": "Machine Learning Crash Course",
          "label": "Linear regression — Test your knowledge"
        },
        "links": {
          "problem": "https://developers.google.com/machine-learning/crash-course/linear-regression/test-your-knowledge",
          "solution": "https://developers.google.com/machine-learning/crash-course/linear-regression/test-your-knowledge"
        },
        "selection_note": "An authoritative interactive check of the regression objective and training loop.",
        "answer_status": "official-interactive-feedback"
      },
      {
        "id": "google-mlcc-logistic-quiz",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "classification",
        "origin": "external",
        "title": "Logistic regression knowledge check",
        "skills": [
          "logistic-regression",
          "cross-entropy",
          "optimization-regularization"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 10,
        "prerequisites": [
          "probability"
        ],
        "source_id": "google-mlcc",
        "locator": {
          "document": "Machine Learning Crash Course",
          "label": "Logistic regression — Test your knowledge"
        },
        "links": {
          "problem": "https://developers.google.com/machine-learning/crash-course/logistic-regression/test-your-knowledge",
          "solution": "https://developers.google.com/machine-learning/crash-course/logistic-regression/test-your-knowledge"
        },
        "selection_note": "Checks probability interpretation, loss, and regularization on the official Google course.",
        "answer_status": "official-interactive-feedback"
      },
      {
        "id": "google-mlcc-classification-quiz",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "classification",
        "origin": "external",
        "title": "Classification metrics knowledge check",
        "skills": [
          "confusion-matrix",
          "accuracy",
          "precision-recall",
          "decision-boundary",
          "classification-thresholds"
        ],
        "priority": "core",
        "difficulty": "easy",
        "estimated_minutes": 10,
        "prerequisites": [
          "fractions"
        ],
        "source_id": "google-mlcc",
        "locator": {
          "document": "Machine Learning Crash Course",
          "label": "Classification — Test your knowledge"
        },
        "links": {
          "problem": "https://developers.google.com/machine-learning/crash-course/classification/test-your-knowledge",
          "solution": "https://developers.google.com/machine-learning/crash-course/classification/test-your-knowledge"
        },
        "selection_note": "Authoritative questions on threshold-dependent classification metrics.",
        "answer_status": "official-interactive-feedback"
      },
      {
        "id": "google-mlcc-overfitting-quiz",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "theory",
        "origin": "external",
        "title": "Generalization and overfitting knowledge check",
        "skills": [
          "generalization",
          "overfitting",
          "train-validation-test",
          "model-complexity",
          "optimization-regularization"
        ],
        "priority": "core",
        "difficulty": "easy",
        "estimated_minutes": 10,
        "prerequisites": [
          "training-loss"
        ],
        "source_id": "google-mlcc",
        "locator": {
          "document": "Machine Learning Crash Course",
          "label": "Datasets"
        },
        "links": {
          "problem": "https://developers.google.com/machine-learning/crash-course/overfitting/test-your-knowledge",
          "solution": "https://developers.google.com/machine-learning/crash-course/overfitting/test-your-knowledge"
        },
        "selection_note": "Covers the evaluation distinctions most often confused under time pressure.",
        "answer_status": "official-interactive-feedback"
      },
      {
        "id": "google-mlcc-neural-network-quiz",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "neural-networks",
        "origin": "external",
        "title": "Neural-network knowledge check",
        "skills": [
          "forward-pass",
          "activations",
          "backpropagation",
          "neural-network-losses"
        ],
        "priority": "core",
        "difficulty": "easy",
        "estimated_minutes": 10,
        "prerequisites": [
          "linear-models"
        ],
        "source_id": "google-mlcc",
        "locator": {
          "document": "Machine Learning Crash Course",
          "label": "Neural networks — Test your knowledge"
        },
        "links": {
          "problem": "https://developers.google.com/machine-learning/crash-course/neural-networks/test-your-knowledge",
          "solution": "https://developers.google.com/machine-learning/crash-course/neural-networks/test-your-knowledge"
        },
        "selection_note": "A concise official check of architecture, activations, and training.",
        "answer_status": "official-interactive-feedback"
      },
      {
        "id": "leetcode-20-valid-parentheses",
        "collection": "practice",
        "area": "programming",
        "topic": "data-structures",
        "origin": "external",
        "title": "Valid Parentheses",
        "skills": [
          "stack",
          "conditionals"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 12,
        "prerequisites": [
          "strings"
        ],
        "source_id": "leetcode",
        "locator": {
          "document": "LeetCode Problem Set",
          "label": "Problem 20: Valid Parentheses"
        },
        "links": {
          "problem": "https://leetcode.com/problems/valid-parentheses/",
          "solution": "https://leetcode.com/problems/valid-parentheses/"
        },
        "selection_note": "A standard stack invariant problem with immediate judge feedback on malformed nesting and edge cases.",
        "answer_status": "official-interactive-feedback"
      },
      {
        "id": "leetcode-215-kth-largest",
        "collection": "practice",
        "area": "programming",
        "topic": "data-structures",
        "origin": "external",
        "title": "Kth Largest Element in an Array",
        "skills": [
          "heap",
          "complexity"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 20,
        "prerequisites": [
          "arrays",
          "priority-queues"
        ],
        "source_id": "leetcode",
        "locator": {
          "document": "LeetCode Problem Set",
          "label": "Problem 215: Kth Largest Element in an Array"
        },
        "links": {
          "problem": "https://leetcode.com/problems/kth-largest-element-in-an-array/",
          "solution": "https://leetcode.com/problems/kth-largest-element-in-an-array/"
        },
        "selection_note": "Requires selecting an appropriate heap or selection strategy under an explicit complexity target and provides judge feedback.",
        "answer_status": "official-interactive-feedback"
      },
      {
        "id": "leetcode-704-binary-search",
        "collection": "practice",
        "area": "programming",
        "topic": "data-structures",
        "origin": "external",
        "title": "Binary Search",
        "skills": [
          "binary-search",
          "conditionals",
          "loops"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 10,
        "prerequisites": [
          "sorted-arrays"
        ],
        "source_id": "leetcode",
        "locator": {
          "document": "LeetCode Problem Set",
          "label": "Problem 704: Binary Search"
        },
        "links": {
          "problem": "https://leetcode.com/problems/binary-search/",
          "solution": "https://leetcode.com/problems/binary-search/"
        },
        "selection_note": "Tests interval invariants and termination on a canonical sorted-array search with judge feedback.",
        "answer_status": "official-interactive-feedback"
      },
      {
        "id": "leetcode-752-open-the-lock",
        "collection": "practice",
        "area": "programming",
        "topic": "data-structures",
        "origin": "external",
        "title": "Open the Lock",
        "skills": [
          "queue",
          "bfs",
          "dictionaries",
          "sets"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 25,
        "prerequisites": [
          "graphs",
          "shortest-path"
        ],
        "source_id": "leetcode",
        "locator": {
          "document": "LeetCode Problem Set",
          "label": "Problem 752: Open the Lock"
        },
        "links": {
          "problem": "https://leetcode.com/problems/open-the-lock/",
          "solution": "https://leetcode.com/problems/open-the-lock/"
        },
        "selection_note": "Models an implicit state graph and requires BFS with visited-state handling; submissions receive judge feedback.",
        "answer_status": "official-interactive-feedback"
      },
      {
        "id": "leetcode-200-number-of-islands",
        "collection": "practice",
        "area": "programming",
        "topic": "data-structures",
        "origin": "external",
        "title": "Number of Islands",
        "skills": [
          "dfs",
          "bfs",
          "queue",
          "recursive-implementation"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 25,
        "prerequisites": [
          "grids",
          "graph-traversal"
        ],
        "source_id": "leetcode",
        "locator": {
          "document": "LeetCode Problem Set",
          "label": "Problem 200: Number of Islands"
        },
        "links": {
          "problem": "https://leetcode.com/problems/number-of-islands/",
          "solution": "https://leetcode.com/problems/number-of-islands/"
        },
        "selection_note": "Uses recursive or iterative flood fill to test traversal state, base cases, and component counting with judge feedback.",
        "answer_status": "official-interactive-feedback"
      },
      {
        "id": "mit-18-02sc-f2010-exam2-q1",
        "collection": "practice",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "external",
        "title": "Gradient, tangent plane, linearization, and directional derivative",
        "skills": [
          "gradient",
          "directional-derivative"
        ],
        "priority": "core",
        "difficulty": "easy",
        "estimated_minutes": 12,
        "prerequisites": [
          "partial-derivatives"
        ],
        "source_id": "mit-18-02sc-f2010",
        "locator": {
          "document": "Exam 2",
          "label": "Question 1(a–d)",
          "page": 1,
          "solution_pages": "1"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/resources/mit18_02sc_exam2/",
          "solution": "https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/resources/mit18_02sc_exam2sol/"
        },
        "selection_note": "A fast diagnostic of the multivariable differential concepts most likely to transfer to ML.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-02sc-f2010-exam2-q3",
        "collection": "practice",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "external",
        "title": "Critical points and constrained domain boundaries",
        "skills": [
          "calculus-stationary-points",
          "unconstrained-optimization"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 14,
        "prerequisites": [
          "partial-derivatives",
          "quadratic-functions"
        ],
        "source_id": "mit-18-02sc-f2010",
        "locator": {
          "document": "Exam 2",
          "label": "Question 3(a–b)",
          "page": 1,
          "solution_pages": "1"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/resources/mit18_02sc_exam2/",
          "solution": "https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/resources/mit18_02sc_exam2sol/"
        },
        "selection_note": "Separates local critical-point classification from optimization over a constrained region.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-02sc-f2010-exam2-q4",
        "collection": "practice",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "external",
        "title": "Multivariable chain rule under a change of variables",
        "skills": [
          "multivariable-chain-rule",
          "partial-derivatives"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 10,
        "prerequisites": [
          "partial-derivatives"
        ],
        "source_id": "mit-18-02sc-f2010",
        "locator": {
          "document": "Exam 2",
          "label": "Question 4(a–c)",
          "page": 1,
          "solution_pages": "1"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/resources/mit18_02sc_exam2/",
          "solution": "https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/resources/mit18_02sc_exam2sol/"
        },
        "selection_note": "Tests symbolic chain-rule bookkeeping that directly supports backpropagation and reparameterization.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-02sc-f2010-exam2-q5",
        "collection": "practice",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "external",
        "title": "Lagrange multiplier equations and tangent geometry",
        "skills": [
          "constrained-optimization"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 10,
        "prerequisites": [
          "gradient",
          "implicit-surfaces"
        ],
        "source_id": "mit-18-02sc-f2010",
        "locator": {
          "document": "Exam 2",
          "label": "Question 5(a–b)",
          "page": 1,
          "solution_pages": "2"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/resources/mit18_02sc_exam2/",
          "solution": "https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/resources/mit18_02sc_exam2sol/"
        },
        "selection_note": "Focuses on setting up constrained optimization and interpreting the shared normal direction.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-02sc-f2010-exam2-q6",
        "collection": "practice",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "external",
        "title": "Total differentials and implicit differentiation",
        "skills": [
          "implicit-differentiation",
          "linear-systems"
        ],
        "priority": "supplementary",
        "difficulty": "medium",
        "estimated_minutes": 10,
        "prerequisites": [
          "partial-derivatives"
        ],
        "source_id": "mit-18-02sc-f2010",
        "locator": {
          "document": "Exam 2",
          "label": "Question 6",
          "page": 2,
          "solution_pages": "2–3"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/resources/mit18_02sc_exam2/",
          "solution": "https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/resources/mit18_02sc_exam2sol/"
        },
        "selection_note": "Checks whether local differential constraints can be combined and solved without treating variables as independent.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-05-s2022-exam1-q1b",
        "collection": "practice",
        "area": "mathematics",
        "topic": "probability",
        "origin": "external",
        "title": "Events, unions, and conditional probability",
        "skills": [
          "event-algebra",
          "inclusion-exclusion",
          "conditional-probability"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 6,
        "prerequisites": [
          "basic-algebra"
        ],
        "source_id": "mit-18-05-s2022",
        "locator": {
          "document": "Exam 1",
          "label": "Question 1(b)",
          "page": 2
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam01_pdf/",
          "solution": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam01_sol_pdf/"
        },
        "selection_note": "A compact check of whether event notation and conditioning are operational rather than merely familiar.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-05-s2022-exam1-q3",
        "collection": "practice",
        "area": "mathematics",
        "topic": "probability",
        "origin": "external",
        "title": "Joint tables, Bayes rule, and independence",
        "skills": [
          "bayes-rule",
          "probabilistic-independence"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 14,
        "prerequisites": [
          "basic-algebra"
        ],
        "source_id": "mit-18-05-s2022",
        "locator": {
          "document": "Exam 1",
          "label": "Question 3",
          "page": 4
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam01_pdf/",
          "solution": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam01_sol_pdf/"
        },
        "selection_note": "Uses one finite model to test joint and marginal probabilities, reverse conditioning, and independence.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-05-s2022-exam1-q4",
        "collection": "practice",
        "area": "mathematics",
        "topic": "probability",
        "origin": "external",
        "title": "Diagnostic testing with base rates",
        "skills": [
          "bayes-rule",
          "conditional-probability"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 8,
        "prerequisites": [
          "basic-algebra"
        ],
        "source_id": "mit-18-05-s2022",
        "locator": {
          "document": "Exam 1",
          "label": "Question 4",
          "page": 5
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam01_pdf/",
          "solution": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam01_sol_pdf/"
        },
        "selection_note": "A short, discriminative Bayes calculation whose interpretation transfers directly to ML evaluation.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-05-s2022-exam1-q5",
        "collection": "practice",
        "area": "mathematics",
        "topic": "probability",
        "origin": "external",
        "title": "Joint density, moments, covariance, and correlation",
        "skills": [
          "joint-distributions",
          "marginal-distributions",
          "conditional-distributions",
          "probabilistic-independence",
          "expectation",
          "variance"
        ],
        "priority": "core",
        "difficulty": "hard",
        "estimated_minutes": 24,
        "prerequisites": [
          "basic-algebra"
        ],
        "source_id": "mit-18-05-s2022",
        "locator": {
          "document": "Exam 1",
          "label": "Question 5",
          "page": 6
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam01_pdf/",
          "solution": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam01_sol_pdf/"
        },
        "selection_note": "Integrates continuous probability, moments, dependence, and a geometric integration region in one coherent problem.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-05-s2022-exam1-q6",
        "collection": "practice",
        "area": "mathematics",
        "topic": "probability",
        "origin": "external",
        "title": "Central limit theorem for an aggregate",
        "skills": [
          "central-limit-theorem",
          "sums-of-random-variables"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 10,
        "prerequisites": [
          "basic-algebra"
        ],
        "source_id": "mit-18-05-s2022",
        "locator": {
          "document": "Exam 1",
          "label": "Question 6",
          "page": 8
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam01_pdf/",
          "solution": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam01_sol_pdf/"
        },
        "selection_note": "Tests whether the learner can propagate mean and variance and standardize an aggregate.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-05-s2022-exam2-i2",
        "collection": "practice",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "external",
        "title": "Type I error, Type II error, and power",
        "skills": [
          "null-alternative",
          "type-i-error",
          "type-ii-error",
          "statistical-power"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 5,
        "prerequisites": [
          "basic-algebra"
        ],
        "source_id": "mit-18-05-s2022",
        "locator": {
          "document": "Exam 2",
          "label": "Question I.2",
          "page": 3
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam02_pdf/",
          "solution": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam02_sol_pdf/"
        },
        "selection_note": "A rapid conceptual diagnostic that catches common confusion among significance, power, and error rates.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-05-s2022-exam2-ii1",
        "collection": "practice",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "external",
        "title": "Maximum likelihood estimation from a density",
        "skills": [
          "likelihood",
          "maximum-likelihood"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 12,
        "prerequisites": [
          "basic-algebra"
        ],
        "source_id": "mit-18-05-s2022",
        "locator": {
          "document": "Exam 2",
          "label": "Question II.1",
          "page": 6
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam02_pdf/",
          "solution": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam02_sol_pdf/"
        },
        "selection_note": "Requires constructing and differentiating a likelihood rather than quoting an estimator.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-05-s2022-exam2-ii2",
        "collection": "practice",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "external",
        "title": "Bayesian posterior density and normalization",
        "skills": [
          "bayesian-updating"
        ],
        "priority": "core",
        "difficulty": "hard",
        "estimated_minutes": 15,
        "prerequisites": [
          "basic-algebra"
        ],
        "source_id": "mit-18-05-s2022",
        "locator": {
          "document": "Exam 2",
          "label": "Question II.2",
          "page": 7
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam02_pdf/",
          "solution": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam02_sol_pdf/"
        },
        "selection_note": "Tests likelihood construction, prior multiplication, and posterior normalization in a finite-outcome model.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-05-s2022-exam2-ii4",
        "collection": "practice",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "external",
        "title": "One-sided test, critical value, and p-value",
        "skills": [
          "null-alternative",
          "p-values",
          "critical-regions"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 12,
        "prerequisites": [
          "basic-algebra"
        ],
        "source_id": "mit-18-05-s2022",
        "locator": {
          "document": "Exam 2",
          "label": "Question II.4",
          "page": 9
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam02_pdf/",
          "solution": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam02_sol_pdf/"
        },
        "selection_note": "Connects a rejection region, significance level, observed statistic, and p-value without relying on one mnemonic.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-05-s2022-exam2-ii5",
        "collection": "practice",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "external",
        "title": "Chi-square test for a contingency table",
        "skills": [
          "goodness-of-fit",
          "chi-square"
        ],
        "priority": "core",
        "difficulty": "hard",
        "estimated_minutes": 18,
        "prerequisites": [
          "basic-algebra"
        ],
        "source_id": "mit-18-05-s2022",
        "locator": {
          "document": "Exam 2",
          "label": "Question II.5",
          "page": 10
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam02_pdf/",
          "solution": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_exam02_sol_pdf/"
        },
        "selection_note": "Checks end-to-end statistical reasoning from hypotheses through expected counts to a justified decision.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-06-s2010-exam1-q2",
        "collection": "practice",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "external",
        "title": "Nullspace, column space, pivots, and block structure",
        "skills": [
          "matrix-operations",
          "linear-systems",
          "row-reduction",
          "subspaces",
          "rank",
          "rank-nullity"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 14,
        "prerequisites": [
          "linear-systems",
          "reduced-row-echelon-form"
        ],
        "source_id": "mit-18-06-s2010",
        "locator": {
          "document": "Quiz 1 (listed by OCW as Exam 1)",
          "label": "Question 2(a–c)",
          "page": 2,
          "solution_pages": "2–3"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/resources/mit18_06s10_exam1_s10/",
          "solution": "https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/resources/mit18_06s10_exam1_s10_sol/"
        },
        "selection_note": "Distinguishes procedural row reduction from geometric understanding of the four fundamental subspaces.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-06-s2010-exam2-q1",
        "collection": "practice",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "external",
        "title": "Projection matrix as geometry and spectrum",
        "skills": [
          "projection",
          "eigenvalues",
          "eigenvectors"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 15,
        "prerequisites": [
          "orthogonality",
          "outer-products"
        ],
        "source_id": "mit-18-06-s2010",
        "locator": {
          "document": "Quiz 2 (listed by OCW as Exam 2)",
          "label": "Question 1(a–c)",
          "page": 1,
          "solution_pages": "1–3"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/resources/mit18_06s10_exam2_s10/",
          "solution": "https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/resources/mit18_06s10_exam2_s10_soln/"
        },
        "selection_note": "Connects a projection formula to its subspaces and eigenstructure, a high-value ML pattern.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-06-s2010-exam2-q2",
        "collection": "practice",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "external",
        "title": "Least squares, QR, and orthonormal projection",
        "skills": [
          "least-squares",
          "normal-equations",
          "qr",
          "projection",
          "orthogonality"
        ],
        "priority": "core",
        "difficulty": "hard",
        "estimated_minutes": 18,
        "prerequisites": [
          "orthogonality",
          "matrix-inverse"
        ],
        "source_id": "mit-18-06-s2010",
        "locator": {
          "document": "Quiz 2 (listed by OCW as Exam 2)",
          "label": "Question 2(a–c)",
          "page": 2,
          "solution_pages": "4"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/resources/mit18_06s10_exam2_s10/",
          "solution": "https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/resources/mit18_06s10_exam2_s10_soln/"
        },
        "selection_note": "Tests the derivation and interpretation of least squares rather than formula recall alone.",
        "source_caveat": "The official solution's wording about dependent columns can blur the distinction between the unique fitted vector and potentially non-unique coefficient vectors.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-06-s2010-exam3-q1",
        "collection": "practice",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "external",
        "title": "Symmetry, orthogonality, and eigenspaces",
        "skills": [
          "symmetric-matrices",
          "eigenvalues",
          "eigenvectors",
          "diagonalization"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 16,
        "prerequisites": [
          "outer-products",
          "orthogonal-complements"
        ],
        "source_id": "mit-18-06-s2010",
        "locator": {
          "document": "Quiz 3 (listed by OCW as Exam 3)",
          "label": "Question 1(a–d)",
          "page": 1,
          "solution_pages": "1"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/resources/mit18_06s10_exam3_s10/",
          "solution": "https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/resources/mit18_06s10_exam3_s10_soln/"
        },
        "selection_note": "Uses a structured matrix to test proof, geometry, multiplicity, and trace in one compact question.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-06-s2010-exam3-q2",
        "collection": "practice",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "external",
        "title": "Positive definite and semidefinite transformations",
        "skills": [
          "positive-definite-semidefinite",
          "quadratic-forms"
        ],
        "priority": "core",
        "difficulty": "hard",
        "estimated_minutes": 14,
        "prerequisites": [
          "eigenvalues",
          "quadratic-forms"
        ],
        "source_id": "mit-18-06-s2010",
        "locator": {
          "document": "Quiz 3 (listed by OCW as Exam 3)",
          "label": "Question 2(a–c)",
          "page": 2,
          "solution_pages": "2"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/resources/mit18_06s10_exam3_s10/",
          "solution": "https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/resources/mit18_06s10_exam3_s10_soln/"
        },
        "selection_note": "Exercises three interchangeable tests for positive definiteness and a useful block-matrix argument.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-06-s2010-exam3-q3c",
        "collection": "practice",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "external",
        "title": "Singular value decomposition from the Gram matrix",
        "skills": [
          "svd",
          "orthogonality"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 10,
        "prerequisites": [
          "eigenvalues",
          "orthogonality"
        ],
        "source_id": "mit-18-06-s2010",
        "locator": {
          "document": "Quiz 3 (listed by OCW as Exam 3)",
          "label": "Question 3(c)",
          "page": 3,
          "solution_pages": "3"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/resources/mit18_06s10_exam3_s10/",
          "solution": "https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/resources/mit18_06s10_exam3_s10_soln/"
        },
        "selection_note": "A compact check that the learner can construct an SVD from the eigendecomposition of a Gram matrix.",
        "source_caveat": "The official solution's explanatory sentence reverses conventional left/right singular-vector labels, although its displayed factor matrices are consistent with the standard SVD.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-6-036-s2018-final-q9",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "convolution",
        "origin": "external",
        "title": "Convolutional representation and detector design",
        "skills": [
          "convolution-operation",
          "output-shape",
          "receptive-field"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 18,
        "prerequisites": [
          "matrix-indexing",
          "relu"
        ],
        "source_id": "mit-6-036-exams",
        "locator": {
          "document": "Spring 2018 Final Exam",
          "label": "Question 9: Convoluted network",
          "page_label": "problem PDF pp. 23–24",
          "solution_pages": "23–24"
        },
        "links": {
          "problem": "https://introml.mit.edu/_static/spring23/final/review/Spring18-final.pdf#page=23",
          "solution": "https://introml.mit.edu/_static/spring23/final/review/Spring18-final-solutions.pdf#page=23"
        },
        "selection_note": "Requires an actual convolution and composes small filters into a deeper detector instead of testing shape recall alone.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-6-036-s2019-final-q4",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "convolution",
        "origin": "external",
        "title": "CNN shapes, pooling, and backpropagation",
        "skills": [
          "convolution-operation",
          "output-shape",
          "convolution-parameter-count",
          "pooling"
        ],
        "priority": "supplementary",
        "difficulty": "hard",
        "estimated_minutes": 25,
        "prerequisites": [
          "backpropagation",
          "max-pooling",
          "sgd"
        ],
        "source_id": "mit-6-036-exams",
        "locator": {
          "document": "Spring 2019 Final Exam",
          "label": "Question 4: CNN Backpropagation",
          "page_label": "problem PDF pp. 10–12",
          "solution_pages": "10–12"
        },
        "links": {
          "problem": "https://introml.mit.edu/_static/spring23/final/review/final_spring2019.pdf#page=10",
          "solution": "https://introml.mit.edu/_static/spring23/final/review/final_solutions_spring2019.pdf#page=10"
        },
        "selection_note": "Integrates convolutional shapes, loss choice, differentiation through convolution and pooling, and an SGD debugging decision.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-6-036-s2019-midterm-q5",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "optimization",
        "origin": "external",
        "title": "Learning as optimization",
        "skills": [
          "objective-functions",
          "optimization-convexity",
          "optimization-diagnostics",
          "optimization-stationary-points"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 18,
        "prerequisites": [
          "derivatives",
          "gradient-descent",
          "loss-functions"
        ],
        "source_id": "mit-6-036-exams",
        "locator": {
          "document": "Spring 2019 Midterm Exam",
          "label": "Question 5: Learning as Optimization",
          "page_label": "problem PDF pp. 15–16",
          "solution_pages": "15–16"
        },
        "links": {
          "problem": "https://introml.mit.edu/_static/spring23/midterm/review/midterm_spring2019.pdf#page=15",
          "solution": "https://introml.mit.edu/_static/spring23/midterm/review/midterm_solutions_spring2019.pdf#page=15"
        },
        "selection_note": "Derives an update and distinguishes slow, oscillating, and divergent learning-rate behavior from objective geometry.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-6-036-s2019-midterm-q4",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "theory",
        "origin": "external",
        "title": "Diagnose model evaluation failures",
        "skills": [
          "bias-variance",
          "generalization",
          "overfitting",
          "train-validation-test",
          "model-complexity"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 15,
        "prerequisites": [
          "classification-metrics"
        ],
        "source_id": "mit-6-036-exams",
        "locator": {
          "document": "Spring 2019 Midterm Exam",
          "label": "Question 4: Model Evaluation",
          "page_label": "problem PDF pp. 13–14",
          "solution_pages": "13–14"
        },
        "links": {
          "problem": "https://introml.mit.edu/_static/spring23/midterm/review/midterm_spring2019.pdf#page=13",
          "solution": "https://introml.mit.edu/_static/spring23/midterm/review/midterm_solutions_spring2019.pdf#page=13"
        },
        "selection_note": "Uses observed train and held-out behavior to separate overfitting, insufficient expressivity, data scarcity, and distribution shift.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-6-100l-finger-05",
        "collection": "practice",
        "area": "programming",
        "topic": "control-flow",
        "origin": "external",
        "title": "Even-indexed characters finger exercise",
        "skills": [
          "conditionals",
          "loops",
          "strings"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 5,
        "prerequisites": [
          "string-indexing"
        ],
        "source_id": "mit-6-100l-f2022",
        "locator": {
          "document": "Finger Exercises",
          "label": "Finger Exercise Lecture 5"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/finger-exercises/#finger-exercise-lecture-5",
          "solution": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/resources/mit6_100l_f22_ex05_sol_pdf/"
        },
        "selection_note": "Uses a compact string traversal to test index parity, loop state, and output construction.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-6-100l-finger-08",
        "collection": "practice",
        "area": "programming",
        "topic": "control-flow",
        "origin": "external",
        "title": "Compare character sets in two strings",
        "skills": [
          "conditionals",
          "loops",
          "strings"
        ],
        "priority": "core",
        "difficulty": "easy",
        "estimated_minutes": 6,
        "prerequisites": [
          "membership"
        ],
        "source_id": "mit-6-100l-f2022",
        "locator": {
          "document": "Finger Exercises",
          "label": "Finger Exercise Lecture 8"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/finger-exercises/#finger-exercise-lecture-8",
          "solution": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/resources/mit6_100l_f22_ex08_sol_pdf/"
        },
        "selection_note": "Tests bidirectional membership reasoning rather than only one pass over one string.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-6-100l-finger-17",
        "collection": "practice",
        "area": "programming",
        "topic": "python",
        "origin": "external",
        "title": "Circle class and value equality",
        "skills": [
          "classes",
          "value-equality",
          "python-syntax",
          "functions"
        ],
        "priority": "supplementary",
        "difficulty": "medium",
        "estimated_minutes": 12,
        "prerequisites": [
          "methods",
          "object-state"
        ],
        "source_id": "mit-6-100l-f2022",
        "locator": {
          "document": "Finger Exercises",
          "label": "Finger Exercise Lecture 17"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/finger-exercises/#finger-exercise-lecture-17",
          "solution": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/resources/mit6_100l_f22_ex17_sol_pdf/"
        },
        "selection_note": "Exercises object state, accessors, mutation, and explicit value equality through a small class contract.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-6-100l-finger-19",
        "collection": "practice",
        "area": "programming",
        "topic": "data-structures",
        "origin": "external",
        "title": "Stack subclass implementation",
        "skills": [
          "stack",
          "classes",
          "sequence-data-structures"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 15,
        "prerequisites": [
          "lists",
          "methods"
        ],
        "source_id": "mit-6-100l-f2022",
        "locator": {
          "document": "Finger Exercises",
          "label": "Finger Exercise Lecture 19"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/finger-exercises/#finger-exercise-lecture-19",
          "solution": "https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/resources/mit6_100l_f22_ex19_sol_pdf/"
        },
        "selection_note": "Implements a LIFO abstraction while distinguishing inherited container behavior from stack-specific removal.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-01sc-f2010-final-foundations",
        "collection": "practice",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "external",
        "title": "Single-variable calculus foundation check",
        "skills": [
          "limits",
          "continuity",
          "single-variable-differentiation",
          "single-variable-integration",
          "taylor-approximation"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 24,
        "prerequisites": [
          "polynomials"
        ],
        "source_id": "mit-18-01sc-f2010",
        "locator": {
          "document": "Final Exam",
          "label": "Questions 1(a), 3(b), 8(b), and 14(a,c)",
          "page_label": "problem PDF pp. 1, 3, 8, 14–15",
          "solution_pages": "1, 2, 6, 11–12"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-01sc-single-variable-calculus-fall-2010/resources/mit18_01scf10_final/",
          "solution": "https://ocw.mit.edu/courses/18-01sc-single-variable-calculus-fall-2010/resources/mit18_01scf10_finalsol/"
        },
        "selection_note": "Uses official exam questions to check differentiation, a limit, definite integration, and Taylor approximation independently.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-05-s2022-pset11-q1",
        "collection": "practice",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "external",
        "title": "Confidence intervals with known and unknown variance",
        "skills": [
          "confidence-intervals",
          "standard-error",
          "sampling-distributions"
        ],
        "priority": "core",
        "difficulty": "easy",
        "estimated_minutes": 14,
        "prerequisites": [
          "gaussian-distribution"
        ],
        "source_id": "mit-18-05-s2022",
        "locator": {
          "document": "Problem Set 11",
          "label": "Problem 1(a–c)",
          "page": 1,
          "solution_pages": "1"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_pset11_pdf/",
          "solution": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_pset11_sol_pdf/"
        },
        "selection_note": "Contrasts t and z intervals on the same data and extends the calculation to sample-size planning.",
        "answer_status": "official-solution"
      },
      {
        "id": "mit-18-05-s2022-pset6-q2",
        "collection": "practice",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "external",
        "title": "Simple linear regression from Gaussian maximum likelihood",
        "skills": [
          "simple-linear-regression",
          "maximum-likelihood",
          "likelihood"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 25,
        "prerequisites": [
          "gaussian-distribution",
          "partial-derivatives"
        ],
        "source_id": "mit-18-05-s2022",
        "locator": {
          "document": "Problem Set 6",
          "label": "Problem 2(a–b)",
          "page_label": "problem PDF pp. 1–2",
          "solution_pages": "1–3"
        },
        "links": {
          "problem": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_pset06_pdf/",
          "solution": "https://ocw.mit.edu/courses/18-05-introduction-to-probability-and-statistics-spring-2022/resources/mit18_05_s22_pset06_sol_pdf/"
        },
        "selection_note": "Derives a fitted line from an explicit Gaussian error model, linking regression, likelihood, and least squares.",
        "answer_status": "official-solution"
      },
      {
        "id": "original-la-foundations",
        "collection": "practice",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "original",
        "title": "Matrix fundamentals under time pressure",
        "skills": [
          "matrix-operations",
          "inverse",
          "determinant",
          "trace",
          "matrix-norms"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 8,
        "prerequisites": [
          "matrix-arithmetic"
        ],
        "prompt": "Let\n$$\nA = \\begin{bmatrix} 1 & 2 \\\\ 3 & 4 \\end{bmatrix}.\n$$\nCompute $\\det(A)$, $\\operatorname{tr}(A)$, $A^{-1}$, and the Frobenius norm $\\lVert A \\rVert_F$. State whether $A$ is invertible and justify the answer in one sentence.\n",
        "answer": "$$\n\\det(A) = -2, \\qquad \\operatorname{tr}(A) = 5, \\qquad\nA^{-1} = \\begin{bmatrix} -2 & 1 \\\\ \\frac{3}{2} & -\\frac{1}{2} \\end{bmatrix}, \\qquad\n\\lVert A \\rVert_F = \\sqrt{30}.\n$$\n$A$ is invertible because its determinant is nonzero.\n"
      },
      {
        "id": "original-la-basis-change",
        "collection": "practice",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "original",
        "title": "Basis, dimension, and coordinates",
        "skills": [
          "linear-independence",
          "basis-dimension",
          "change-of-basis"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 8,
        "prerequisites": [
          "linear-combinations"
        ],
        "prompt": "In $\\mathbb{R}^3$, let $v_1 = (1,0,1)$, $v_2 = (0,1,1)$, and $v_3 = (1,1,2)$. Determine a basis and dimension for their span. Express $x = (2,3,5)$ in your chosen basis.\n",
        "answer": "Since $v_3 = v_1 + v_2$, the set $\\{v_1,v_2\\}$ is a basis and the span has dimension $2$. Since $x = 2v_1 + 3v_2$, its coordinates in that basis are $(2,3)$.\n"
      },
      {
        "id": "original-la-low-rank",
        "collection": "practice",
        "area": "mathematics",
        "topic": "linear-algebra",
        "origin": "original",
        "title": "Low-rank error and explained variance",
        "skills": [
          "svd",
          "low-rank-approximation",
          "pca-via-svd"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 8,
        "prerequisites": [
          "singular-values"
        ],
        "prompt": "A centered data matrix has singular values $5$, $2$, and $1$. Find the Frobenius error of its best rank-$1$ approximation and the fraction of total squared variation retained by the first principal component.\n",
        "answer": "The best rank-$1$ error is\n$$\n\\sqrt{2^2 + 1^2} = \\sqrt{5}.\n$$\nThe retained fraction is\n$$\n\\frac{5^2}{5^2 + 2^2 + 1^2} = \\frac{25}{30} = \\frac{5}{6}.\n$$\n"
      },
      {
        "id": "original-calc-jacobian",
        "collection": "practice",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "original",
        "title": "Jacobian and chain rule",
        "skills": [
          "partial-derivatives",
          "jacobian",
          "multivariable-chain-rule",
          "gradient"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 10,
        "prerequisites": [
          "partial-derivatives"
        ],
        "prompt": "Let $F(x,y) = (xy, x+y^2)$ and $g(u,v) = u+v^2$. Compute $J_F$ at $(1,2)$ and the gradient of $g(F(x,y))$ at $(1,2)$.\n",
        "answer": "$$\nJ_F(1,2) = \\begin{bmatrix} 2 & 1 \\\\ 1 & 4 \\end{bmatrix}.\n$$\nSince $F(1,2)=(2,5)$, we have $\\nabla g=(1,10)$ in $(u,v)$ coordinates. Therefore,\n$$\nJ_F(1,2)^{\\mathsf T}\\nabla g(F(1,2)) = (12,41).\n$$\n"
      },
      {
        "id": "original-calc-matrix",
        "collection": "practice",
        "area": "mathematics",
        "topic": "calculus",
        "origin": "original",
        "title": "Matrix gradient and Hessian",
        "skills": [
          "matrix-calculus",
          "gradient",
          "hessian",
          "calculus-convexity"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 10,
        "prerequisites": [
          "matrix-multiplication",
          "chain-rule"
        ],
        "prompt": "For\n$$\nf(w) = \\lVert Xw-y \\rVert_2^2 + \\lambda \\lVert w \\rVert_2^2,\n$$\nderive the gradient and Hessian. State a sufficient condition for strict convexity.\n",
        "answer": "$$\n\\nabla f(w) = 2X^{\\mathsf T}(Xw-y) + 2\\lambda w,\n\\qquad\n\\nabla^2 f(w) = 2X^{\\mathsf T}X + 2\\lambda I.\n$$\nIt is strictly convex if $\\lambda>0$, or if $X$ has full column rank when $\\lambda=0$.\n"
      },
      {
        "id": "original-prob-distributions",
        "collection": "practice",
        "area": "mathematics",
        "topic": "probability",
        "origin": "original",
        "title": "Recognize distribution moments",
        "skills": [
          "discrete-random-variables",
          "pmf",
          "cdf",
          "continuous-random-variables",
          "pdf",
          "named-distributions",
          "sums-of-random-variables",
          "expectation",
          "variance"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 8,
        "prerequisites": [
          "random-variables"
        ],
        "prompt": "Give the mean and variance of $\\operatorname{Binomial}(n,p)$, $\\operatorname{Poisson}(\\lambda)$, $\\operatorname{Exponential}(\\lambda)$ under the rate parameterization, and $\\mathcal{N}(\\mu,\\sigma^2)$. Then identify the distribution of a sum of independent Poisson variables.\n",
        "answer": "- $\\operatorname{Binomial}(n,p)$: mean $np$ and variance $np(1-p)$.\n- $\\operatorname{Poisson}(\\lambda)$: mean $\\lambda$ and variance $\\lambda$.\n- $\\operatorname{Exponential}(\\lambda)$: mean $1/\\lambda$ and variance $1/\\lambda^2$.\n- $\\mathcal{N}(\\mu,\\sigma^2)$: mean $\\mu$ and variance $\\sigma^2$.\n\nIndependent Poisson variables sum to a Poisson variable with rate equal to the sum of the rates.\n"
      },
      {
        "id": "original-prob-total-variance",
        "collection": "practice",
        "area": "mathematics",
        "topic": "probability",
        "origin": "original",
        "title": "Conditional expectation and total variance",
        "skills": [
          "conditional-expectation",
          "law-total-expectation",
          "law-total-variance",
          "expectation",
          "variance"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 8,
        "prerequisites": [
          "conditional-probability"
        ],
        "prompt": "Let $Z \\sim \\operatorname{Bernoulli}(1/2)$. Conditional on $Z=0$, $X$ has mean $0$ and variance $1$; conditional on $Z=1$, $X$ has mean $2$ and variance $3$. Compute $\\mathbb{E}[X]$ and $\\operatorname{Var}(X)$.\n",
        "answer": "We have $\\mathbb{E}[X]=1$. Also,\n$$\n\\mathbb{E}[\\operatorname{Var}(X\\mid Z)] = \\frac{1+3}{2} = 2\n$$\nand\n$$\n\\operatorname{Var}(\\mathbb{E}[X\\mid Z]) = 1,\n$$\nbecause $\\mathbb{E}[X\\mid Z]$ equals $0$ or $2$ with equal probability. Therefore, $\\operatorname{Var}(X)=3$.\n"
      },
      {
        "id": "original-prob-gaussian",
        "collection": "practice",
        "area": "mathematics",
        "topic": "probability",
        "origin": "original",
        "title": "Linear transform of a multivariate Gaussian",
        "skills": [
          "multivariate-gaussian",
          "transformations",
          "covariance",
          "correlation"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 8,
        "prerequisites": [
          "matrix-multiplication",
          "gaussian-distribution"
        ],
        "prompt": "Let $X \\sim \\mathcal{N}(\\mu,\\Sigma)$, where\n$$\n\\mu = \\begin{bmatrix} 1 \\\\ 2 \\end{bmatrix},\n\\qquad\n\\Sigma = \\begin{bmatrix} 2 & 1 \\\\ 1 & 3 \\end{bmatrix},\n\\qquad\nY = \\begin{bmatrix} 1 & -1 \\end{bmatrix}X + 2.\n$$\nFind the distribution of $Y$.\n",
        "answer": "$Y$ is Gaussian with mean\n$$\n\\begin{bmatrix} 1 & -1 \\end{bmatrix}\\mu + 2 = 1\n$$\nand variance\n$$\n\\begin{bmatrix} 1 & -1 \\end{bmatrix}\n\\Sigma\n\\begin{bmatrix} 1 & -1 \\end{bmatrix}^{\\mathsf T} = 3.\n$$\nTherefore, $Y \\sim \\mathcal{N}(1,3)$.\n"
      },
      {
        "id": "original-prob-foundations",
        "collection": "practice",
        "area": "mathematics",
        "topic": "probability",
        "origin": "original",
        "title": "Counting, total probability, and independence",
        "skills": [
          "counting",
          "conditional-probability",
          "probabilistic-independence"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 7,
        "prerequisites": [
          "fractions"
        ],
        "prompt": "A class has $6$ students, $4$ of whom use Python. Two students are selected uniformly without replacement. Find the probability that both use Python. Then state whether the two selection indicators are independent.\n",
        "answer": "The probability is\n$$\n\\frac{\\binom{4}{2}}{\\binom{6}{2}} = \\frac{6}{15} = \\frac{2}{5}.\n$$\nThe indicators are not independent because sampling without replacement changes the second probability after the first outcome.\n"
      },
      {
        "id": "original-prob-lln",
        "collection": "practice",
        "area": "mathematics",
        "topic": "probability",
        "origin": "original",
        "title": "LLN versus CLT",
        "skills": [
          "law-of-large-numbers",
          "central-limit-theorem"
        ],
        "priority": "core",
        "difficulty": "easy",
        "estimated_minutes": 5,
        "prerequisites": [
          "expectation",
          "variance"
        ],
        "prompt": "For i.i.d. variables with mean $\\mu$ and finite variance $\\sigma^2$, state what the law of large numbers says about the sample mean $\\overline{X}_n$ and what the central limit theorem says about its standardized error.\n",
        "answer": "The law of large numbers says\n$$\n\\overline{X}_n \\xrightarrow{p} \\mu.\n$$\nThe central limit theorem says\n$$\n\\frac{\\sqrt{n}(\\overline{X}_n-\\mu)}{\\sigma}\n\\xrightarrow{d} \\mathcal{N}(0,1).\n$$\n"
      },
      {
        "id": "original-stats-estimator",
        "collection": "practice",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "original",
        "title": "Bias, variance, MSE, and consistency",
        "skills": [
          "samples",
          "sample-statistics",
          "sampling-distributions",
          "estimator-bias",
          "estimator-variance",
          "mean-squared-error",
          "consistency",
          "standard-error"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 7,
        "prerequisites": [
          "expectation",
          "variance"
        ],
        "prompt": "For i.i.d. observations with mean $\\mu$ and variance $\\sigma^2$, analyze the sample mean $\\overline{X}_n$ as an estimator of $\\mu$: give its bias, variance, MSE, standard error, and whether it is consistent.\n",
        "answer": "The bias is $0$; the variance and MSE are $\\sigma^2/n$; and the standard error is $\\sigma/\\sqrt{n}$. It is consistent because the variance tends to zero and the estimator is unbiased.\n"
      },
      {
        "id": "original-stats-mom-map",
        "collection": "practice",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "original",
        "title": "Method of moments and Bayesian updating",
        "skills": [
          "method-of-moments",
          "map",
          "bayesian-updating",
          "likelihood"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 10,
        "prerequisites": [
          "exponential-distribution",
          "beta-distribution"
        ],
        "prompt": "For $\\operatorname{Exponential}(\\lambda)$ data under the rate parameterization, derive the method-of-moments estimate. Separately, with a $\\operatorname{Beta}(2,2)$ prior and $7$ successes in $10$ Bernoulli trials, give the posterior and its MAP.\n",
        "answer": "Matching $\\mathbb{E}[X]=1/\\lambda$ to the sample mean gives\n$$\n\\widehat{\\lambda} = \\frac{1}{\\overline{X}}.\n$$\nThe posterior is $\\operatorname{Beta}(9,5)$, whose MAP is\n$$\n\\frac{9-1}{9+5-2} = \\frac{2}{3}.\n$$\n"
      },
      {
        "id": "original-ml-regression",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "regression",
        "origin": "original",
        "title": "Linear regression objective and gradient",
        "skills": [
          "linear-regression",
          "squared-loss",
          "regression-gradient"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 8,
        "prerequisites": [
          "matrix-multiplication",
          "derivatives"
        ],
        "prompt": "For $X=\\begin{bmatrix}1&0\\\\1&1\\end{bmatrix}$, $\\mathbf{y}=(1,3)$, and $\\mathbf{w}=(0,0)$, use\n\n$$L(\\mathbf{w})=\\frac{1}{2}\\lVert X\\mathbf{w}-\\mathbf{y}\\rVert_2^2.$$\n\nCompute $L$, its gradient, and one gradient-descent update with learning rate $0.1$.\n",
        "answer": "$L=5$. The gradient is\n\n$$\\nabla_{\\mathbf{w}}L=X^\\top(X\\mathbf{w}-\\mathbf{y})=(-4,-3),$$\n\nso the update is $\\mathbf{w}=(0.4,0.3)$.\n"
      },
      {
        "id": "original-ml-logistic",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "classification",
        "origin": "original",
        "title": "Logistic probability and cross-entropy",
        "skills": [
          "logistic-regression",
          "cross-entropy",
          "decision-boundary",
          "classification-thresholds"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 6,
        "prerequisites": [
          "logarithms"
        ],
        "prompt": "A binary logistic model produces logit $z=\\ln(3)$ for a positive example $y=1$. Compute $p(y=1\\mid\\mathbf{x})$, the predicted class at threshold $0.5$, and binary cross-entropy loss.\n",
        "answer": "$$\\sigma(\\ln 3)=\\frac{3}{4},$$\n\nso the predicted class is $1$, and the loss is\n\n$$-\\ln\\left(\\frac{3}{4}\\right)=\\ln\\left(\\frac{4}{3}\\right)\\approx 0.28768.$$\n"
      },
      {
        "id": "original-ml-metrics",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "classification",
        "origin": "original",
        "title": "Classification metrics from counts",
        "skills": [
          "confusion-matrix",
          "accuracy",
          "precision-recall"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 6,
        "prerequisites": [
          "fractions"
        ],
        "prompt": "A classifier has $\\mathrm{TP}=30$, $\\mathrm{FP}=10$, $\\mathrm{FN}=20$, and $\\mathrm{TN}=40$. Compute accuracy, precision, recall, and $F_1$.\n",
        "answer": "Accuracy is $0.70$, precision is $0.75$, recall is $0.60$, and\n\n$$F_1=\\frac{2(0.75)(0.60)}{0.75+0.60}=\\frac{2}{3}.$$\n"
      },
      {
        "id": "original-ml-gd",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "gradient-descent",
        "origin": "original",
        "title": "Gradient descent on a quadratic",
        "skills": [
          "gradient-update",
          "learning-rate",
          "convergence"
        ],
        "priority": "core",
        "difficulty": "easy",
        "estimated_minutes": 7,
        "prerequisites": [
          "derivatives"
        ],
        "prompt": "For $f(w)=(w-3)^2$, start at $w_0=0$. Compute $w_1$ for learning rates $0.1$ and $1.1$. Explain which update moves toward the minimizer and why overly large learning rates can diverge.\n",
        "answer": "The gradient at $0$ is $-6$. With $\\eta=0.1$, $w_1=0.6$. With $\\eta=1.1$, $w_1=6.6$, overshooting $3$. For this quadratic, convergence requires $0<\\eta<1$; larger steps amplify error.\n"
      },
      {
        "id": "original-ml-sgd",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "gradient-descent",
        "origin": "original",
        "title": "Full gradient versus stochastic gradient",
        "skills": [
          "gradient-update",
          "sgd",
          "convergence"
        ],
        "priority": "core",
        "difficulty": "easy",
        "estimated_minutes": 7,
        "prerequisites": [
          "expectation"
        ],
        "prompt": "For losses $\\ell_1(w)=(w-1)^2$ and $\\ell_2(w)=(w+1)^2$, compute the full empirical gradient at $w=2$ and each per-example gradient. Explain why an unbiased uniformly sampled stochastic gradient can still have variance.\n",
        "answer": "The per-example gradients are $2$ and $6$. The mean, or full, gradient is $4$. A uniformly sampled per-example gradient has expectation $4$ but takes values $2$ or $6$, so it has nonzero variance.\n"
      },
      {
        "id": "original-ml-pca",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "dimensionality-reduction",
        "origin": "original",
        "title": "PCA direction and explained variance",
        "skills": [
          "pca-objective",
          "centering",
          "covariance-eigendecomposition",
          "explained-variance"
        ],
        "priority": "core",
        "difficulty": "easy",
        "estimated_minutes": 7,
        "prerequisites": [
          "eigenvalues"
        ],
        "prompt": "A centered two-dimensional dataset has covariance $\\operatorname{diag}(9,1)$. Give the first principal direction, the fraction of variance it explains, and the reconstruction-error variance after projection to one dimension. Explain why PCA should first center raw observations.\n",
        "answer": "The first direction is $(1,0)$, it explains\n\n$$\\frac{9}{9+1}=0.9$$\n\nof the variance, and the discarded, or reconstruction-error, variance is $1$. Centering removes the mean offset so that the principal directions describe variation around the mean rather than the mean location itself.\n"
      },
      {
        "id": "original-ml-kmeans",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "unsupervised-learning",
        "origin": "original",
        "title": "One k-means assignment and update",
        "skills": [
          "k-means",
          "clustering-objective"
        ],
        "priority": "core",
        "difficulty": "easy",
        "estimated_minutes": 7,
        "prerequisites": [
          "squared-distance"
        ],
        "prompt": "For one-dimensional points $\\{0,2,8,10\\}$ and initial centers $0$ and $10$, perform one assignment and center-update step. Give the new centers and the within-cluster sum of squared distances after the update.\n",
        "answer": "The clusters are $\\{0,2\\}$ and $\\{8,10\\}$; the new centers are $1$ and $9$. The objective is\n\n$$1+1+1+1=4.$$\n"
      },
      {
        "id": "original-ml-gmm",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "unsupervised-learning",
        "origin": "original",
        "title": "Mixture responsibilities and EM",
        "skills": [
          "gaussian-mixtures",
          "expectation-maximization",
          "clustering-objective"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 7,
        "prerequisites": [
          "bayes-rule"
        ],
        "prompt": "At a data point $x$, two Gaussian-mixture components have prior weights $0.4$ and $0.6$ and component densities $p(x\\mid z=1)=0.3$ and $p(x\\mid z=2)=0.1$. Compute posterior responsibilities and state the E- and M-step roles.\n",
        "answer": "The unnormalized weights are $0.12$ and $0.06$, so the responsibilities are $\\frac{2}{3}$ and $\\frac{1}{3}$. The E-step computes responsibilities; the M-step updates parameters using those expected assignments.\n"
      },
      {
        "id": "original-ml-forward-backprop",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "neural-networks",
        "origin": "original",
        "title": "Forward pass and backpropagation",
        "skills": [
          "forward-pass",
          "activations",
          "neural-network-chain-rule",
          "backpropagation",
          "neural-network-losses"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 8,
        "prerequisites": [
          "chain-rule"
        ],
        "prompt": "A scalar network has $h=\\operatorname{ReLU}(wx)$, $\\hat{y}=vh$, and loss\n\n$$L=\\frac{1}{2}(\\hat{y}-y)^2.$$\n\nAt $x=2$, $w=1$, $v=3$, and $y=4$, compute $h$, $\\hat{y}$, $L$, $\\frac{\\partial L}{\\partial v}$, and $\\frac{\\partial L}{\\partial w}$.\n",
        "answer": "$h=2$, $\\hat{y}=6$, and $L=2$. The derivatives are\n\n$$\\frac{\\partial L}{\\partial v}=(6-4)h=4$$\n\nand\n\n$$\\frac{\\partial L}{\\partial w}=(6-4)vx=12,$$\n\nbecause the ReLU input is positive.\n"
      },
      {
        "id": "original-ml-network-params",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "neural-networks",
        "origin": "original",
        "title": "Dense-network parameter count",
        "skills": [
          "dense-network-parameter-count"
        ],
        "priority": "foundation",
        "difficulty": "easy",
        "estimated_minutes": 4,
        "prerequisites": [
          "matrix-shapes"
        ],
        "prompt": "Count trainable scalar parameters in a fully connected network with $10$ inputs, one hidden layer of $5$ units with biases, and an output layer of $3$ units with biases.\n",
        "answer": "Input-to-hidden has $10\\times5+5=55$ parameters. Hidden-to-output has $5\\times3+3=18$. The total is $73$.\n"
      },
      {
        "id": "original-ml-convolution",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "convolution",
        "origin": "original",
        "title": "Convolution output shape and parameters",
        "skills": [
          "output-shape",
          "padding",
          "stride",
          "convolution-parameter-count"
        ],
        "priority": "core",
        "difficulty": "easy",
        "estimated_minutes": 6,
        "prerequisites": [
          "integer-arithmetic"
        ],
        "prompt": "An input has shape $32\\times32\\times3$. A convolution uses $16$ filters of size $5\\times5$, stride $2$, padding $2$, and one bias per filter. Compute the output shape and trainable parameter count.\n",
        "answer": "Each spatial dimension is\n\n$$\\left\\lfloor\\frac{32+2(2)-5}{2}\\right\\rfloor+1=16,$$\n\nso the output is $16\\times16\\times16$. The parameter count is\n\n$$5\\times5\\times3\\times16+16=1216.$$\n"
      },
      {
        "id": "original-ml-regularization",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "optimization",
        "origin": "original",
        "title": "Lasso versus ridge penalties",
        "skills": [
          "optimization-regularization",
          "objective-functions",
          "model-complexity",
          "generalization"
        ],
        "priority": "core",
        "difficulty": "easy",
        "estimated_minutes": 6,
        "prerequisites": [
          "norms"
        ],
        "prompt": "Compare $L_1$ and $L_2$ regularization in geometry, differentiability at zero, and typical coefficient behavior. State one reason regularization can improve validation performance while worsening training loss.\n",
        "answer": "$L_1$ uses $\\lVert\\mathbf{w}\\rVert_1$; its constraint region is diamond-shaped (a cross-polytope) with axis-aligned corners. It is nondifferentiable when a coefficient is zero and often yields exact sparsity. $L_2$ uses $\\lVert\\mathbf{w}\\rVert_2^2$; its constraint region is round, it is differentiable everywhere, and it smoothly shrinks coefficients without usually making them exactly zero. Either penalty can increase unregularized training loss while reducing effective complexity, variance, and overfitting, thereby improving validation performance.\n"
      },
      {
        "id": "original-ml-finite-class-bound",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "theory",
        "origin": "original",
        "title": "Read a finite-class generalization bound",
        "skills": [
          "generalization",
          "model-complexity"
        ],
        "priority": "stretch",
        "difficulty": "medium",
        "estimated_minutes": 7,
        "prerequisites": [
          "logarithms",
          "probability"
        ],
        "prompt": "A finite hypothesis class has $\\lvert\\mathcal{H}\\rvert=100$ and $n=1000$ independent examples. Using\n\n$$\\varepsilon=\\sqrt{\\frac{\\log\\left(2\\lvert\\mathcal{H}\\rvert/\\delta\\right)}{2n}}$$\n\nwith $\\delta=0.05$, compute $\\varepsilon$ and explain what the simultaneous bound says.\n",
        "answer": "$$\\varepsilon=\\sqrt{\\frac{\\log(4000)}{2000}}\\approx 0.0644.$$\n\nWith probability at least $0.95$, every hypothesis in $\\mathcal{H}$ has empirical and population error differing by at most this amount under the bound's assumptions.\n"
      },
      {
        "id": "original-py-alias-copy",
        "collection": "practice",
        "area": "programming",
        "topic": "python",
        "origin": "original",
        "title": "Aliasing and shallow copy",
        "skills": [
          "python-sequence-semantics",
          "mutability",
          "aliasing",
          "shallow-copy"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 7,
        "prerequisites": [
          "lists"
        ],
        "prompt": "Implement `alias_copy_state()`. Construct `a = [[1], [2]]`, let `b = a`, and let `c = a.copy()`. Append `3` to `a[0]`, then append `[4]` to `a`. Return `(a, b, c)`. Predict the result before running it.\n",
        "starter_code": "def alias_copy_state():\n    pass\n",
        "reference_solution": "def alias_copy_state():\n    a = [[1], [2]]\n    b = a\n    c = a.copy()\n    a[0].append(3)\n    a.append([4])\n    return a, b, c\n",
        "tests": [
          {
            "call": "alias_copy_state()",
            "expected": "([[1, 3], [2], [4]], [[1, 3], [2], [4]], [[1, 3], [2]])"
          }
        ]
      },
      {
        "id": "pml-book1-ex5.1",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "classification",
        "origin": "external",
        "title": "Reject option in classifiers",
        "skills": [
          "decision-boundary",
          "classification-thresholds"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 12,
        "prerequisites": [
          "conditional-probability",
          "expected-loss"
        ],
        "source_id": "pml-book1-2022",
        "locator": {
          "document": "PML Book 1 online draft (2025-04-18), Chapter 5 exercises",
          "label": "Exercise 5.1",
          "page_label": "book p. 204 (PDF p. 234)",
          "solution_pages": "15"
        },
        "links": {
          "problem": "https://github.com/probml/pml-book/releases/download/2025-04-18/book1.pdf#page=234",
          "solution": "https://probml.github.io/pml-book/solns-public.pdf#page=15"
        },
        "selection_note": "Derives a confidence-dependent classification and rejection rule from explicit costs and posterior class probabilities.",
        "source_caveat": "The public solution manual predates the dated book draft; the exercise title and task align, but notation may differ.",
        "answer_status": "official-solution"
      },
      {
        "id": "pml-book1-ex11.2",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "regression",
        "origin": "external",
        "title": "Centering and ridge regression",
        "skills": [
          "linear-regression",
          "normal-equations",
          "regression-regularization"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 15,
        "prerequisites": [
          "matrix-multiplication",
          "centering"
        ],
        "source_id": "pml-book1-2022",
        "locator": {
          "document": "PML Book 1 online draft (2025-04-18), Chapter 11 exercises",
          "label": "Exercise 11.2",
          "page_label": "book pp. 411–412 (PDF pp. 441–442)",
          "solution_pages": "26"
        },
        "links": {
          "problem": "https://github.com/probml/pml-book/releases/download/2025-04-18/book1.pdf#page=441",
          "solution": "https://probml.github.io/pml-book/solns-public.pdf#page=26"
        },
        "selection_note": "Connects centering, the ridge objective, the intercept, and normal equations in one derivation.",
        "source_caveat": "The public solution manual predates the dated book draft; the exercise title and task align, but notation may differ.",
        "answer_status": "official-solution"
      },
      {
        "id": "pml-book1-ex4.5",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "theory",
        "origin": "external",
        "title": "BIC for a two-dimensional discrete distribution",
        "skills": [
          "generalization",
          "overfitting",
          "model-complexity"
        ],
        "priority": "core",
        "difficulty": "medium",
        "estimated_minutes": 20,
        "prerequisites": [
          "maximum-likelihood",
          "logarithms",
          "cross-validation"
        ],
        "source_id": "pml-book1-2022",
        "locator": {
          "document": "PML Book 1 online draft (2025-04-18), Chapter 4 exercises",
          "label": "Exercise 4.5",
          "page_label": "book p. 165 (PDF p. 195)",
          "solution_pages": "11–12"
        },
        "links": {
          "problem": "https://github.com/probml/pml-book/releases/download/2025-04-18/book1.pdf#page=195",
          "solution": "https://probml.github.io/pml-book/solns-public.pdf#page=11"
        },
        "selection_note": "Compares nested models using fit, leave-one-out behavior, parameter count, and a complexity penalty.",
        "source_caveat": "The public solution manual predates the dated book draft; the exercise title and task align, but notation may differ.",
        "answer_status": "official-solution"
      },
      {
        "id": "pml-book1-ex20.3",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "dimensionality-reduction",
        "origin": "external",
        "title": "Deriving the second principal component",
        "skills": [
          "pca-objective",
          "covariance-eigendecomposition"
        ],
        "priority": "core",
        "difficulty": "hard",
        "estimated_minutes": 18,
        "prerequisites": [
          "eigenvectors",
          "lagrange-multipliers",
          "matrix-calculus"
        ],
        "source_id": "pml-book1-2022",
        "locator": {
          "document": "PML Book 1 online draft (2025-04-18), Chapter 20 exercises",
          "label": "Exercise 20.3",
          "page_label": "book p. 712 (PDF p. 742)",
          "solution_pages": "40–41"
        },
        "links": {
          "problem": "https://github.com/probml/pml-book/releases/download/2025-04-18/book1.pdf#page=742",
          "solution": "https://probml.github.io/pml-book/solns-public.pdf#page=40"
        },
        "selection_note": "Connects the constrained PCA reconstruction objective to the covariance eigenvector with the second-largest eigenvalue.",
        "source_caveat": "The public solution manual predates the dated book draft; the exercise title and task align, but notation may differ.",
        "answer_status": "official-solution"
      },
      {
        "id": "pml-book1-ex10.1",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "classification",
        "origin": "external",
        "title": "Gradient and Hessian of multinomial logistic regression",
        "skills": [
          "logistic-regression",
          "cross-entropy"
        ],
        "priority": "supplementary",
        "difficulty": "hard",
        "estimated_minutes": 20,
        "prerequisites": [
          "softmax",
          "chain-rule",
          "matrix-calculus"
        ],
        "source_id": "pml-book1-2022",
        "locator": {
          "document": "PML Book 1 online draft (2025-04-18), Chapter 10 exercises",
          "label": "Exercise 10.1",
          "page_label": "book pp. 367–368 (PDF pp. 397–398)",
          "solution_pages": "25"
        },
        "links": {
          "problem": "https://github.com/probml/pml-book/releases/download/2025-04-18/book1.pdf#page=397",
          "solution": "https://probml.github.io/pml-book/solns-public.pdf#page=25"
        },
        "selection_note": "Derives the first- and second-order structure of multiclass logistic loss.",
        "source_caveat": "The public solution manual predates the dated book draft; the exercise title and task align, but notation may differ.",
        "answer_status": "official-solution"
      },
      {
        "id": "pml-book1-ex13.1",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "neural-networks",
        "origin": "external",
        "title": "Backpropagation for a multilayer perceptron",
        "skills": [
          "forward-pass",
          "activations",
          "neural-network-chain-rule",
          "backpropagation",
          "neural-network-losses"
        ],
        "priority": "core",
        "difficulty": "hard",
        "estimated_minutes": 20,
        "prerequisites": [
          "softmax",
          "cross-entropy",
          "matrix-calculus",
          "relu"
        ],
        "source_id": "pml-book1-2022",
        "locator": {
          "document": "PML Book 1 online draft (2025-04-18), Chapter 13 exercises",
          "label": "Exercise 13.1",
          "page_label": "title on book p. 463 (PDF p. 493); task continues on book p. 465 (PDF p. 495)",
          "solution_pages": "30"
        },
        "links": {
          "problem": "https://github.com/probml/pml-book/releases/download/2025-04-18/book1.pdf#page=493",
          "solution": "https://probml.github.io/pml-book/solns-public.pdf#page=30"
        },
        "selection_note": "Derives layer errors, parameter gradients, and the input gradient for a one-hidden-layer classifier.",
        "source_caveat": "A full-page figure separates the title from the task; the public solution manual predates the dated book draft.",
        "answer_status": "official-solution"
      },
      {
        "id": "pml-book1-ex11.4",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "optimization",
        "origin": "external",
        "title": "Reducing elastic net to lasso",
        "skills": [
          "objective-functions",
          "optimization-regularization"
        ],
        "priority": "supplementary",
        "difficulty": "hard",
        "estimated_minutes": 15,
        "prerequisites": [
          "l1-norm",
          "l2-norm",
          "linear-regression"
        ],
        "source_id": "pml-book1-2022",
        "locator": {
          "document": "PML Book 1 online draft (2025-04-18), Chapter 11 exercises",
          "label": "Exercise 11.4",
          "page_label": "book p. 412 (PDF p. 442)",
          "solution_pages": "26"
        },
        "links": {
          "problem": "https://github.com/probml/pml-book/releases/download/2025-04-18/book1.pdf#page=442",
          "solution": "https://probml.github.io/pml-book/solns-public.pdf#page=26"
        },
        "selection_note": "Transforms a mixed regularization objective into a standard lasso problem on augmented data.",
        "source_caveat": "The public solution manual predates the dated book draft; the exercise title and task align, but notation may differ.",
        "answer_status": "official-solution"
      },
      {
        "id": "pml-book1-ex20.1",
        "collection": "practice",
        "area": "machine-learning",
        "topic": "unsupervised-learning",
        "origin": "external",
        "title": "Expectation-maximization for factor analysis",
        "skills": [
          "expectation-maximization"
        ],
        "priority": "supplementary",
        "difficulty": "hard",
        "estimated_minutes": 30,
        "prerequisites": [
          "multivariate-gaussian",
          "matrix-calculus",
          "latent-variables"
        ],
        "source_id": "pml-book1-2022",
        "locator": {
          "document": "PML Book 1 online draft (2025-04-18), Chapter 20 exercises",
          "label": "Exercise 20.1",
          "page_label": "book p. 712 (PDF p. 742)",
          "solution_pages": "39–40"
        },
        "links": {
          "problem": "https://github.com/probml/pml-book/releases/download/2025-04-18/book1.pdf#page=742",
          "solution": "https://probml.github.io/pml-book/solns-public.pdf#page=39"
        },
        "selection_note": "Derives E- and M-step updates for a latent Gaussian factor model.",
        "source_caveat": "This is advanced latent-variable practice rather than clustering; the public solution manual predates the dated book draft.",
        "answer_status": "official-solution"
      },
      {
        "id": "harvard-stat110-f2011-sp5-continuous-q1",
        "collection": "practice",
        "area": "mathematics",
        "topic": "probability",
        "origin": "external",
        "title": "Lognormal transformation by the CDF method",
        "skills": [
          "continuous-random-variables",
          "pdf",
          "cdf",
          "transformations"
        ],
        "priority": "supplementary",
        "difficulty": "medium",
        "estimated_minutes": 12,
        "prerequisites": [
          "normal-distribution",
          "chain-rule"
        ],
        "source_id": "harvard-stat110-f2011",
        "locator": {
          "document": "Strategic Practice and Homework 5",
          "label": "Section 3: Continuous Distributions, Problem 1",
          "page": 2
        },
        "links": {
          "problem": "https://stat110.hsites.harvard.edu/resource/strategic-practice-and-homework-5",
          "solution": "https://stat110.hsites.harvard.edu/resource/strategic-practice-and-homework-5"
        },
        "selection_note": "A compact test of transforming a continuous random variable using a CDF before differentiating for the density.",
        "answer_status": "official-solution"
      },
      {
        "id": "pml-book1-ex2.9",
        "collection": "practice",
        "area": "mathematics",
        "topic": "probability",
        "origin": "external",
        "title": "Bayes rule and diagnostic evidence",
        "skills": [
          "total-probability",
          "bayes-rule",
          "conditional-probability"
        ],
        "priority": "supplementary",
        "difficulty": "medium",
        "estimated_minutes": 12,
        "prerequisites": [
          "conditional-probability"
        ],
        "source_id": "pml-book1-2022",
        "locator": {
          "document": "PML Book 1 online draft (2025-04-18), Chapter 2 exercises",
          "label": "Exercise 2.9",
          "page_label": "book p. 75 (PDF p. 105)",
          "solution_pages": "6"
        },
        "links": {
          "problem": "https://github.com/probml/pml-book/releases/download/2025-04-18/book1.pdf#page=105",
          "solution": "https://probml.github.io/pml-book/solns-public.pdf#page=6"
        },
        "selection_note": "Connects Bayes rule to evidence interpretation and exposes the common confusion between a likelihood and a posterior.",
        "answer_status": "official-solution"
      },
      {
        "id": "pml-book1-ex3.4",
        "collection": "practice",
        "area": "mathematics",
        "topic": "statistics",
        "origin": "external",
        "title": "Linear transformations and quadratic expectations",
        "skills": [
          "covariance",
          "correlation"
        ],
        "priority": "supplementary",
        "difficulty": "medium",
        "estimated_minutes": 15,
        "prerequisites": [
          "expectation",
          "covariance",
          "matrix-multiplication"
        ],
        "source_id": "pml-book1-2022",
        "locator": {
          "document": "PML Book 1 online draft (2025-04-18), Chapter 3 exercises",
          "label": "Exercise 3.4",
          "page_label": "book p. 104 (PDF p. 134)",
          "solution_pages": "8"
        },
        "links": {
          "problem": "https://github.com/probml/pml-book/releases/download/2025-04-18/book1.pdf#page=134",
          "solution": "https://probml.github.io/pml-book/solns-public.pdf#page=8"
        },
        "selection_note": "Exercises the matrix identities behind transformed covariance and expected quadratic forms used throughout machine learning.",
        "answer_status": "official-solution"
      }
    ],
    "sets": [
      {
        "id": "linear-algebra",
        "title": "Linear Algebra",
        "area": "mathematics",
        "topic": "linear-algebra",
        "purpose": "Cover matrix fundamentals, subspaces, projections, spectral structure, and decomposition.",
        "timebox_minutes": 150,
        "items": [
          "original-la-foundations",
          "original-la-basis-change",
          "mit-18-06-s2010-exam1-q2",
          "mit-18-06-s2010-exam2-q1",
          "mit-18-06-s2010-exam2-q2",
          "mit-18-06-s2010-exam3-q1",
          "mit-18-06-s2010-exam3-q2",
          "mit-18-06-s2010-exam3-q3c",
          "original-la-low-rank"
        ],
        "instructions": [
          "Split the set across sessions.",
          "Retry every hinted item independently."
        ],
        "completion": "Explain the algebraic and geometric meaning of rank, projection, eigenstructure, and SVD.",
        "next_sets": [
          "calculus"
        ]
      },
      {
        "id": "calculus",
        "title": "Calculus",
        "area": "mathematics",
        "topic": "calculus",
        "purpose": "Cover single-variable foundations, multivariable differentiation, approximation, and optimization.",
        "timebox_minutes": 120,
        "items": [
          "mit-18-01sc-f2010-final-foundations",
          "mit-18-02sc-f2010-exam2-q1",
          "original-calc-jacobian",
          "mit-18-02sc-f2010-exam2-q3",
          "mit-18-02sc-f2010-exam2-q4",
          "mit-18-02sc-f2010-exam2-q5",
          "mit-18-02sc-f2010-exam2-q6",
          "original-calc-matrix"
        ],
        "instructions": [
          "State dimensions for vector and matrix derivatives.",
          "Separate method-selection errors from algebra errors."
        ],
        "completion": "Derive gradients, Jacobians, Hessians, and constrained first-order conditions without relying on source notation.",
        "next_sets": [
          "probability"
        ]
      },
      {
        "id": "probability",
        "title": "Probability",
        "area": "mathematics",
        "topic": "probability",
        "purpose": "Move from events and conditioning through moments, distributions, and asymptotic results.",
        "timebox_minutes": 130,
        "items": [
          "original-prob-foundations",
          "pml-book1-ex2.9",
          "mit-18-05-s2022-exam1-q1b",
          "mit-18-05-s2022-exam1-q3",
          "original-prob-distributions",
          "harvard-stat110-f2011-sp5-continuous-q1",
          "mit-18-05-s2022-exam1-q4",
          "original-prob-total-variance",
          "original-prob-gaussian",
          "mit-18-05-s2022-exam1-q5",
          "mit-18-05-s2022-exam1-q6",
          "original-prob-lln"
        ],
        "instructions": [
          "Name conditioning events and random variables explicitly.",
          "Check independence before factorizing."
        ],
        "completion": "Move fluently among event, distribution, expectation, and covariance representations.",
        "next_sets": [
          "statistics"
        ]
      },
      {
        "id": "statistics",
        "title": "Statistics",
        "area": "mathematics",
        "topic": "statistics",
        "purpose": "Cover estimators, likelihood, Bayesian updating, intervals, tests, and simple regression.",
        "timebox_minutes": 130,
        "items": [
          "original-stats-estimator",
          "mit-18-05-s2022-exam2-ii1",
          "mit-18-05-s2022-exam2-ii2",
          "original-stats-mom-map",
          "mit-18-05-s2022-exam2-ii4",
          "mit-18-05-s2022-pset11-q1",
          "mit-18-05-s2022-exam2-ii5",
          "mit-18-05-s2022-pset6-q2",
          "pml-book1-ex3.4",
          "mit-18-05-s2022-exam2-i2"
        ],
        "instructions": [
          "Write the model before deriving an estimator or test.",
          "Keep p-values and posterior probabilities distinct."
        ],
        "completion": "Derive and interpret one estimator, interval, hypothesis test, and posterior update from first principles.",
        "next_sets": []
      },
      {
        "id": "control-flow",
        "title": "Control Flow",
        "area": "programming",
        "topic": "control-flow",
        "purpose": "Build reliable string traversal, branching, and iteration fluency.",
        "timebox_minutes": 25,
        "items": [
          "mit-6-100l-finger-05",
          "mit-6-100l-finger-08",
          "mit-6-100l-finger-06"
        ],
        "instructions": [
          "Trace edge cases before running tests."
        ],
        "completion": "Implement and explain each control path without debugger assistance.",
        "next_sets": [
          "data-structures"
        ]
      },
      {
        "id": "data-structures",
        "title": "Data Structures",
        "area": "programming",
        "topic": "data-structures",
        "purpose": "Select and use lists, mappings, sets, stacks, queues, heaps, and graph traversals.",
        "timebox_minutes": 130,
        "items": [
          "leetcode-20-valid-parentheses",
          "leetcode-215-kth-largest",
          "leetcode-704-binary-search",
          "leetcode-752-open-the-lock",
          "leetcode-200-number-of-islands",
          "mit-6-100l-finger-19",
          "mit-6-100l-finger-14"
        ],
        "instructions": [
          "State why the chosen container supports the required operation efficiently."
        ],
        "completion": "Implement each structure-driven pattern from a blank function signature.",
        "next_sets": [
          "recursion"
        ]
      },
      {
        "id": "python",
        "title": "Python",
        "area": "programming",
        "topic": "python",
        "purpose": "Eliminate mistakes in strings, mutation, aliasing, object state, and complexity.",
        "timebox_minutes": 55,
        "items": [
          "original-py-alias-copy",
          "mit-6-100l-finger-05",
          "mit-6-100l-finger-08",
          "mit-6-100l-finger-11",
          "mit-6-100l-finger-17",
          "mit-6-100l-finger-23"
        ],
        "instructions": [
          "Predict exact repr output before execution."
        ],
        "completion": "Explain every mutation and asymptotic cost in the selected code.",
        "next_sets": [
          "control-flow"
        ]
      },
      {
        "id": "recursion",
        "title": "Recursion",
        "area": "programming",
        "topic": "recursion",
        "purpose": "Practice base cases, call traces, and recursive decomposition.",
        "timebox_minutes": 45,
        "items": [
          "mit-6-100l-finger-15",
          "mit-6-100l-finger-16",
          "leetcode-200-number-of-islands"
        ],
        "instructions": [
          "Write the base case before the recursive step.",
          "Trace one nontrivial input by hand."
        ],
        "completion": "Implement each recursive function without slicing or hidden global state.",
        "next_sets": []
      },
      {
        "id": "regression",
        "title": "Regression",
        "area": "machine-learning",
        "topic": "regression",
        "purpose": "Connect squared loss, gradients, normal equations, and ridge regularization.",
        "timebox_minutes": 45,
        "items": [
          "google-mlcc-linear-regression-quiz",
          "original-ml-regression",
          "pml-book1-ex11.2"
        ],
        "instructions": [
          "Track matrix dimensions through every expression."
        ],
        "completion": "Derive the unregularized and ridge objectives and updates.",
        "next_sets": [
          "classification"
        ]
      },
      {
        "id": "classification",
        "title": "Classification",
        "area": "machine-learning",
        "topic": "classification",
        "purpose": "Connect logistic probabilities and losses to threshold-dependent evaluation.",
        "timebox_minutes": 70,
        "items": [
          "original-ml-logistic",
          "original-ml-metrics",
          "google-mlcc-logistic-quiz",
          "google-mlcc-classification-quiz",
          "pml-book1-ex5.1",
          "pml-book1-ex10.1"
        ],
        "instructions": [
          "Distinguish probability estimation from the classification decision rule."
        ],
        "completion": "Compute a loss and evaluation metrics and explain threshold trade-offs.",
        "next_sets": [
          "gradient-descent"
        ]
      },
      {
        "id": "convolution",
        "title": "Convolution",
        "area": "machine-learning",
        "topic": "convolution",
        "purpose": "Compute convolution geometry and parameter counts accurately.",
        "timebox_minutes": 55,
        "items": [
          "original-ml-convolution",
          "mit-6-036-s2018-final-q9",
          "mit-6-036-s2019-final-q4"
        ],
        "instructions": [
          "Write the output-size formula before substituting values."
        ],
        "completion": "Compute shapes and parameter counts without framework assistance.",
        "next_sets": [
          "dimensionality-reduction"
        ]
      },
      {
        "id": "dimensionality-reduction",
        "title": "Dimensionality Reduction",
        "area": "machine-learning",
        "topic": "dimensionality-reduction",
        "purpose": "Relate PCA variance objectives to covariance eigenvectors and SVD.",
        "timebox_minutes": 45,
        "items": [
          "original-ml-pca",
          "original-la-low-rank",
          "pml-book1-ex20.3"
        ],
        "instructions": [
          "Center the data conceptually before applying PCA."
        ],
        "completion": "Explain both reconstruction-error and retained-variance views of PCA.",
        "next_sets": [
          "unsupervised-learning"
        ]
      },
      {
        "id": "gradient-descent",
        "title": "Gradient Descent",
        "area": "machine-learning",
        "topic": "gradient-descent",
        "purpose": "Compute deterministic and stochastic updates and diagnose step-size behavior.",
        "timebox_minutes": 25,
        "items": [
          "original-ml-gd",
          "original-ml-sgd",
          "original-ml-regression"
        ],
        "instructions": [
          "Write the gradient at the current iterate before updating."
        ],
        "completion": "Explain learning-rate and gradient-variance effects.",
        "next_sets": [
          "optimization"
        ]
      },
      {
        "id": "neural-networks",
        "title": "Neural Networks",
        "area": "machine-learning",
        "topic": "neural-networks",
        "purpose": "Practice forward computation, backpropagation, activation behavior, and parameter counting.",
        "timebox_minutes": 55,
        "items": [
          "original-ml-forward-backprop",
          "original-ml-network-params",
          "google-mlcc-neural-network-quiz",
          "pml-book1-ex13.1"
        ],
        "instructions": [
          "Draw the scalar computational graph for backpropagation."
        ],
        "completion": "Compute one forward and backward pass and count parameters by layer.",
        "next_sets": [
          "convolution"
        ]
      },
      {
        "id": "optimization",
        "title": "Optimization",
        "area": "machine-learning",
        "topic": "optimization",
        "purpose": "Relate stationary points, convexity, objectives, regularization, and training diagnostics.",
        "timebox_minutes": 60,
        "items": [
          "mit-6-036-s2019-midterm-q5",
          "original-ml-regularization",
          "original-ml-gd",
          "pml-book1-ex11.4"
        ],
        "instructions": [
          "Separate objective geometry from optimizer behavior."
        ],
        "completion": "Diagnose whether a problem comes from the objective, step size, or model complexity.",
        "next_sets": [
          "neural-networks"
        ]
      },
      {
        "id": "theory",
        "title": "Theory",
        "area": "machine-learning",
        "topic": "theory",
        "purpose": "Reason about bias, variance, overfitting, generalization, and evaluation splits.",
        "timebox_minutes": 60,
        "items": [
          "mit-6-036-s2019-midterm-q4",
          "original-ml-regularization",
          "original-ml-finite-class-bound",
          "google-mlcc-overfitting-quiz",
          "pml-book1-ex4.5"
        ],
        "instructions": [
          "Use observed train-validation patterns rather than vague model-size rules."
        ],
        "completion": "Recommend a defensible response to one bias and one variance failure mode.",
        "next_sets": []
      },
      {
        "id": "unsupervised-learning",
        "title": "Unsupervised Learning",
        "area": "machine-learning",
        "topic": "unsupervised-learning",
        "purpose": "Optimize and interpret hard clustering and mixture-model assignments.",
        "timebox_minutes": 60,
        "items": [
          "original-ml-kmeans",
          "original-ml-gmm",
          "pml-book1-ex20.1"
        ],
        "instructions": [
          "Write the objective or posterior normalization before updating assignments."
        ],
        "completion": "Perform one k-means update and one mixture responsibility calculation.",
        "next_sets": [
          "theory"
        ]
      }
    ]
  }
}