// Numbas version: exam_results_page_options {"name": "Hamming distances", "extensions": [], "custom_part_types": [], "resources": [], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "question_groups": [{"pickingStrategy": "all-ordered", "questions": [{"name": "Hamming distances", "tags": [], "metadata": {"description": "

Short question to test encoding some random binary strings using repetition and parity bit. Randomised 5-bit strings.

", "licence": "None specified"}, "statement": "

A set of words in $\\mathbb{Z}_2^5$ is described below. You will be asked to encode them, calculate the minimum distance between code words, and describe how many errors can be detected or corrected.

\n

Encoding is described as follows:

\n\n

The set of words is $W = \\{ \\var{binstring1}, \\var{binstring2}, \\var{binstring3}, \\var{binstring4}\\}$.

", "advice": "

The minimum distance is the smallest non-zero value of $d(x,y)$ where $x$, $y \\in C$. Call this $m$.

\n

If the minimum distance of the code is $k$, then the code can detect up to $m-1$ errors.

\n

If the minimum distance of the code is $k$, then the code can correct up to $\\lfloor \\frac{m-1}{2} \\rfloor$.

", "rulesets": {}, "extensions": [], "builtin_constants": {"e": true, "pi,\u03c0": true, "i": true}, "constants": [], "variables": {"binstring1": {"name": "binstring1", "group": "Ungrouped variables", "definition": "tobinary(random(16..19))", "description": "", "templateType": "anything", "can_override": false}, "binstring2": {"name": "binstring2", "group": "Ungrouped variables", "definition": "tobinary(random(20..23))", "description": "", "templateType": "anything", "can_override": false}, "binstring3": {"name": "binstring3", "group": "Ungrouped variables", "definition": "tobinary(random(24..27))", "description": "", "templateType": "anything", "can_override": false}, "binstring4": {"name": "binstring4", "group": "Ungrouped variables", "definition": "tobinary(random(28..31))", "description": "", "templateType": "anything", "can_override": false}, "bins1": {"name": "bins1", "group": "Ungrouped variables", "definition": "map(dec(binstring1[k]),k,0..4)", "description": "", "templateType": "anything", "can_override": false}, "bins2": {"name": "bins2", "group": "Ungrouped variables", "definition": "map(dec(binstring2[k]),k,0..4)", "description": "", "templateType": "anything", "can_override": false}, "bins3": {"name": "bins3", "group": "Ungrouped variables", "definition": "map(dec(binstring3[k]),k,0..4)", "description": "", "templateType": "anything", "can_override": false}, "bins4": {"name": "bins4", "group": "Ungrouped variables", "definition": "map(dec(binstring4[k]),k,0..4)", "description": "", "templateType": "anything", "can_override": false}, "err12": {"name": "err12", "group": "Ungrouped variables", "definition": "sum(map(mod(dec(code1[k])+dec(code2[k]),2),k,0..10))", "description": "", "templateType": "anything", "can_override": false}, "err13": {"name": "err13", "group": "Ungrouped variables", "definition": "sum(map(mod(dec(code1[k])+dec(code3[k]),2),k,0..10))", "description": "", "templateType": "anything", "can_override": false}, "err14": {"name": "err14", "group": "Ungrouped variables", "definition": "sum(map(mod(dec(code1[k])+dec(code4[k]),2),k,0..10))", "description": "", "templateType": "anything", "can_override": false}, "err23": {"name": "err23", "group": "Ungrouped variables", "definition": "sum(map(mod(dec(code2[k])+dec(code3[k]),2),k,0..10))", "description": "", "templateType": "anything", "can_override": false}, "err24": {"name": "err24", "group": "Ungrouped variables", "definition": "sum(map(mod(dec(code2[k])+dec(code4[k]),2),k,0..10))", "description": "", "templateType": "anything", "can_override": false}, "err34": {"name": "err34", "group": "Ungrouped variables", "definition": "sum(map(mod(dec(code3[k])+dec(code4[k]),2),k,0..10))", "description": "", "templateType": "anything", "can_override": false}, "minerror": {"name": "minerror", "group": "Ungrouped variables", "definition": "min(errors)", "description": "", "templateType": "anything", "can_override": false}, "errors": {"name": "errors", "group": "Ungrouped variables", "definition": "[err12,err13,err14,err23,err24,err34]", "description": "", "templateType": "anything", "can_override": false}, "detect": {"name": "detect", "group": "Ungrouped variables", "definition": "if(minerror-1 < 0, 0, minerror -1)", "description": "", "templateType": "anything", "can_override": false}, "correct": {"name": "correct", "group": "Ungrouped variables", "definition": "if((minerror-1) < 0, 0, floor((minerror-1)/2))", "description": "", "templateType": "anything", "can_override": false}, "code1": {"name": "code1", "group": "Ungrouped variables", "definition": "bins1 + bins1 + par12", "description": "", "templateType": "anything", "can_override": false}, "code2": {"name": "code2", "group": "Ungrouped variables", "definition": "bins2 + bins2 + par22", "description": "", "templateType": "anything", "can_override": false}, "code3": {"name": "code3", "group": "Ungrouped variables", "definition": "bins3 + bins3 + par32", "description": "", "templateType": "anything", "can_override": false}, "code4": {"name": "code4", "group": "Ungrouped variables", "definition": "bins4 + bins4 + par42", "description": "", "templateType": "anything", "can_override": false}, "par12": {"name": "par12", "group": "Ungrouped variables", "definition": "mod(sum(bins1),2)", "description": "", "templateType": "anything", "can_override": false}, "par22": {"name": "par22", "group": "Ungrouped variables", "definition": "mod(sum(bins2),2)", "description": "", "templateType": "anything", "can_override": false}, "par32": {"name": "par32", "group": "Ungrouped variables", "definition": "mod(sum(bins3),2)", "description": "", "templateType": "anything", "can_override": false}, "par42": {"name": "par42", "group": "Ungrouped variables", "definition": "mod(sum(bins4),2)", "description": "", "templateType": "anything", "can_override": false}, "codes1": {"name": "codes1", "group": "Ungrouped variables", "definition": "map(string(code1[k]),k,0..10)", "description": "", "templateType": "anything", "can_override": false}, "codeword1": {"name": "codeword1", "group": "Ungrouped variables", "definition": "codes1[0] + codes1[1] + codes1[2] + codes1[3] + codes1[4] + codes1[5] + codes1[6] + codes1[7] + codes1[8] + codes1[9] + codes1[10]", "description": "", "templateType": "anything", "can_override": false}, "codeword2": {"name": "codeword2", "group": "Ungrouped variables", "definition": "codes2[0] + codes2[1] + codes2[2] + codes2[3] + codes2[4] + codes2[5] + codes2[6] + codes2[7] + codes2[8] + codes2[9] + codes2[10]", "description": "", "templateType": "anything", "can_override": false}, "codes2": {"name": "codes2", "group": "Ungrouped variables", "definition": "map(string(code2[k]),k,0..10)", "description": "", "templateType": "anything", "can_override": false}, "codes3": {"name": "codes3", "group": "Ungrouped variables", "definition": "map(string(code3[k]),k,0..10)", "description": "", "templateType": "anything", "can_override": false}, "codes4": {"name": "codes4", "group": "Ungrouped variables", "definition": "map(string(code4[k]),k,0..10)", "description": "", "templateType": "anything", "can_override": false}, "codeword3": {"name": "codeword3", "group": "Ungrouped variables", "definition": "codes3[0] + codes3[1] + codes3[2] + codes3[3] + codes3[4] + codes3[5] + codes3[6] + codes3[7] + codes3[8] + codes3[9] + codes3[10]", "description": "", "templateType": "anything", "can_override": false}, "codeword4": {"name": "codeword4", "group": "Ungrouped variables", "definition": "codes4[0] + codes4[1] + codes4[2] + codes4[3] + codes4[4] + codes4[5] + codes4[6] + codes4[7] + codes4[8] + codes4[9] + codes4[10]", "description": "", "templateType": "anything", "can_override": false}}, "variablesTest": {"condition": "", "maxRuns": 100}, "ungrouped_variables": ["binstring1", "binstring2", "binstring3", "binstring4", "bins1", "bins2", "bins3", "bins4", "err12", "err13", "err14", "err23", "err24", "err34", "minerror", "errors", "detect", "correct", "code1", "code2", "code3", "code4", "par12", "par22", "par32", "par42", "codes1", "codes2", "codes3", "codes4", "codeword1", "codeword2", "codeword3", "codeword4"], "variable_groups": [], "functions": {}, "preamble": {"js": "", "css": ""}, "parts": [{"type": "patternmatch", "useCustomName": false, "customName": "", "marks": 1, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Encode $\\var{binstring1}$.

