feat: improve dropped question support

This commit is contained in:
2026-09-20 00:41:26 -04:00
parent ba84c4d82a
commit cea03048b8
18 changed files with 302 additions and 86 deletions
+27 -10
View File
@@ -143,6 +143,7 @@
review: ((citation: "KKW §6.2", title: "Molecules and Medicine", url: "https://example.edu/6/2"),),
),
),
dropped-questions: ((number: 35, full-credit: true),),
review-lectures: (
(
lecture: "L1.1",
@@ -458,15 +459,30 @@
#block(above: entry-gap)[
#pad(right: prose-pad)[
#text(size: size-lead)[
#plural(dropped-questions.len(), "Question", "Questions")
#dropped-questions.map(str).join(", ")
#plural(dropped-questions.len(), "was", "were")
dropped after the exam and #plural(dropped-questions.len(), "is", "are")
not part of anyone's score. Your percentage above is out of the
#plural(dropped-questions.len(), "remaining question", "remaining questions").
Nothing you wrote on
#plural(dropped-questions.len(), "it", "them")
counted for or against you.
#{
// Two kinds of drop, and they need different sentences. A credited
// question is still in the denominator, so telling a student it was
// removed would not match the arithmetic they can do themselves.
let credited = dropped-questions.filter(d => d.at("full-credit", default: false))
let removed = dropped-questions.filter(d => not d.at("full-credit", default: false))
let numbers = list => list.map(d => str(d.number)).join(", ")
if credited.len() > 0 [
#plural(credited.len(), "Question", "Questions") #numbers(credited)
#plural(credited.len(), "was", "were") thrown out after the exam.
Everyone received full credit for
#plural(credited.len(), "it", "them"), so
#plural(credited.len(), "it is", "they are") still counted in the
score above and whatever you chose made no difference.
]
if removed.len() > 0 [
#plural(removed.len(), "Question", "Questions") #numbers(removed)
#plural(removed.len(), "was", "were") thrown out and removed from
scoring, so your percentage is out of the remaining questions.
Nothing you wrote on #plural(removed.len(), "it", "them") counted
either way.
]
}
]
]
]
@@ -822,7 +838,8 @@
#box(width: 0.7em, height: 0.7em, fill: ok-color.lighten(70%), radius: 2pt) right ·
#box(width: 0.7em, height: 0.7em, fill: mid-color.lighten(70%), radius: 2pt) part marks ·
#box(width: 0.7em, height: 0.7em, fill: bad-color.lighten(70%), radius: 2pt) not right ·
#box(width: 0.7em, height: 0.7em, fill: luma(210), radius: 2pt) left blank
#box(width: 0.7em, height: 0.7em, fill: luma(210), radius: 2pt) left blank ·
#box(width: 0.7em, height: 0.7em, fill: luma(150), radius: 2pt) dropped, not scored
]
]
]