// Numbas version: finer_feedback_settings
{"name": "Centroid of parts", "extensions": ["geogebra", "sheets", "quantities"], "custom_part_types": [{"source": {"pk": 242, "author": {"name": "Christian Lawson-Perfect", "pk": 7}, "edit_page": "/part_type/242/edit"}, "name": "Spreadsheet", "short_name": "spreadsheet", "description": "
An editable spreadsheet. Ranges of cells can be disabled, and you can specify ranges of cells to be marked. A cell is marked correct if its value is equal to the value in the expected answer spreadsheet.
", "help_url": "", "input_widget": "spread-sheet", "input_options": {"correctAnswer": "settings[\"correct_answer\"]", "hint": {"static": true, "value": ""}, "initial_sheet": {"static": false, "value": "disable_cells(settings[\"initial_sheet\"], settings[\"disable_ranges\"])"}}, "can_be_gap": true, "can_be_step": true, "marking_script": "mark:\nif(sum(mark_ranges)=0,\n incorrect(),\n apply(mark_ranges)\n)\n\ninterpreted_answer:\nstudentAnswer\n\nrange_cells:\nmap(parse_range(ref),ref,values(settings[\"mark_ranges\"]))\n\ntotal_cells:\nlen(flatten(range_cells))\n\nrange_weights:\nswitch(\n settings[\"marking_method\"]=\"per_cell\",\n map(len(r)/total_cells, r, range_cells),\n // otherwise, mark per range\n repeat(1/len(range_cells), len(range_cells))\n)\n\nmark_ranges:\nmap(\n let(\n range_credit,\n sum(map(\n let(\n correctCellString, correctAnswer[c],\n correctCellNumber, parsenumber(correctCellString, notation_styles),\n studentCellString, studentAnswer[c],\n studentCellNumber, parsenumber(studentCellString, notation_styles),\n award(\n 1/len(cells), \n switch(\n correctCellString=\"\",\n isnan(studentCellNumber) or studentCellString=\"\",\n isnan(correctCellNumber),\n lower(correctCellString) = lower(studentCellString)\n ,\n abs(studentCellNumber - if(isnan(correctCellNumber),0,correctCellNumber)) <= settings[\"tolerance\"]\n )\n )\n ),\n c,\n cells\n )),\n message,\n switch(\n range_credit=0,\n if(len(cells)=1, \"This entry is incorrect.\", \"All entries in this range are incorrect.\"),\n range_credit=1,\n if(len(cells)=1, \"This entry is correct.\", \"All entries in this range are correct.\"),\n //otherwise\n \"Some entries in this range are correct.\"\n ),\n assert(len(cells)=0, add_credit(range_credit*w, \"{name}: \"+message)); \n range_credit\n ),\n [cells,w,name],\n zip(range_cells, range_weights, keys(settings[\"mark_ranges\"]))\n)\n\nnotation_styles:\n[\"plain\",\"si-en\"]\n\ncorrectAnswer:\nsettings[\"correct_answer\"]", "marking_notes": [{"name": "mark", "description": "This is the main marking note. It should award credit and provide feedback based on the student's answer.", "definition": "if(sum(mark_ranges)=0,\n incorrect(),\n apply(mark_ranges)\n)"}, {"name": "interpreted_answer", "description": "A value representing the student's answer to this part.", "definition": "studentAnswer"}, {"name": "range_cells", "description": "For each range to be marked, the addresses of the cells in that range.
", "definition": "map(parse_range(ref),ref,values(settings[\"mark_ranges\"]))"}, {"name": "total_cells", "description": "The total number of cells to be marked. Cells in overlapping ranges will be counted once for each range they're in.
", "definition": "len(flatten(range_cells))"}, {"name": "range_weights", "description": "The weight of each range, as a proportion of the available credit.
", "definition": "switch(\n settings[\"marking_method\"]=\"per_cell\",\n map(len(r)/total_cells, r, range_cells),\n // otherwise, mark per range\n repeat(1/len(range_cells), len(range_cells))\n)"}, {"name": "mark_ranges", "description": "Mark each of the ranges specified by the question author.
", "definition": "map(\n let(\n range_credit,\n sum(map(\n let(\n correctCellString, correctAnswer[c],\n correctCellNumber, parsenumber(correctCellString, notation_styles),\n studentCellString, studentAnswer[c],\n studentCellNumber, parsenumber(studentCellString, notation_styles),\n award(\n 1/len(cells), \n switch(\n correctCellString=\"\",\n isnan(studentCellNumber) or studentCellString=\"\",\n isnan(correctCellNumber),\n lower(correctCellString) = lower(studentCellString)\n ,\n abs(studentCellNumber - if(isnan(correctCellNumber),0,correctCellNumber)) <= settings[\"tolerance\"]\n )\n )\n ),\n c,\n cells\n )),\n message,\n switch(\n range_credit=0,\n if(len(cells)=1, \"This entry is incorrect.\", \"All entries in this range are incorrect.\"),\n range_credit=1,\n if(len(cells)=1, \"This entry is correct.\", \"All entries in this range are correct.\"),\n //otherwise\n \"Some entries in this range are correct.\"\n ),\n assert(len(cells)=0, add_credit(range_credit*w, \"{name}: \"+message)); \n range_credit\n ),\n [cells,w,name],\n zip(range_cells, range_weights, keys(settings[\"mark_ranges\"]))\n)"}, {"name": "notation_styles", "description": "Accepted number notation styles for a value in an individual cell.
", "definition": "[\"plain\",\"si-en\"]"}, {"name": "correctAnswer", "description": "", "definition": "settings[\"correct_answer\"]"}], "settings": [{"name": "initial_sheet", "label": "Initial sheet", "help_url": "", "hint": "A spreadsheet object giving the initial state of the sheet that the student should fill in.", "input_type": "code", "default_value": "", "evaluate": true}, {"name": "correct_answer", "label": "Correct answer", "help_url": "", "hint": "A spreadsheet object representing a correct answer to the part.", "input_type": "code", "default_value": "", "evaluate": true}, {"name": "disable_ranges", "label": "Ranges to disable", "help_url": "", "hint": "A list of cell or range references, denoting the cells that should not be editable.", "input_type": "code", "default_value": "[]", "evaluate": true}, {"name": "mark_ranges", "label": "Ranges to mark", "help_url": "", "hint": "A dictionary of cell or range references, mapping names to ranges of cells, denoting the cells that should be compared for equality with the expected answer.", "input_type": "code", "default_value": "dict()", "evaluate": true}, {"name": "marking_method", "label": "Marking method", "help_url": "", "hint": "", "input_type": "dropdown", "default_value": "per_cell", "choices": [{"value": "per_cell", "label": "Each cell has the same weight"}, {"value": "per_range", "label": "Each range has the same weight"}]}, {"name": "tolerance", "label": "Allowed margin of error", "help_url": "", "hint": "", "input_type": "code", "default_value": "0", "evaluate": true}], "public_availability": "always", "published": true, "extensions": ["sheets"]}], "resources": [["question-resources/centroids.png", "centroids.png"], ["question-resources/centroids_3A0rXlj.png", "centroids_3A0rXlj.png"], ["question-resources/centroids_zSOgoBb.png", "centroids_zSOgoBb.png"]], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "question_groups": [{"pickingStrategy": "all-ordered", "questions": [{"name": "Centroid of parts", "tags": [], "metadata": {"description": "Locate the centroid of a rectangle, triangle, and semi-circle on a coordinate grid.
", "licence": "Creative Commons Attribution-NonCommercial 4.0 International"}, "statement": "Fill the table with the coordinates of the centroids of the three shapes. Grid units are $[\\var{units}]$.
\n{applet}
\n{answer_table}
", "advice": "For a rectangle, the centroid is at the geometric center.
\nFor a right triangle, divide the base and height into thirds. The centroid is located at the intersection point nearest to the right angle.
\nFor a semicircle, the centroid is located on the axis of symmetry, a distance of $\\frac{4r}{3\\pi}$ from the straight edge.
\n\n
", "rulesets": {}, "extensions": ["geogebra", "quantities", "sheets"], "builtin_constants": {"e": true, "pi,\u03c0": true, "i": true, "j": false}, "constants": [], "variables": {"CC": {"name": "CC", "group": "Ungrouped variables", "definition": "C1 + (C2-C1) 4 / 3 / 3.14159", "description": "", "templateType": "anything", "can_override": false}, "C2": {"name": "C2", "group": "inputs", "definition": "random(\n vector(C1[0],c1[1]+random(-6..6)),\n vector(C1[0]+random(-6..6),C1[1]))\n \n \n \n ", "description": "", "templateType": "anything", "can_override": false}, "TC": {"name": "TC", "group": "Ungrouped variables", "definition": "T1 + (T2-T1)/3", "description": "", "templateType": "anything", "can_override": false}, "T1": {"name": "T1", "group": "inputs", "definition": "vector(random(-10..10),random(-8..8))", "description": "", "templateType": "anything", "can_override": false}, "T2": {"name": "T2", "group": "inputs", "definition": "vector(random(-10..10),random(-8..8))", "description": "", "templateType": "anything", "can_override": false}, "C1": {"name": "C1", "group": "inputs", "definition": "vector(random(-10..10),random(-8..8))\n", "description": "", "templateType": "anything", "can_override": false}, "debug": {"name": "debug", "group": "Ungrouped variables", "definition": "false", "description": "", "templateType": "anything", "can_override": false}, "R1": {"name": "R1", "group": "inputs", "definition": "vector(random(-10..10),random(-8..8))", "description": "", "templateType": "anything", "can_override": false}, "R2": {"name": "R2", "group": "inputs", "definition": "vector(random(-10..10),random(-8..8))", "description": "", "templateType": "anything", "can_override": false}, "units": {"name": "units", "group": "Ungrouped variables", "definition": "random('in','cm','mm','ft')", "description": "", "templateType": "anything", "can_override": false}, "RC": {"name": "RC", "group": "Ungrouped variables", "definition": "R1 + (R2-R1)/2", "description": "", "templateType": "anything", "can_override": false}, "centroid_table": {"name": "centroid_table", "group": "Ungrouped variables", "definition": "spreadsheet_from_base64_file(safe(\"centroid_table-2.xlsx\"), safe(\"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\"))", "description": "", "templateType": "spreadsheet", "can_override": false}, "answer_table": {"name": "answer_table", "group": "Ungrouped variables", "definition": "fill_range(centroid_table,\"B2:C4\", [dist(RC),dist(TC),dist(CC)])", "description": "table filled with centroid coordinates
", "templateType": "anything", "can_override": false}, "dist": {"name": "dist", "group": "Ungrouped variables", "definition": "//(V) -> [siground(qty(V[0], units),3),siground(qty(V[1], units),3)]\n(V) -> [siground(V[0],3),siground(V[1],3)]", "description": "input vector, output rounded vector of quantities
", "templateType": "anything", "can_override": false}, "params": {"name": "params", "group": "inputs", "definition": "[['R_1',R1],['R_2',R2],['T_1',T1],['T_2',T2],['C_1',C1],['C_2',C2]]", "description": "", "templateType": "anything", "can_override": false}, "applet": {"name": "applet", "group": "inputs", "definition": "geogebra_applet('xjjm7qqr',params)", "description": "", "templateType": "anything", "can_override": false}}, "variablesTest": {"condition": "(R1-R2)[0] >= 2 and (R1-R2)[1] >= 2 and \n(T1-T2)[0] >= 2 and (T1-T2)[1] >= 2 and \nC1<>C2 and abs(C1-C2) > 2\n\n", "maxRuns": "200"}, "ungrouped_variables": ["units", "RC", "TC", "CC", "debug", "centroid_table", "answer_table", "dist"], "variable_groups": [{"name": "inputs", "variables": ["R1", "R2", "T1", "T2", "C1", "C2", "params", "applet"]}], "functions": {}, "preamble": {"js": "", "css": ""}, "parts": [{"type": "spreadsheet", "useCustomName": false, "customName": "", "marks": "30", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "Don't include units in table values.
", "settings": {"initial_sheet": "centroid_table", "correct_answer": "answer_table", "disable_ranges": "[\"A1:C1\", \"A1:A4\"]", "mark_ranges": "[\"Rectangle\": \"B2:C2\", \"Triangle\": \"B3:C3\", \"Circle\": \"B4:C4\"]", "marking_method": "per_cell", "tolerance": "0.1"}}], "partsMode": "all", "maxMarks": 0, "objectives": [], "penalties": [], "objectiveVisibility": "always", "penaltyVisibility": "always", "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "resources": ["question-resources/centroids.png", "question-resources/centroids_3A0rXlj.png", "question-resources/centroids_zSOgoBb.png"]}]}], "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}]}