", "answer": "{codeword1}", "displayAnswer": "", "matchMode": "exact"}, {"type": "patternmatch", "useCustomName": false, "customName": "", "marks": 1, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Encode $\\var{binstring2}$.

", "answer": "{codeword2}", "displayAnswer": "", "matchMode": "exact"}, {"type": "patternmatch", "useCustomName": false, "customName": "", "marks": 1, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Encode $\\var{binstring3}$.

", "answer": "{codeword3}", "displayAnswer": "", "matchMode": "exact"}, {"type": "patternmatch", "useCustomName": false, "customName": "", "marks": 1, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Encode $\\var{binstring4}$.

", "answer": "{codeword4}", "displayAnswer": "", "matchMode": "exact"}, {"type": "numberentry", "useCustomName": false, "customName": "", "marks": 1, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

What is the minimum distance between these code words? (The code words are the $11$-bit binary strings you have just found.)

", "minValue": "{minerror}", "maxValue": "{minerror}", "correctAnswerFraction": false, "allowFractions": false, "mustBeReduced": false, "mustBeReducedPC": 0, "showFractionHint": true, "notationStyles": ["plain", "en", "si-en"], "correctAnswerStyle": "plain"}, {"type": "numberentry", "useCustomName": false, "customName": "", "marks": 1, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

How many errors can this code detect?

", "minValue": "{detect}", "maxValue": "{detect}", "correctAnswerFraction": false, "allowFractions": false, "mustBeReduced": false, "mustBeReducedPC": 0, "showFractionHint": true, "notationStyles": ["plain", "en", "si-en"], "correctAnswerStyle": "plain"}, {"type": "numberentry", "useCustomName": false, "customName": "", "marks": 1, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

How many errors can this code correct?

", "minValue": "{correct}", "maxValue": "{correct}", "correctAnswerFraction": false, "allowFractions": false, "mustBeReduced": false, "mustBeReducedPC": 0, "showFractionHint": true, "notationStyles": ["plain", "en", "si-en"], "correctAnswerStyle": "plain"}], "partsMode": "all", "maxMarks": 0, "objectives": [], "penalties": [], "objectiveVisibility": "always", "penaltyVisibility": "always", "contributors": [{"name": "Alexander Corner", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/5328/"}]}]}], "contributors": [{"name": "Alexander Corner", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/5328/"}]}