{
 "schema": "ug-calc-trace-set/1",
 "title": "UCAT score calculation, every line checked",
 "page": "https://ucatgenius.co.uk/labs/ucat-score-calculation-proof?utm_source=labs&utm_medium=page&utm_campaign=ucat-score-calculation-proof&utm_content=download",
 "start": {
  "url": "https://ucatgenius.co.uk/start?utm_source=labs&utm_medium=page&utm_campaign=ucat-score-calculation-proof&utm_content=download",
  "label": "Find your UCAT starting point"
 },
 "generated": "2026-10-06",
 "howToCheck": "Re-run each step in order. A const step's value equals its literal. Any other step's value equals its op applied to the values of the step ids in args, in exact fractions (values are stored as p/q). Ops: add, sub, mul, div (element by element on lists), sum, dot, min, max, ge (1 or 0), if (cond, then, else), floor, roundHalfUp, roundHalfEven, lookup (table, key, column), pick (cond, label, ..., fallback).",
 "licence": "Free to reuse with a link to the page above.",
 "traces": [
  {
   "schema": "ug-calc-trace/1",
   "id": "ucat-vr-30",
   "title": "Verbal Reasoning: 30 of 44 right",
   "tool": {
    "name": "UCAT score calculator",
    "url": "https://ucatgenius.co.uk/ucat-raw-score-converter?utm_source=labs&utm_medium=page&utm_campaign=ucat-score-calculation-proof&utm_content=download"
   },
   "inputs": [
    {
     "label": "Verbal Reasoning questions right",
     "value": "30 of 44"
    }
   ],
   "sources": [
    {
     "id": "technical-2025",
     "publisher": "UCAT Consortium",
     "title": "UCAT 2025 Technical Report",
     "url": "https://www.ucat.ac.uk/media/1726/ucat-2025-technical-report-final.pdf",
     "locator": "Tables 39, 40 and 42, printed pages 47 and 49"
    }
   ],
   "steps": [
    {
     "id": "s1",
     "say": "Questions right in Verbal Reasoning",
     "op": "const",
     "literal": "30",
     "key": true,
     "value": "30"
    },
    {
     "id": "s2",
     "say": "Questions in a full Verbal Reasoning section, trial questions included",
     "op": "const",
     "literal": "44",
     "src": "technical-2025",
     "value": "44"
    },
    {
     "id": "s3",
     "say": "Questions that count towards the score",
     "op": "const",
     "literal": "40",
     "src": "technical-2025",
     "value": "40"
    },
    {
     "id": "s4",
     "say": "Candidates who sat each of the five 2025 forms",
     "op": "const",
     "literal": [
      "8668",
      "8568",
      "8730",
      "7753",
      "7635"
     ],
     "src": "technical-2025",
     "value": [
      "8668",
      "8568",
      "8730",
      "7753",
      "7635"
     ]
    },
    {
     "id": "s5",
     "say": "Each form's mean raw mark",
     "op": "const",
     "literal": [
      "22.19",
      "22.33",
      "22.57",
      "22.04",
      "22.1"
     ],
     "src": "technical-2025",
     "value": [
      "2219/100",
      "2233/100",
      "2257/100",
      "551/25",
      "221/10"
     ]
    },
    {
     "id": "s6",
     "say": "Each form's raw mark spread (standard deviation)",
     "op": "const",
     "literal": [
      "6.09",
      "6.06",
      "6.36",
      "6.17",
      "6.18"
     ],
     "src": "technical-2025",
     "value": [
      "609/100",
      "303/50",
      "159/25",
      "617/100",
      "309/50"
     ]
    },
    {
     "id": "s7",
     "say": "Each form's mean scaled score",
     "op": "const",
     "literal": [
      "602.95",
      "603.01",
      "606.38",
      "599",
      "600.34"
     ],
     "src": "technical-2025",
     "value": [
      "12059/20",
      "60301/100",
      "30319/50",
      "599",
      "30017/50"
     ]
    },
    {
     "id": "s8",
     "say": "Each form's scaled score spread",
     "op": "const",
     "literal": [
      "79.87",
      "79.26",
      "83.53",
      "80.01",
      "79.71"
     ],
     "src": "technical-2025",
     "value": [
      "7987/100",
      "3963/50",
      "8353/100",
      "8001/100",
      "7971/100"
     ]
    },
    {
     "id": "s9",
     "say": "Candidates across the five forms",
     "op": "sum",
     "args": [
      "s4"
     ],
     "value": "41354"
    },
    {
     "id": "s10",
     "say": "Marks per scored question",
     "op": "const",
     "literal": "1",
     "value": "1"
    },
    {
     "id": "s11",
     "say": "Right answers times scored questions",
     "op": "mul",
     "args": [
      "s1",
      "s3"
     ],
     "value": "1200"
    },
    {
     "id": "s12",
     "say": "Right answers scaled to the scored questions",
     "op": "div",
     "args": [
      "s11",
      "s2"
     ],
     "value": "300/11"
    },
    {
     "id": "s13",
     "say": "Your raw marks on the scored questions",
     "op": "mul",
     "args": [
      "s12",
      "s10"
     ],
     "key": true,
     "value": "300/11"
    },
    {
     "id": "s14",
     "say": "Full marks on the scored questions",
     "op": "mul",
     "args": [
      "s3",
      "s10"
     ],
     "value": "40"
    },
    {
     "id": "s15",
     "say": "Each form's scaled points per raw mark",
     "op": "div",
     "args": [
      "s8",
      "s6"
     ],
     "value": [
      "1141/87",
      "1321/101",
      "8353/636",
      "8001/617",
      "2657/206"
     ]
    },
    {
     "id": "s16",
     "say": "Candidates times slope, added up",
     "op": "dot",
     "args": [
      "s4",
      "s15"
     ],
     "value": "15964714823591681/29596399761"
    },
    {
     "id": "s17",
     "say": "B: scaled points per raw mark, averaged by candidates",
     "op": "div",
     "args": [
      "s16",
      "s9"
     ],
     "key": true,
     "value": "15964714823591681/1223929515716394"
    },
    {
     "id": "s18",
     "say": "Slope times mean raw mark",
     "op": "mul",
     "args": [
      "s15",
      "s5"
     ],
     "value": [
      "2531879/8700",
      "2949793/10100",
      "18852721/63600",
      "4408551/15425",
      "587197/2060"
     ]
    },
    {
     "id": "s19",
     "say": "Each form's line at zero marks",
     "op": "sub",
     "args": [
      "s7",
      "s18"
     ],
     "value": [
      "1356893/4350",
      "785152/2525",
      "19713047/63600",
      "4831024/15425",
      "3247517/10300"
     ]
    },
    {
     "id": "s20",
     "say": "Candidates times intercept, added up",
     "op": "dot",
     "args": [
      "s4",
      "s19"
     ],
     "value": "76414277484669302839/5919279952200"
    },
    {
     "id": "s21",
     "say": "A: the line's value at zero marks, averaged by candidates",
     "op": "div",
     "args": [
      "s20",
      "s9"
     ],
     "key": true,
     "value": "76414277484669302839/244785903143278800"
    },
    {
     "id": "s22",
     "say": "Candidates times mean raw mark, added up",
     "op": "dot",
     "args": [
      "s4",
      "s5"
     ],
     "value": "23007802/25"
    },
    {
     "id": "s23",
     "say": "Mean raw mark, averaged by candidates",
     "op": "div",
     "args": [
      "s22",
      "s9"
     ],
     "value": "11503901/516925"
    },
    {
     "id": "s24",
     "say": "Candidates times spread, added up",
     "op": "dot",
     "args": [
      "s4",
      "s6"
     ],
     "value": "25525331/100"
    },
    {
     "id": "s25",
     "say": "Raw mark spread, averaged by candidates",
     "op": "div",
     "args": [
      "s24",
      "s9"
     ],
     "value": "1109797/179800"
    },
    {
     "id": "s26",
     "say": "Anchors sit 1.5 spreads from the mean",
     "op": "const",
     "literal": "1.5",
     "value": "3/2"
    },
    {
     "id": "s27",
     "say": "and at least 3 marks from either end",
     "op": "const",
     "literal": "3",
     "value": "3"
    },
    {
     "id": "s28",
     "say": "1.5 spreads in marks",
     "op": "mul",
     "args": [
      "s26",
      "s25"
     ],
     "value": "3329391/359600"
    },
    {
     "id": "s29",
     "say": "Mean plus 1.5 spreads",
     "op": "add",
     "args": [
      "s23",
      "s28"
     ],
     "value": "260638409/8270800"
    },
    {
     "id": "s30",
     "say": "Full marks minus 3",
     "op": "sub",
     "args": [
      "s14",
      "s27"
     ],
     "value": "37"
    },
    {
     "id": "s31",
     "say": "Upper anchor",
     "op": "min",
     "args": [
      "s29",
      "s30"
     ],
     "key": true,
     "value": "260638409/8270800"
    },
    {
     "id": "s32",
     "say": "Mean minus 1.5 spreads",
     "op": "sub",
     "args": [
      "s23",
      "s28"
     ],
     "value": "107486423/8270800"
    },
    {
     "id": "s33",
     "say": "Lower anchor",
     "op": "max",
     "args": [
      "s32",
      "s27"
     ],
     "key": true,
     "value": "107486423/8270800"
    },
    {
     "id": "s34",
     "say": "Lowest scaled score",
     "op": "const",
     "literal": "300",
     "value": "300"
    },
    {
     "id": "s35",
     "say": "Highest scaled score",
     "op": "const",
     "literal": "900",
     "value": "900"
    },
    {
     "id": "s36",
     "say": "B times your marks",
     "op": "mul",
     "args": [
      "s17",
      "s13"
     ],
     "value": "798235741179584050/2243870778813389"
    },
    {
     "id": "s37",
     "say": "Line at your marks: A + B × marks",
     "op": "add",
     "args": [
      "s21",
      "s36"
     ],
     "value": "78193040945515790923/117071518894611600"
    },
    {
     "id": "s38",
     "say": "B times the upper anchor",
     "op": "mul",
     "args": [
      "s17",
      "s31"
     ],
     "value": "4161017871759651401475529/10122876238587151495200"
    },
    {
     "id": "s39",
     "say": "Line at the upper anchor: A + B × marks",
     "op": "add",
     "args": [
      "s21",
      "s38"
     ],
     "value": "488070260190711050071969/674858415905810099680"
    },
    {
     "id": "s40",
     "say": "Marks past the upper anchor",
     "op": "sub",
     "args": [
      "s13",
      "s31"
     ],
     "value": "-385782499/90978800"
    },
    {
     "id": "s41",
     "say": "Room between the anchor and full marks",
     "op": "sub",
     "args": [
      "s14",
      "s31"
     ],
     "value": "70193591/8270800"
    },
    {
     "id": "s42",
     "say": "How far past the anchor, as a share of the room left",
     "op": "div",
     "args": [
      "s40",
      "s41"
     ],
     "value": "-385782499/772129501"
    },
    {
     "id": "s43",
     "say": "Scaled points left to 900",
     "op": "sub",
     "args": [
      "s35",
      "s39"
     ],
     "value": "119302314124518039640031/674858415905810099680"
    },
    {
     "id": "s44",
     "say": "Share of the gap to 900",
     "op": "mul",
     "args": [
      "s42",
      "s43"
     ],
     "value": "-46024744879439566502912219617469/521078091919003615266678659680"
    },
    {
     "id": "s45",
     "say": "Above the upper anchor: stretch the rest of the way to 900",
     "op": "add",
     "args": [
      "s39",
      "s44"
     ],
     "value": "99999002990809329636898250/157505347704878492789899"
    },
    {
     "id": "s46",
     "say": "B times the lower anchor",
     "op": "mul",
     "args": [
      "s17",
      "s33"
     ],
     "value": "1715990090602945803247063/10122876238587151495200"
    },
    {
     "id": "s47",
     "say": "Line at the lower anchor: A + B × marks",
     "op": "add",
     "args": [
      "s21",
      "s46"
     ],
     "value": "1625342040567986717617023/3374292079529050498400"
    },
    {
     "id": "s48",
     "say": "Marks as a share of the lower anchor",
     "op": "div",
     "args": [
      "s13",
      "s33"
     ],
     "value": "2481240000/1182350653"
    },
    {
     "id": "s49",
     "say": "Scaled points from 300 to the anchor",
     "op": "sub",
     "args": [
      "s47",
      "s34"
     ],
     "value": "613054416709271568097023/3374292079529050498400"
    },
    {
     "id": "s50",
     "say": "Share of the way up from 300",
     "op": "mul",
     "args": [
      "s48",
      "s49"
     ],
     "value": "91958162506390735214553450/241185643688875368117547"
    },
    {
     "id": "s51",
     "say": "Below the lower anchor: stretch down to 300",
     "op": "add",
     "args": [
      "s34",
      "s50"
     ],
     "value": "164313855613053345649817550/241185643688875368117547"
    },
    {
     "id": "s52",
     "say": "Is the upper anchor at least your marks? (1 yes, 0 no)",
     "op": "ge",
     "args": [
      "s31",
      "s13"
     ],
     "key": true,
     "value": "1"
    },
    {
     "id": "s53",
     "say": "Are your marks at least the lower anchor? (1 yes, 0 no)",
     "op": "ge",
     "args": [
      "s13",
      "s33"
     ],
     "key": true,
     "value": "1"
    },
    {
     "id": "s54",
     "say": "Inside the anchors the straight line stands, else the lower stretch",
     "op": "if",
     "args": [
      "s53",
      "s37",
      "s51"
     ],
     "value": "78193040945515790923/117071518894611600"
    },
    {
     "id": "s55",
     "say": "Scaled score before rounding",
     "op": "if",
     "args": [
      "s52",
      "s54",
      "s45"
     ],
     "key": true,
     "value": "78193040945515790923/117071518894611600"
    },
    {
     "id": "s56",
     "say": "No higher than 900",
     "op": "min",
     "args": [
      "s35",
      "s55"
     ],
     "value": "78193040945515790923/117071518894611600"
    },
    {
     "id": "s57",
     "say": "Kept between 300 and 900",
     "op": "max",
     "args": [
      "s34",
      "s56"
     ],
     "value": "78193040945515790923/117071518894611600"
    },
    {
     "id": "s58",
     "say": "UCAT reports scores in steps of 10",
     "op": "const",
     "literal": "10",
     "value": "10"
    },
    {
     "id": "s59",
     "say": "Score in tens",
     "op": "div",
     "args": [
      "s57",
      "s58"
     ],
     "value": "78193040945515790923/1170715188946116000"
    },
    {
     "id": "s60",
     "say": "Tens, rounded (half to even)",
     "op": "roundHalfEven",
     "args": [
      "s59"
     ],
     "value": "67"
    },
    {
     "id": "s61",
     "say": "Rounded to the nearest 10",
     "op": "mul",
     "args": [
      "s60",
      "s58"
     ],
     "key": true,
     "value": "670"
    }
   ],
   "result": "s61",
   "answer": "Verbal Reasoning 670",
   "generated": "2026-10-06"
  },
  {
   "schema": "ug-calc-trace/1",
   "id": "ucat-dm-25",
   "title": "Decision Making: 25 of 35 right",
   "tool": {
    "name": "UCAT score calculator",
    "url": "https://ucatgenius.co.uk/ucat-raw-score-converter?utm_source=labs&utm_medium=page&utm_campaign=ucat-score-calculation-proof&utm_content=download"
   },
   "inputs": [
    {
     "label": "Decision Making questions right",
     "value": "25 of 35"
    }
   ],
   "sources": [
    {
     "id": "technical-2025",
     "publisher": "UCAT Consortium",
     "title": "UCAT 2025 Technical Report",
     "url": "https://www.ucat.ac.uk/media/1726/ucat-2025-technical-report-final.pdf",
     "locator": "Tables 39, 40 and 42, printed pages 47 and 49"
    }
   ],
   "steps": [
    {
     "id": "s1",
     "say": "Questions right in Decision Making",
     "op": "const",
     "literal": "25",
     "key": true,
     "value": "25"
    },
    {
     "id": "s2",
     "say": "Questions in a full Decision Making section, trial questions included",
     "op": "const",
     "literal": "35",
     "src": "technical-2025",
     "value": "35"
    },
    {
     "id": "s3",
     "say": "Questions that count towards the score",
     "op": "const",
     "literal": "31",
     "src": "technical-2025",
     "value": "31"
    },
    {
     "id": "s4",
     "say": "Candidates who sat each of the five 2025 forms",
     "op": "const",
     "literal": [
      "8668",
      "8568",
      "8730",
      "7753",
      "7635"
     ],
     "src": "technical-2025",
     "value": [
      "8668",
      "8568",
      "8730",
      "7753",
      "7635"
     ]
    },
    {
     "id": "s5",
     "say": "Each form's mean raw mark",
     "op": "const",
     "literal": [
      "23.09",
      "21.77",
      "22.79",
      "22.25",
      "22.85"
     ],
     "src": "technical-2025",
     "value": [
      "2309/100",
      "2177/100",
      "2279/100",
      "89/4",
      "457/20"
     ]
    },
    {
     "id": "s6",
     "say": "Each form's raw mark spread (standard deviation)",
     "op": "const",
     "literal": [
      "6.66",
      "6.7",
      "6.92",
      "7.1",
      "6.58"
     ],
     "src": "technical-2025",
     "value": [
      "333/50",
      "67/10",
      "173/25",
      "71/10",
      "329/50"
     ]
    },
    {
     "id": "s7",
     "say": "Each form's mean scaled score",
     "op": "const",
     "literal": [
      "627.97",
      "620.52",
      "634.18",
      "628.08",
      "627"
     ],
     "src": "technical-2025",
     "value": [
      "62797/100",
      "15513/25",
      "31709/50",
      "15702/25",
      "627"
     ]
    },
    {
     "id": "s8",
     "say": "Each form's scaled score spread",
     "op": "const",
     "literal": [
      "84.95",
      "83.75",
      "91.34",
      "89.41",
      "80.87"
     ],
     "src": "technical-2025",
     "value": [
      "1699/20",
      "335/4",
      "4567/50",
      "8941/100",
      "8087/100"
     ]
    },
    {
     "id": "s9",
     "say": "Candidates across the five forms",
     "op": "sum",
     "args": [
      "s4"
     ],
     "value": "41354"
    },
    {
     "id": "s10",
     "say": "Candidates times mean raw mark, added up",
     "op": "dot",
     "args": [
      "s4",
      "s5"
     ],
     "value": "46629509/50"
    },
    {
     "id": "s11",
     "say": "Mean raw mark across the forms, weighted by candidates",
     "op": "div",
     "args": [
      "s10",
      "s9"
     ],
     "value": "46629509/2067700"
    },
    {
     "id": "s12",
     "say": "Decision Making mean mark as a share of the maximum (UCAT item facility)",
     "op": "const",
     "literal": "0.56",
     "src": "technical-2025",
     "value": "14/25"
    },
    {
     "id": "s13",
     "say": "Mean raw mark divided by the facility",
     "op": "div",
     "args": [
      "s11",
      "s12"
     ],
     "value": "46629509/1157912"
    },
    {
     "id": "s14",
     "say": "Marks a form is worth, to the nearest whole mark",
     "op": "roundHalfUp",
     "args": [
      "s13"
     ],
     "value": "40"
    },
    {
     "id": "s15",
     "say": "Marks per scored question",
     "op": "div",
     "args": [
      "s14",
      "s3"
     ],
     "key": true,
     "value": "40/31"
    },
    {
     "id": "s16",
     "say": "Right answers times scored questions",
     "op": "mul",
     "args": [
      "s1",
      "s3"
     ],
     "value": "775"
    },
    {
     "id": "s17",
     "say": "Right answers scaled to the scored questions",
     "op": "div",
     "args": [
      "s16",
      "s2"
     ],
     "value": "155/7"
    },
    {
     "id": "s18",
     "say": "Your raw marks on the scored questions",
     "op": "mul",
     "args": [
      "s17",
      "s15"
     ],
     "key": true,
     "value": "200/7"
    },
    {
     "id": "s19",
     "say": "Full marks on the scored questions",
     "op": "mul",
     "args": [
      "s3",
      "s15"
     ],
     "value": "40"
    },
    {
     "id": "s20",
     "say": "Each form's scaled points per raw mark",
     "op": "div",
     "args": [
      "s8",
      "s6"
     ],
     "value": [
      "8495/666",
      "25/2",
      "4567/346",
      "8941/710",
      "8087/658"
     ]
    },
    {
     "id": "s21",
     "say": "Candidates times slope, added up",
     "op": "dot",
     "args": [
      "s4",
      "s20"
     ],
     "value": "3528146276902789/6728443155"
    },
    {
     "id": "s22",
     "say": "B: scaled points per raw mark, averaged by candidates",
     "op": "div",
     "args": [
      "s21",
      "s9"
     ],
     "key": true,
     "value": "3528146276902789/278248038231870"
    },
    {
     "id": "s23",
     "say": "Slope times mean raw mark",
     "op": "mul",
     "args": [
      "s20",
      "s5"
     ],
     "value": [
      "3922991/13320",
      "2177/8",
      "10408193/34600",
      "795749/2840",
      "3695759/13160"
     ]
    },
    {
     "id": "s24",
     "say": "Each form's line at zero marks",
     "op": "sub",
     "args": [
      "s7",
      "s23"
     ],
     "value": [
      "22207847/66600",
      "69679/200",
      "2306887/6920",
      "4939991/14200",
      "4555561/13160"
     ]
    },
    {
     "id": "s25",
     "say": "Candidates times intercept, added up",
     "op": "dot",
     "args": [
      "s4",
      "s24"
     ],
     "value": "1900897341253159691/134568863100"
    },
    {
     "id": "s26",
     "say": "A: the line's value at zero marks, averaged by candidates",
     "op": "div",
     "args": [
      "s25",
      "s9"
     ],
     "key": true,
     "value": "1900897341253159691/5564960764637400"
    },
    {
     "id": "s27",
     "say": "Candidates times mean raw mark, added up",
     "op": "dot",
     "args": [
      "s4",
      "s5"
     ],
     "value": "46629509/50"
    },
    {
     "id": "s28",
     "say": "Mean raw mark, averaged by candidates",
     "op": "div",
     "args": [
      "s27",
      "s9"
     ],
     "value": "46629509/2067700"
    },
    {
     "id": "s29",
     "say": "Candidates times spread, added up",
     "op": "dot",
     "args": [
      "s4",
      "s6"
     ],
     "value": "7020767/25"
    },
    {
     "id": "s30",
     "say": "Raw mark spread, averaged by candidates",
     "op": "div",
     "args": [
      "s29",
      "s9"
     ],
     "value": "7020767/1033850"
    },
    {
     "id": "s31",
     "say": "Anchors sit 1.5 spreads from the mean",
     "op": "const",
     "literal": "1.5",
     "value": "3/2"
    },
    {
     "id": "s32",
     "say": "and at least 3 marks from either end",
     "op": "const",
     "literal": "3",
     "value": "3"
    },
    {
     "id": "s33",
     "say": "1.5 spreads in marks",
     "op": "mul",
     "args": [
      "s31",
      "s30"
     ],
     "value": "21062301/2067700"
    },
    {
     "id": "s34",
     "say": "Mean plus 1.5 spreads",
     "op": "add",
     "args": [
      "s28",
      "s33"
     ],
     "value": "6769181/206770"
    },
    {
     "id": "s35",
     "say": "Full marks minus 3",
     "op": "sub",
     "args": [
      "s19",
      "s32"
     ],
     "value": "37"
    },
    {
     "id": "s36",
     "say": "Upper anchor",
     "op": "min",
     "args": [
      "s34",
      "s35"
     ],
     "key": true,
     "value": "6769181/206770"
    },
    {
     "id": "s37",
     "say": "Mean minus 1.5 spreads",
     "op": "sub",
     "args": [
      "s28",
      "s33"
     ],
     "value": "6391802/516925"
    },
    {
     "id": "s38",
     "say": "Lower anchor",
     "op": "max",
     "args": [
      "s37",
      "s32"
     ],
     "key": true,
     "value": "6391802/516925"
    },
    {
     "id": "s39",
     "say": "Lowest scaled score",
     "op": "const",
     "literal": "300",
     "value": "300"
    },
    {
     "id": "s40",
     "say": "Highest scaled score",
     "op": "const",
     "literal": "900",
     "value": "900"
    },
    {
     "id": "s41",
     "say": "B times your marks",
     "op": "mul",
     "args": [
      "s22",
      "s18"
     ],
     "value": "70562925538055780/194773626762309"
    },
    {
     "id": "s42",
     "say": "Line at your marks: A + B × marks",
     "op": "add",
     "args": [
      "s26",
      "s41"
     ],
     "value": "9139622165461091279/12984908450820600"
    },
    {
     "id": "s43",
     "say": "B times the upper anchor",
     "op": "mul",
     "args": [
      "s22",
      "s36"
     ],
     "value": "23882660742831098145809/57533346865203759900"
    },
    {
     "id": "s44",
     "say": "Line at the upper anchor: A + B × marks",
     "op": "add",
     "args": [
      "s26",
      "s43"
     ],
     "value": "55282651308415097919/73058218241528584"
    },
    {
     "id": "s45",
     "say": "Marks past the upper anchor",
     "op": "sub",
     "args": [
      "s18",
      "s36"
     ],
     "value": "-6030267/1447390"
    },
    {
     "id": "s46",
     "say": "Room between the anchor and full marks",
     "op": "sub",
     "args": [
      "s19",
      "s36"
     ],
     "value": "1501619/206770"
    },
    {
     "id": "s47",
     "say": "How far past the anchor, as a share of the room left",
     "op": "div",
     "args": [
      "s45",
      "s46"
     ],
     "value": "-6030267/10511333"
    },
    {
     "id": "s48",
     "say": "Scaled points left to 900",
     "op": "sub",
     "args": [
      "s40",
      "s44"
     ],
     "value": "10469745108960627681/73058218241528584"
    },
    {
     "id": "s49",
     "say": "Share of the gap to 900",
     "op": "mul",
     "args": [
      "s47",
      "s48"
     ],
     "value": "-63135358428976677404020827/767939260323381375442472"
    },
    {
     "id": "s50",
     "say": "Above the upper anchor: stretch the rest of the way to 900",
     "op": "add",
     "args": [
      "s44",
      "s49"
     ],
     "value": "3131250898320961207200/4642472676907804417"
    },
    {
     "id": "s51",
     "say": "B times the lower anchor",
     "op": "mul",
     "args": [
      "s22",
      "s38"
     ],
     "value": "11275606214499900267889/71916683581504699875"
    },
    {
     "id": "s52",
     "say": "Line at the lower anchor: A + B × marks",
     "op": "add",
     "args": [
      "s26",
      "s51"
     ],
     "value": "2033539867669908629767/4080379210298139000"
    },
    {
     "id": "s53",
     "say": "Marks as a share of the lower anchor",
     "op": "div",
     "args": [
      "s18",
      "s38"
     ],
     "value": "51692500/22371307"
    },
    {
     "id": "s54",
     "say": "Scaled points from 300 to the anchor",
     "op": "sub",
     "args": [
      "s52",
      "s39"
     ],
     "value": "809426104580466929767/4080379210298139000"
    },
    {
     "id": "s55",
     "say": "Share of the way up from 300",
     "op": "mul",
     "args": [
      "s53",
      "s54"
     ],
     "value": "4047130522902334648835/8829464234656597098"
    },
    {
     "id": "s56",
     "say": "Below the lower anchor: stretch down to 300",
     "op": "add",
     "args": [
      "s39",
      "s55"
     ],
     "value": "6695969793299313778235/8829464234656597098"
    },
    {
     "id": "s57",
     "say": "Is the upper anchor at least your marks? (1 yes, 0 no)",
     "op": "ge",
     "args": [
      "s36",
      "s18"
     ],
     "key": true,
     "value": "1"
    },
    {
     "id": "s58",
     "say": "Are your marks at least the lower anchor? (1 yes, 0 no)",
     "op": "ge",
     "args": [
      "s18",
      "s38"
     ],
     "key": true,
     "value": "1"
    },
    {
     "id": "s59",
     "say": "Inside the anchors the straight line stands, else the lower stretch",
     "op": "if",
     "args": [
      "s58",
      "s42",
      "s56"
     ],
     "value": "9139622165461091279/12984908450820600"
    },
    {
     "id": "s60",
     "say": "Scaled score before rounding",
     "op": "if",
     "args": [
      "s57",
      "s59",
      "s50"
     ],
     "key": true,
     "value": "9139622165461091279/12984908450820600"
    },
    {
     "id": "s61",
     "say": "No higher than 900",
     "op": "min",
     "args": [
      "s40",
      "s60"
     ],
     "value": "9139622165461091279/12984908450820600"
    },
    {
     "id": "s62",
     "say": "Kept between 300 and 900",
     "op": "max",
     "args": [
      "s39",
      "s61"
     ],
     "value": "9139622165461091279/12984908450820600"
    },
    {
     "id": "s63",
     "say": "UCAT reports scores in steps of 10",
     "op": "const",
     "literal": "10",
     "value": "10"
    },
    {
     "id": "s64",
     "say": "Score in tens",
     "op": "div",
     "args": [
      "s62",
      "s63"
     ],
     "value": "9139622165461091279/129849084508206000"
    },
    {
     "id": "s65",
     "say": "Tens, rounded (half to even)",
     "op": "roundHalfEven",
     "args": [
      "s64"
     ],
     "value": "70"
    },
    {
     "id": "s66",
     "say": "Rounded to the nearest 10",
     "op": "mul",
     "args": [
      "s65",
      "s63"
     ],
     "key": true,
     "value": "700"
    }
   ],
   "result": "s66",
   "answer": "Decision Making 700",
   "generated": "2026-10-06"
  },
  {
   "schema": "ug-calc-trace/1",
   "id": "ucat-qr-34",
   "title": "Quantitative Reasoning: 34 of 36 right",
   "tool": {
    "name": "UCAT score calculator",
    "url": "https://ucatgenius.co.uk/ucat-raw-score-converter?utm_source=labs&utm_medium=page&utm_campaign=ucat-score-calculation-proof&utm_content=download"
   },
   "inputs": [
    {
     "label": "Quantitative Reasoning questions right",
     "value": "34 of 36"
    }
   ],
   "sources": [
    {
     "id": "technical-2025",
     "publisher": "UCAT Consortium",
     "title": "UCAT 2025 Technical Report",
     "url": "https://www.ucat.ac.uk/media/1726/ucat-2025-technical-report-final.pdf",
     "locator": "Tables 39, 40 and 42, printed pages 47 and 49"
    }
   ],
   "steps": [
    {
     "id": "s1",
     "say": "Questions right in Quantitative Reasoning",
     "op": "const",
     "literal": "34",
     "key": true,
     "value": "34"
    },
    {
     "id": "s2",
     "say": "Questions in a full Quantitative Reasoning section, trial questions included",
     "op": "const",
     "literal": "36",
     "src": "technical-2025",
     "value": "36"
    },
    {
     "id": "s3",
     "say": "Questions that count towards the score",
     "op": "const",
     "literal": "32",
     "src": "technical-2025",
     "value": "32"
    },
    {
     "id": "s4",
     "say": "Candidates who sat each of the five 2025 forms",
     "op": "const",
     "literal": [
      "8668",
      "8568",
      "8730",
      "7753",
      "7635"
     ],
     "src": "technical-2025",
     "value": [
      "8668",
      "8568",
      "8730",
      "7753",
      "7635"
     ]
    },
    {
     "id": "s5",
     "say": "Each form's mean raw mark",
     "op": "const",
     "literal": [
      "21.46",
      "21.35",
      "22",
      "20.9",
      "20.41"
     ],
     "src": "technical-2025",
     "value": [
      "1073/50",
      "427/20",
      "22",
      "209/10",
      "2041/100"
     ]
    },
    {
     "id": "s6",
     "say": "Each form's raw mark spread (standard deviation)",
     "op": "const",
     "literal": [
      "6.98",
      "6.88",
      "6.88",
      "6.8",
      "6.69"
     ],
     "src": "technical-2025",
     "value": [
      "349/50",
      "172/25",
      "172/25",
      "34/5",
      "669/100"
     ]
    },
    {
     "id": "s7",
     "say": "Each form's mean scaled score",
     "op": "const",
     "literal": [
      "663.21",
      "663.15",
      "673.49",
      "654.88",
      "647.08"
     ],
     "src": "technical-2025",
     "value": [
      "66321/100",
      "13263/20",
      "67349/100",
      "16372/25",
      "16177/25"
     ]
    },
    {
     "id": "s8",
     "say": "Each form's scaled score spread",
     "op": "const",
     "literal": [
      "110.53",
      "109.88",
      "114.1",
      "107.45",
      "105.21"
     ],
     "src": "technical-2025",
     "value": [
      "11053/100",
      "2747/25",
      "1141/10",
      "2149/20",
      "10521/100"
     ]
    },
    {
     "id": "s9",
     "say": "Candidates across the five forms",
     "op": "sum",
     "args": [
      "s4"
     ],
     "value": "41354"
    },
    {
     "id": "s10",
     "say": "Marks per scored question",
     "op": "const",
     "literal": "1",
     "value": "1"
    },
    {
     "id": "s11",
     "say": "Right answers times scored questions",
     "op": "mul",
     "args": [
      "s1",
      "s3"
     ],
     "value": "1088"
    },
    {
     "id": "s12",
     "say": "Right answers scaled to the scored questions",
     "op": "div",
     "args": [
      "s11",
      "s2"
     ],
     "value": "272/9"
    },
    {
     "id": "s13",
     "say": "Your raw marks on the scored questions",
     "op": "mul",
     "args": [
      "s12",
      "s10"
     ],
     "key": true,
     "value": "272/9"
    },
    {
     "id": "s14",
     "say": "Full marks on the scored questions",
     "op": "mul",
     "args": [
      "s3",
      "s10"
     ],
     "value": "32"
    },
    {
     "id": "s15",
     "say": "Each form's scaled points per raw mark",
     "op": "div",
     "args": [
      "s8",
      "s6"
     ],
     "value": [
      "11053/698",
      "2747/172",
      "5705/344",
      "2149/136",
      "3507/223"
     ]
    },
    {
     "id": "s16",
     "say": "Candidates times slope, added up",
     "op": "dot",
     "args": [
      "s4",
      "s15"
     ],
     "value": "301051846909443/455132296"
    },
    {
     "id": "s17",
     "say": "B: scaled points per raw mark, averaged by candidates",
     "op": "div",
     "args": [
      "s16",
      "s9"
     ],
     "key": true,
     "value": "301051846909443/18821540968784"
    },
    {
     "id": "s18",
     "say": "Slope times mean raw mark",
     "op": "mul",
     "args": [
      "s15",
      "s5"
     ],
     "value": [
      "11859869/34900",
      "1172969/3440",
      "62755/172",
      "449141/1360",
      "7157787/22300"
     ]
    },
    {
     "id": "s19",
     "say": "Each form's line at zero marks",
     "op": "sub",
     "args": [
      "s7",
      "s18"
     ],
     "value": [
      "564308/1745",
      "1108267/3440",
      "331783/1075",
      "2207479/6800",
      "7272097/22300"
     ]
    },
    {
     "id": "s20",
     "say": "Candidates times intercept, added up",
     "op": "dot",
     "args": [
      "s4",
      "s19"
     ],
     "value": "301855089251643867/22756614800"
    },
    {
     "id": "s21",
     "say": "A: the line's value at zero marks, averaged by candidates",
     "op": "div",
     "args": [
      "s20",
      "s9"
     ],
     "key": true,
     "value": "301855089251643867/941077048439200"
    },
    {
     "id": "s22",
     "say": "Candidates times mean raw mark, added up",
     "op": "dot",
     "args": [
      "s4",
      "s5"
     ],
     "value": "87887013/100"
    },
    {
     "id": "s23",
     "say": "Mean raw mark, averaged by candidates",
     "op": "div",
     "args": [
      "s22",
      "s9"
     ],
     "value": "87887013/4135400"
    },
    {
     "id": "s24",
     "say": "Candidates times spread, added up",
     "op": "dot",
     "args": [
      "s4",
      "s6"
     ],
     "value": "28331143/100"
    },
    {
     "id": "s25",
     "say": "Raw mark spread, averaged by candidates",
     "op": "div",
     "args": [
      "s24",
      "s9"
     ],
     "value": "28331143/4135400"
    },
    {
     "id": "s26",
     "say": "Anchors sit 1.5 spreads from the mean",
     "op": "const",
     "literal": "1.5",
     "value": "3/2"
    },
    {
     "id": "s27",
     "say": "and at least 3 marks from either end",
     "op": "const",
     "literal": "3",
     "value": "3"
    },
    {
     "id": "s28",
     "say": "1.5 spreads in marks",
     "op": "mul",
     "args": [
      "s26",
      "s25"
     ],
     "value": "84993429/8270800"
    },
    {
     "id": "s29",
     "say": "Mean plus 1.5 spreads",
     "op": "add",
     "args": [
      "s23",
      "s28"
     ],
     "value": "52153491/1654160"
    },
    {
     "id": "s30",
     "say": "Full marks minus 3",
     "op": "sub",
     "args": [
      "s14",
      "s27"
     ],
     "value": "29"
    },
    {
     "id": "s31",
     "say": "Upper anchor",
     "op": "min",
     "args": [
      "s29",
      "s30"
     ],
     "key": true,
     "value": "29"
    },
    {
     "id": "s32",
     "say": "Mean minus 1.5 spreads",
     "op": "sub",
     "args": [
      "s23",
      "s28"
     ],
     "value": "90780597/8270800"
    },
    {
     "id": "s33",
     "say": "Lower anchor",
     "op": "max",
     "args": [
      "s32",
      "s27"
     ],
     "key": true,
     "value": "90780597/8270800"
    },
    {
     "id": "s34",
     "say": "Lowest scaled score",
     "op": "const",
     "literal": "300",
     "value": "300"
    },
    {
     "id": "s35",
     "say": "Highest scaled score",
     "op": "const",
     "literal": "900",
     "value": "900"
    },
    {
     "id": "s36",
     "say": "B times your marks",
     "op": "mul",
     "args": [
      "s17",
      "s13"
     ],
     "value": "100350615636481/207590525391"
    },
    {
     "id": "s37",
     "say": "Line at your marks: A + B × marks",
     "op": "add",
     "args": [
      "s21",
      "s36"
     ],
     "value": "2270333640411073201/2823231145317600"
    },
    {
     "id": "s38",
     "say": "B times the upper anchor",
     "op": "mul",
     "args": [
      "s17",
      "s31"
     ],
     "value": "301051846909443/649018654096"
    },
    {
     "id": "s39",
     "say": "Line at the upper anchor: A + B × marks",
     "op": "add",
     "args": [
      "s21",
      "s38"
     ],
     "value": "738380267270336217/941077048439200"
    },
    {
     "id": "s40",
     "say": "Marks past the upper anchor",
     "op": "sub",
     "args": [
      "s13",
      "s31"
     ],
     "value": "11/9"
    },
    {
     "id": "s41",
     "say": "Room between the anchor and full marks",
     "op": "sub",
     "args": [
      "s14",
      "s31"
     ],
     "value": "3"
    },
    {
     "id": "s42",
     "say": "How far past the anchor, as a share of the room left",
     "op": "div",
     "args": [
      "s40",
      "s41"
     ],
     "value": "11/27"
    },
    {
     "id": "s43",
     "say": "Scaled points left to 900",
     "op": "sub",
     "args": [
      "s35",
      "s39"
     ],
     "value": "108589076324943783/941077048439200"
    },
    {
     "id": "s44",
     "say": "Share of the gap to 900",
     "op": "mul",
     "args": [
      "s42",
      "s43"
     ],
     "value": "398159946524793871/8469693435952800"
    },
    {
     "id": "s45",
     "say": "Above the upper anchor: stretch the rest of the way to 900",
     "op": "add",
     "args": [
      "s39",
      "s44"
     ],
     "value": "440223896997363739/529355839747050"
    },
    {
     "id": "s46",
     "say": "B times the lower anchor",
     "op": "mul",
     "args": [
      "s17",
      "s33"
     ],
     "value": "27329666390391840477471/155669201044618707200"
    },
    {
     "id": "s47",
     "say": "Line at the lower anchor: A + B × marks",
     "op": "add",
     "args": [
      "s21",
      "s46"
     ],
     "value": "77261327834041762381143/155669201044618707200"
    },
    {
     "id": "s48",
     "say": "Marks as a share of the lower anchor",
     "op": "div",
     "args": [
      "s13",
      "s33"
     ],
     "value": "2249657600/817025373"
    },
    {
     "id": "s49",
     "say": "Scaled points from 300 to the anchor",
     "op": "sub",
     "args": [
      "s47",
      "s34"
     ],
     "value": "30560567520656150221143/155669201044618707200"
    },
    {
     "id": "s50",
     "say": "Share of the way up from 300",
     "op": "mul",
     "args": [
      "s48",
      "s49"
     ],
     "value": "10186855840218716740381/18845191826538638427"
    },
    {
     "id": "s51",
     "say": "Below the lower anchor: stretch down to 300",
     "op": "add",
     "args": [
      "s34",
      "s50"
     ],
     "value": "15840413388180308268481/18845191826538638427"
    },
    {
     "id": "s52",
     "say": "Is the upper anchor at least your marks? (1 yes, 0 no)",
     "op": "ge",
     "args": [
      "s31",
      "s13"
     ],
     "key": true,
     "value": "0"
    },
    {
     "id": "s53",
     "say": "Are your marks at least the lower anchor? (1 yes, 0 no)",
     "op": "ge",
     "args": [
      "s13",
      "s33"
     ],
     "key": true,
     "value": "1"
    },
    {
     "id": "s54",
     "say": "Inside the anchors the straight line stands, else the lower stretch",
     "op": "if",
     "args": [
      "s53",
      "s37",
      "s51"
     ],
     "value": "2270333640411073201/2823231145317600"
    },
    {
     "id": "s55",
     "say": "Scaled score before rounding",
     "op": "if",
     "args": [
      "s52",
      "s54",
      "s45"
     ],
     "key": true,
     "value": "440223896997363739/529355839747050"
    },
    {
     "id": "s56",
     "say": "No higher than 900",
     "op": "min",
     "args": [
      "s35",
      "s55"
     ],
     "value": "440223896997363739/529355839747050"
    },
    {
     "id": "s57",
     "say": "Kept between 300 and 900",
     "op": "max",
     "args": [
      "s34",
      "s56"
     ],
     "value": "440223896997363739/529355839747050"
    },
    {
     "id": "s58",
     "say": "UCAT reports scores in steps of 10",
     "op": "const",
     "literal": "10",
     "value": "10"
    },
    {
     "id": "s59",
     "say": "Score in tens",
     "op": "div",
     "args": [
      "s57",
      "s58"
     ],
     "value": "440223896997363739/5293558397470500"
    },
    {
     "id": "s60",
     "say": "Tens, rounded (half to even)",
     "op": "roundHalfEven",
     "args": [
      "s59"
     ],
     "value": "83"
    },
    {
     "id": "s61",
     "say": "Rounded to the nearest 10",
     "op": "mul",
     "args": [
      "s60",
      "s58"
     ],
     "key": true,
     "value": "830"
    }
   ],
   "result": "s61",
   "answer": "Quantitative Reasoning 830",
   "generated": "2026-10-06"
  }
 ]
}