A problem was reported through the Runestone "Report a Problem" form.
I'm using Runestone through Canvas/LTI for a Data Structures and Algorithms course. The student entered the correct answer and Runestone displays “Correct,” but the question still shows 0.0 / 1 with the scoring method set to Best Answer.
I've been seeing this with some of the quick-check/book exercises, and it is causing incorrect assignment scores to be passed back to Canvas.
Has anyone experienced this or found a setting/workaround that fixes it?
[info] sagecell.makeSagecell called
[info] sagecell.makeSagecell finished
[log] {}
[log] [{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Implementing a Stack in Python","chapter_chapter_num":5,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"ungraded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone explainer ac_section \">\n <div data-component=\"activecode\" id=\"pswadsup_4_stack_ex_1\">\n <textarea data-lang=\"python\" data-audio=\"\" data-coach=\"true\" style=\"visibility: hidden;\" id=\"pswadsup_4_stack_ex_1_editor\" data-question_label=\"\" data-codelens=\"true\" data-timelimit=\"25000\">from pythonds3.basic import Stack\n\ns = Stack()\n\nprint(s.is_empty())\ns.push(4)\ns.push(\"dog\")\nprint(s.peek())\ns.push(True)\nprint(s.size())\nprint(s.is_empty())\ns.push(8.4)\nprint(s.pop())\nprint(s.pop())\nprint(s.size())\n</textarea>\n </div>\n </div>\n </div>\n ","is_incorrect":false,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_stack_ex_1","points":1,"qnumber":"ActiveCode","question_type":"activecode","readings":[],"score":0,"sub_chapter_label":"basic-ds_implementing-a-stack-in-python"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Implementing a Stack in Python","chapter_chapter_num":5,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"ungraded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone explainer ac_section \">\n <div data-component=\"activecode\" id=\"pswadsup_4_stack_stringrev\">\n <textarea data-lang=\"python\" data-audio=\"\" data-coach=\"true\" style=\"visibility: hidden;\" id=\"pswadsup_4_stack_stringrev_editor\" data-question_label=\"\" data-codelens=\"true\" data-timelimit=\"25000\">from test import testEqual\nfrom pythonds3.basic import Stack\n\ndef rev_string(my_str):\n # your code here\n\ntestEqual(rev_string(\"apple\"), \"elppa\")\ntestEqual(rev_string(\"x\"), \"x\")\ntestEqual(rev_string(\"1234567890\"), \"0987654321\")\n</textarea>\n </div>\n </div>\n </div>\n ","is_incorrect":false,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_stack_stringrev","points":1,"qnumber":"ActiveCode","question_type":"activecode","readings":[],"score":0,"sub_chapter_label":"basic-ds_implementing-a-stack-in-python"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Implementing a Stack in Python","chapter_chapter_num":5,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"ungraded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone explainer ac_section \">\n <div data-component=\"activecode\" id=\"pswadsup_4_lst-stackcode1\">\n <textarea data-lang=\"python\" data-audio=\"\" data-coach=\"true\" style=\"visibility: hidden;\" id=\"pswadsup_4_lst-stackcode1_editor\" data-question_label=\"\" data-codelens=\"true\" data-timelimit=\"25000\">class Stack:\n \"\"\"Stack implementation as a list\"\"\"\n\n def __init__(self):\n \"\"\"Create new stack\"\"\"\n self._items = []\n\n def is_empty(self):\n \"\"\"Check if the stack is empty\"\"\"\n return not bool(self._items)\n\n def push(self, item):\n \"\"\"Add an item to the stack\"\"\"\n self._items.append(item)\n\n def pop(self):\n \"\"\"Remove an item from the stack\"\"\"\n return self._items.pop()\n\n def peek(self):\n \"\"\"Get the value of the top item in the stack\"\"\"\n return self._items[-1]\n\n def size(self):\n \"\"\"Get the number of items in the stack\"\"\"\n return len(self._items)\n</textarea>\n </div>\n </div>\n </div>\n ","is_incorrect":false,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_lst-stackcode1","points":1,"qnumber":"ActiveCode: Listing 3.5.1","question_type":"activecode","readings":[],"score":0,"sub_chapter_label":"basic-ds_implementing-a-stack-in-python"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Implementing a Stack in Python","chapter_chapter_num":5,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"autograded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone multiplechoice_section\">\n <div class=\"exercise-statement\">\n<div class=\"para\" id=\"stack_1-1-1\">Q-4: Given the following sequence of stack operations, what is the top item on the stack when the sequence is complete?<div class=\"autopermalink\" aria-hidden=\"true\" data-description=\"Paragraph\"><a tabindex=\"-1\" href=\"#stack_1-1-1\" title=\"Copy heading and permalink for Paragraph\" aria-label=\"Copy heading and permalink for Paragraph\">🔗</a></div></div> <div class=\"code-box\"><pre class=\"program clipboardable\"><code class=\"language-py\">m = Stack()\nm.push(\"x\")\nm.push(\"y\")\nm.pop()\nm.push(\"z\")\nm.peek()\n</code></pre></div></div>\n <ul data-component=\"multiplechoice\" class=\"exercise-interactives\" id=\"pswadsup_4_stack_1\" data-multipleanswers=\"false\">\n <li data-component=\"answer\" id=\"pswadsup_4_stack_1_opt_a\">\n<div class=\"para\" id=\"stack_1-2-1-1-1\">\"x\"</div></li>\n <li data-component=\"feedback\" id=\"pswadsup_4_stack_1_opt_a\">\n<div class=\"para\" id=\"stack_1-2-1-2-1\">Remember that a stack is built from the bottom up.</div></li>\n <li data-component=\"answer\" id=\"pswadsup_4_stack_1_opt_b\">\n<div class=\"para\" id=\"stack_1-2-2-1-1\">\"y\"</div></li>\n <li data-component=\"feedback\" id=\"pswadsup_4_stack_1_opt_b\">\n<div class=\"para\" id=\"stack_1-2-2-2-1\">Remember that a stack is built from the bottom up.</div></li>\n <li data-component=\"answer\" id=\"pswadsup_4_stack_1_opt_c\" data-correct=\"\">\n<div class=\"para\" id=\"stack_1-2-3-1-1\">\"z\"</div></li>\n <li data-component=\"feedback\" id=\"pswadsup_4_stack_1_opt_c\">\n<div class=\"para\" id=\"stack_1-2-3-2-1\">Good job.</div></li>\n <li data-component=\"answer\" id=\"pswadsup_4_stack_1_opt_d\">\n<div class=\"para\" id=\"stack_1-2-4-1-1\">The stack is empty</div></li>\n <li data-component=\"feedback\" id=\"pswadsup_4_stack_1_opt_d\">\n<div class=\"para\" id=\"stack_1-2-4-2-1\">Remember that a stack is built from the bottom up.</div></li>\n </ul>\n </div>\n </div>\n ","is_incorrect":false,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_stack_1","points":1,"qnumber":"Exercise 3.5.1 ","question_type":"mchoice","readings":[],"score":1,"sub_chapter_label":"basic-ds_implementing-a-stack-in-python"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Implementing a Stack in Python","chapter_chapter_num":5,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"autograded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone multiplechoice_section\">\n <div class=\"exercise-statement\">\n<div class=\"para\" id=\"stack_2-1-1\">Q-5: Given the following sequence of stack operations, what is the top item on the stack when the sequence is complete?<div class=\"autopermalink\" aria-hidden=\"true\" data-description=\"Paragraph\"><a tabindex=\"-1\" href=\"#stack_2-1-1\" title=\"Copy heading and permalink for Paragraph\" aria-label=\"Copy heading and permalink for Paragraph\">🔗</a></div></div> <div class=\"code-box\"><pre class=\"program clipboardable\"><code class=\"language-py\">m = Stack()\nm.push(\"x\")\nm.push(\"y\")\nm.push(\"z\")\nwhile not m.is_empty():\n m.pop()\n m.pop()\n</code></pre></div></div>\n <ul data-component=\"multiplechoice\" class=\"exercise-interactives\" id=\"pswadsup_4_stack_2\" data-multipleanswers=\"false\">\n <li data-component=\"answer\" id=\"pswadsup_4_stack_2_opt_a\">\n<div class=\"para\" id=\"stack_2-2-1-1-1\">\"x\"</div></li>\n <li data-component=\"feedback\" id=\"pswadsup_4_stack_2_opt_a\">\n<div class=\"para\" id=\"stack_2-2-1-2-1\">You may want to check out the docs for isEmpty</div></li>\n <li data-component=\"answer\" id=\"pswadsup_4_stack_2_opt_b\">\n<div class=\"para\" id=\"stack_2-2-2-1-1\">the stack is empty</div></li>\n <li data-component=\"feedback\" id=\"pswadsup_4_stack_2_opt_b\">\n<div class=\"para\" id=\"stack_2-2-2-2-1\">There is an odd number of things on the stack but each time through the loop 2 things are popped.</div></li>\n <li data-component=\"answer\" id=\"pswadsup_4_stack_2_opt_c\" data-correct=\"\">\n<div class=\"para\" id=\"stack_2-2-3-1-1\">an error will occur</div></li>\n <li data-component=\"feedback\" id=\"pswadsup_4_stack_2_opt_c\">\n<div class=\"para\" id=\"stack_2-2-3-2-1\">Good Job.</div></li>\n <li data-component=\"answer\" id=\"pswadsup_4_stack_2_opt_d\">\n<div class=\"para\" id=\"stack_2-2-4-1-1\">\"z\"</div></li>\n <li data-component=\"feedback\" id=\"pswadsup_4_stack_2_opt_d\">\n<div class=\"para\" id=\"stack_2-2-4-2-1\">You may want to check out the docs for isEmpty</div></li>\n </ul>\n </div>\n </div>\n ","is_incorrect":false,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_stack_2","points":1,"qnumber":"Exercise 3.5.2 ","question_type":"mchoice","readings":[],"score":1,"sub_chapter_label":"basic-ds_implementing-a-stack-in-python"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Implementing a Stack in Python","chapter_chapter_num":5,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"ungraded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone yt_section\">\n <div id=\"pswadsup_4_stack1_video\" data-component=\"youtube\" class=\"align-left youtube-video\" data-video-height=\"\" data-video-width=\"\" data-video-videoid=\"fZtLSM7k_54\" data-video-divid=\"pswadsup_4_stack1_video\" data-video-start=\"0\" data-video-end=\"-1\"/>\n </div>\n </div>\n ","is_incorrect":false,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_stack1_video","points":1,"qnumber":"Video: fZtLSM7k_54","question_type":"youtube","readings":[],"score":0,"sub_chapter_label":"basic-ds_implementing-a-stack-in-python"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Simple Balanced Parentheses","chapter_chapter_num":6,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"ungraded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone explainer ac_section \">\n <div data-component=\"activecode\" id=\"pswadsup_4_lst-parcheck1\">\n <textarea data-lang=\"python\" data-audio=\"\" data-coach=\"true\" style=\"visibility: hidden;\" id=\"pswadsup_4_lst-parcheck1_editor\" data-question_label=\"\" data-codelens=\"true\" data-timelimit=\"25000\">from pythonds3.basic import Stack\n\n\ndef par_checker(symbol_string):\n s = Stack()\n for symbol in symbol_string:\n if symbol == \"(\":\n s.push(symbol)\n else:\n if s.is_empty():\n return False\n else:\n s.pop()\n\n return s.is_empty()\n\n\nprint(par_checker(\"((()))\")) # expected True\nprint(par_checker(\"((()()))\")) # expected True\nprint(par_checker(\"(()\")) # expected False\nprint(par_checker(\")(\")) # expected False\n</textarea>\n </div>\n </div>\n </div>\n ","is_incorrect":false,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_lst-parcheck1","points":1,"qnumber":"ActiveCode: Listing 3.6.2","question_type":"activecode","readings":[],"score":0,"sub_chapter_label":"basic-ds_simple-balanced-parentheses"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Converting Decimal Numbers to Binary Numbers","chapter_chapter_num":8,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"autograded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone fillintheblank_section\">\n <div data-component=\"fillintheblank\" data-question_label=\"\" id=\"pswadsup_4_baseconvert1\">\n<div class=\"para\" id=\"baseconvert1-1-1\">Q-3: What is value of 25 expressed as an octal number? <input type=\"text\" placeholder=\"Number\"/><div class=\"autopermalink\" aria-hidden=\"true\" data-description=\"Paragraph\"><a tabindex=\"-1\" href=\"/ns/books/published/pswadsup/#baseconvert1-1-1\" title=\"Copy heading and permalink for Paragraph\" aria-label=\"Copy heading and permalink for Paragraph\">🔗</a></div></div><script type=\"application/json\">[[{\"number\": [[31, 31], [31, 31]], \"feedback\": \"\\n<div class=\\\"para\\\" id=\\\"baseconvert1-2-1-2-1-1\\\">Correct.<\\/div>\"}]]</script></div>\n </div>\n </div>\n ","is_incorrect":true,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_baseconvert1","points":1,"qnumber":"Exercise 3.8.1 ","question_type":"fillintheblank","readings":[],"score":0,"sub_chapter_label":"basic-ds_converting-decimal-numbers-to-binary-numbers"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Converting Decimal Numbers to Binary Numbers","chapter_chapter_num":8,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"autograded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone fillintheblank_section\">\n <div data-component=\"fillintheblank\" data-question_label=\"\" id=\"pswadsup_4_baseconvert2\">\n<div class=\"para\" id=\"baseconvert2-1-1\">Q-4: What is value of 256 expressed as a hexidecimal number? <input type=\"text\" placeholder=\"Number\"/><div class=\"autopermalink\" aria-hidden=\"true\" data-description=\"Paragraph\"><a tabindex=\"-1\" href=\"/ns/books/published/pswadsup/#baseconvert2-1-1\" title=\"Copy heading and permalink for Paragraph\" aria-label=\"Copy heading and permalink for Paragraph\">🔗</a></div></div><script type=\"application/json\">[[{\"number\": [[100, 100], [100, 100]], \"feedback\": \"\\n<div class=\\\"para\\\" id=\\\"baseconvert2-2-1-2-1-1\\\">Correct.<\\/div>\"}]]</script></div>\n </div>\n </div>\n ","is_incorrect":true,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_baseconvert2","points":1,"qnumber":"Exercise 3.8.2 ","question_type":"fillintheblank","readings":[],"score":0,"sub_chapter_label":"basic-ds_converting-decimal-numbers-to-binary-numbers"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Converting Decimal Numbers to Binary Numbers","chapter_chapter_num":8,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"autograded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone fillintheblank_section\">\n <div data-component=\"fillintheblank\" data-question_label=\"\" id=\"pswadsup_4_baseconvert3\">\n<div class=\"para\" id=\"baseconvert3-1-1\">Q-5: What is value of 26 expressed in base 26? <input type=\"text\" placeholder=\"Number\"/><div class=\"autopermalink\" aria-hidden=\"true\" data-description=\"Paragraph\"><a tabindex=\"-1\" href=\"/ns/books/published/pswadsup/#baseconvert3-1-1\" title=\"Copy heading and permalink for Paragraph\" aria-label=\"Copy heading and permalink for Paragraph\">🔗</a></div></div><script type=\"application/json\">[[{\"number\": [[10, 10], [10, 10]], \"feedback\": \"\\n<div class=\\\"para\\\" id=\\\"baseconvert3-2-1-2-1-1\\\">Correct.<\\/div>\"}]]</script></div>\n </div>\n </div>\n ","is_incorrect":true,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_baseconvert3","points":1,"qnumber":"Exercise 3.8.3 ","question_type":"fillintheblank","readings":[],"score":0,"sub_chapter_label":"basic-ds_converting-decimal-numbers-to-binary-numbers"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Converting Decimal Numbers to Binary Numbers","chapter_chapter_num":8,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"ungraded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone yt_section\">\n <div id=\"pswadsup_4_video_Stack2\" data-component=\"youtube\" class=\"align-left youtube-video\" data-video-height=\"\" data-video-width=\"\" data-video-videoid=\"Q6B8k8INeq8\" data-video-divid=\"pswadsup_4_video_Stack2\" data-video-start=\"0\" data-video-end=\"-1\"/>\n </div>\n </div>\n ","is_incorrect":false,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_video_Stack2","points":1,"qnumber":"Video: Q6B8k8INeq8","question_type":"youtube","readings":[],"score":0,"sub_chapter_label":"basic-ds_converting-decimal-numbers-to-binary-numbers"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Infix, Prefix, and Postfix Expressions","chapter_chapter_num":9,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"ungraded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone explainer ac_section \">\n <div data-component=\"activecode\" id=\"pswadsup_4_lst-intopost\">\n <textarea data-lang=\"python\" data-audio=\"\" data-coach=\"true\" style=\"visibility: hidden;\" id=\"pswadsup_4_lst-intopost_editor\" data-question_label=\"\" data-codelens=\"true\" data-timelimit=\"25000\">from pythonds3.basic import Stack\n\ndef infix_to_postfix(infix_expr):\n prec = {}\n prec[\"*\"] = 3\n prec[\"/\"] = 3\n prec[\"+\"] = 2\n prec[\"-\"] = 2\n prec[\"(\"] = 1\n op_stack = Stack()\n postfix_list = []\n token_list = infix_expr.split()\n\n for token in token_list:\n if token in \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" or token in \"0123456789\":\n postfix_list.append(token)\n elif token == \"(\":\n op_stack.push(token)\n elif token == \")\":\n top_token = op_stack.pop()\n while top_token != \"(\":\n postfix_list.append(top_token)\n top_token = op_stack.pop()\n else:\n while (not op_stack.is_empty()) and (prec[op_stack.peek()] >= prec[token]):\n postfix_list.append(op_stack.pop())\n op_stack.push(token)\n\n while not op_stack.is_empty():\n postfix_list.append(op_stack.pop())\n\n return \" \".join(postfix_list)\n\nprint(infix_to_postfix(\"A * B + C * D\"))\nprint(infix_to_postfix(\"( A + B ) * C - ( D - E ) * ( F + G )\"))\n</textarea>\n </div>\n </div>\n </div>\n ","is_incorrect":false,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_lst-intopost","points":1,"qnumber":"ActiveCode: Listing 3.9.8","question_type":"activecode","readings":[],"score":0,"sub_chapter_label":"basic-ds_infix-prefix-and-postfix-expressions"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Infix, Prefix, and Postfix Expressions","chapter_chapter_num":9,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"ungraded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone explainer ac_section \">\n <div data-component=\"activecode\" id=\"pswadsup_4_lst-postfixeval\">\n <textarea data-lang=\"python\" data-audio=\"\" data-coach=\"true\" style=\"visibility: hidden;\" id=\"pswadsup_4_lst-postfixeval_editor\" data-question_label=\"\" data-codelens=\"true\" data-timelimit=\"25000\">from pythonds3.basic import Stack\n\ndef postfix_eval(postfix_expr):\n operand_stack = Stack()\n token_list = postfix_expr.split()\n\n for token in token_list:\n if token in \"0123456789\":\n operand_stack.push(int(token))\n else:\n operand2 = operand_stack.pop()\n operand1 = operand_stack.pop()\n result = do_math(token, operand1, operand2)\n operand_stack.push(result)\n return operand_stack.pop()\n\n\ndef do_math(op, op1, op2):\n if op == \"*\":\n return op1 * op2\n elif op == \"/\":\n return op1 / op2\n elif op == \"+\":\n return op1 + op2\n else:\n return op1 - op2\n\n\nprint(postfix_eval(\"7 8 + 3 2 + /\"))\n</textarea>\n </div>\n </div>\n </div>\n ","is_incorrect":false,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_lst-postfixeval","points":1,"qnumber":"ActiveCode: Listing 3.9.11","question_type":"activecode","readings":[],"score":0,"sub_chapter_label":"basic-ds_infix-prefix-and-postfix-expressions"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Infix, Prefix, and Postfix Expressions","chapter_chapter_num":9,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"ungraded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone fillintheblank_section\">\n <div data-component=\"fillintheblank\" data-question_label=\"\" id=\"pswadsup_4_postfix1\">\n<div class=\"para\" id=\"postfix1-1-1\">Q-3: Without using the activecode <code class=\"code-inline tex2jax_ignore\">infix_to_postfix</code> function, convert the following expression to postfix <code class=\"code-inline tex2jax_ignore\">10 + 3 * 5 / (16 - 4)</code> . <input type=\"text\" placeholder=\"Text\"/><div class=\"autopermalink\" aria-hidden=\"true\" data-description=\"Paragraph\"><a tabindex=\"-1\" href=\"/ns/books/published/pswadsup/#postfix1-1-1\" title=\"Copy heading and permalink for Paragraph\" aria-label=\"Copy heading and permalink for Paragraph\">🔗</a></div></div><script type=\"application/json\">[[{\"regex\": \"^\\\\s*^\\\\s*10\\\\s+3\\\\s+5\\\\s*\\\\*\\\\s*16\\\\s+4\\\\s*-\\\\s*\\/\\\\s*\\\\+\\\\s*$\\\\s*$\", \"regexFlags\": \"\", \"feedback\": \"\\n<div class=\\\"para\\\" id=\\\"postfix1-2-1-2-1-1\\\">Correct.<\\/div>\"}, {\"regex\": \"^\\\\s*^\\\\s*10.*3.*5.*16.*4\\\\s+[\\\\s+\\/+*-]*\\\\s*$\\\\s*$\", \"regexFlags\": \"\", \"feedback\": \"\\n<div class=\\\"para\\\" id=\\\"postfix1-2-1-3-1-1\\\">The numbers appear to be in the correct order check your operators<\\/div>\"}]]</script></div>\n </div>\n </div>\n ","is_incorrect":false,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_postfix1","points":1,"qnumber":"Exercise 3.9.3.1 ","question_type":"fillintheblank","readings":[],"score":0,"sub_chapter_label":"basic-ds_infix-prefix-and-postfix-expressions"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Implementing a Queue in Python","chapter_chapter_num":12,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"ungraded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone multiplechoice_section\">\n <div class=\"exercise-statement\">\n<div class=\"para\" id=\"queue_1-1-1\">Q-2: Suppose you have the following series of queue operations.<div class=\"autopermalink\" aria-hidden=\"true\" data-description=\"Paragraph\"><a tabindex=\"-1\" href=\"#queue_1-1-1\" title=\"Copy heading and permalink for Paragraph\" aria-label=\"Copy heading and permalink for Paragraph\">🔗</a></div></div><pre class=\"code-block tex2jax_ignore clipboardable\">q = Queue()\nq.enqueue(\"hello\")\nq.enqueue(\"dog\")\nq.enqueue(3)\nq.dequeue()\n</pre>\n<div class=\"para\" id=\"queue_1-1-3\">What items are left on the queue?<div class=\"autopermalink\" aria-hidden=\"true\" data-description=\"Paragraph\"><a tabindex=\"-1\" href=\"#queue_1-1-3\" title=\"Copy heading and permalink for Paragraph\" aria-label=\"Copy heading and permalink for Paragraph\">🔗</a></div></div></div>\n <ul data-component=\"multiplechoice\" class=\"exercise-interactives\" id=\"pswadsup_4_queue_1\" data-multipleanswers=\"false\">\n <li data-component=\"answer\" id=\"pswadsup_4_queue_1_opt_a\">\n<div class=\"para\" id=\"queue_1-2-1-1-1\">’hello’, ’dog’</div></li>\n <li data-component=\"feedback\" id=\"pswadsup_4_queue_1_opt_a\">\n<div class=\"para\" id=\"queue_1-2-1-2-1\">Remember the first thing added to the queue is the first thing removed. FIFO</div></li>\n <li data-component=\"answer\" id=\"pswadsup_4_queue_1_opt_b\" data-correct=\"\">\n<div class=\"para\" id=\"queue_1-2-2-1-1\">’dog’, 3</div></li>\n <li data-component=\"feedback\" id=\"pswadsup_4_queue_1_opt_b\">\n<div class=\"para\" id=\"queue_1-2-2-2-1\">Yes, first in first out means that hello is gone</div></li>\n <li data-component=\"answer\" id=\"pswadsup_4_queue_1_opt_c\">\n<div class=\"para\" id=\"queue_1-2-3-1-1\">’hello’, 3</div></li>\n <li data-component=\"feedback\" id=\"pswadsup_4_queue_1_opt_c\">\n<div class=\"para\" id=\"queue_1-2-3-2-1\">Queues, and Stacks are both data structures where you can only access the first and the last thing.</div></li>\n <li data-component=\"answer\" id=\"pswadsup_4_queue_1_opt_d\">\n<div class=\"para\" id=\"queue_1-2-4-1-1\">’hello’, ’dog’, 3</div></li>\n <li data-component=\"feedback\" id=\"pswadsup_4_queue_1_opt_d\">\n<div class=\"para\" id=\"queue_1-2-4-2-1\">Ooops, maybe you missed the dequeue call at the end?</div></li>\n </ul>\n </div>\n </div>\n ","is_incorrect":false,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_queue_1","points":1,"qnumber":"Exercise 3.12.1 ","question_type":"mchoice","readings":[],"score":0,"sub_chapter_label":"basic-ds_implementing-a-queue-in-python"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Queue Simulation: Printing Tasks","chapter_chapter_num":14,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"ungraded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone explainer ac_section \">\n <div data-component=\"activecode\" id=\"pswadsup_4_print_sim_selfcheck\">\n <textarea data-lang=\"python\" data-audio=\"\" data-coach=\"true\" style=\"visibility: hidden;\" id=\"pswadsup_4_print_sim_selfcheck_editor\" data-question_label=\"\" data-codelens=\"true\" data-timelimit=\"25000\">import random\nfrom pythonds3.basic import Queue\n\n\nclass Printer:\n def __init__(self, ppm):\n self.page_rate = ppm\n self.current_task = None\n self.time_remaining = 0\n\n def tick(self):\n if self.current_task is not None:\n self.time_remaining = self.time_remaining - 1\n if self.time_remaining <= 0:\n self.current_task = None\n\n def busy(self):\n return self.current_task is not None\n\n def start_next(self, new_task):\n self.current_task = new_task\n self.time_remaining = new_task.get_pages() * 60 / self.page_rate\n\n\nclass Task:\n def __init__(self, time):\n self.timestamp = time\n self.pages = random.randrange(1, 21)\n\n def get_stamp(self):\n return self.timestamp\n\n def get_pages(self):\n return self.pages\n\n def wait_time(self, current_time):\n return current_time - self.timestamp\n\n\ndef simulation(num_seconds, pages_per_minute):\n lab_printer = Printer(pages_per_minute)\n print_queue = Queue()\n waiting_times = []\n\n for current_second in range(num_seconds):\n if new_print_task():\n task = Task(current_second)\n print_queue.enqueue(task)\n\n if (not lab_printer.busy()) and (not print_queue.is_empty()):\n nexttask = print_queue.dequeue()\n waiting_times.append(nexttask.wait_time(current_second))\n lab_printer.start_next(nexttask)\n\n lab_printer.tick()\n\n average_wait = sum(waiting_times) / len(waiting_times)\n print(\"Average Wait %6.2f secs %3d tasks remaining.\" % (average_wait, print_queue.size()))\n\n\ndef new_print_task():\n num = random.randrange(1, 181)\n return num == 180\n\n\nfor i in range(10):\n simulation(3600, 5)\n</textarea>\n </div>\n </div>\n </div>\n ","is_incorrect":false,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_print_sim_selfcheck","points":1,"qnumber":"ActiveCode","question_type":"activecode","readings":[],"score":0,"sub_chapter_label":"basic-ds_queue-simulation-printing-tasks"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Queue Simulation: Printing Tasks","chapter_chapter_num":14,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"ungraded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone explainer ac_section \">\n <div data-component=\"activecode\" id=\"pswadsup_4_qumainsim\">\n <textarea data-lang=\"python\" data-audio=\"\" data-coach=\"true\" style=\"visibility: hidden;\" id=\"pswadsup_4_qumainsim_editor\" data-question_label=\"\" data-codelens=\"true\" data-timelimit=\"25000\">import random\nfrom pythonds3.basic import Queue\n\n\nclass Printer:\n def __init__(self, ppm):\n self.page_rate = ppm\n self.current_task = None\n self.time_remaining = 0\n\n def tick(self):\n if self.current_task is not None:\n self.time_remaining = self.time_remaining - 1\n if self.time_remaining <= 0:\n self.current_task = None\n\n def busy(self):\n return self.current_task is not None\n\n def start_next(self, new_task):\n self.current_task = new_task\n self.time_remaining = new_task.get_pages() * 60 / self.page_rate\n\n\nclass Task:\n def __init__(self, time):\n self.timestamp = time\n self.pages = random.randrange(1, 21)\n\n def get_stamp(self):\n return self.timestamp\n\n def get_pages(self):\n return self.pages\n\n def wait_time(self, current_time):\n return current_time - self.timestamp\n\n\ndef simulation(num_seconds, pages_per_minute):\n lab_printer = Printer(pages_per_minute)\n print_queue = Queue()\n waiting_times = []\n\n for current_second in range(num_seconds):\n if new_print_task():\n task = Task(current_second)\n print_queue.enqueue(task)\n\n if (not lab_printer.busy()) and (not print_queue.is_empty()):\n nexttask = print_queue.dequeue()\n waiting_times.append(nexttask.wait_time(current_second))\n lab_printer.start_next(nexttask)\n\n lab_printer.tick()\n\n average_wait = sum(waiting_times) / len(waiting_times)\n print(\"Average Wait %6.2f secs %3d tasks remaining.\" % (average_wait, print_queue.size()))\n\n\ndef new_print_task():\n num = random.randrange(1, 181)\n return num == 180\n\n\nfor i in range(10):\n simulation(3600, 5)\n</textarea>\n </div>\n </div>\n </div>\n ","is_incorrect":false,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_qumainsim","points":1,"qnumber":"ActiveCode","question_type":"activecode","readings":[],"score":0,"sub_chapter_label":"basic-ds_queue-simulation-printing-tasks"},{"activities_required":null,"activity_info":"{}","allow_pairs":"false","base_url":"/ns/books/published/northeastcommunitycollege_pswadsup_fall26/","chapter_chapter_name":"Palindrome Checker","chapter_chapter_num":18,"chapter_label":"basic-data-structures","chapter_name":"Basic Data Structures","chapter_num":3,"comment":"ungraded","downloads_enabled":"false","how_graded":"Best Answer","htmlsrc":"<div class=\"ptx-runestone-container\">\n <div class=\"runestone explainer ac_section \">\n <div data-component=\"activecode\" id=\"pswadsup_4_lst-palchecker\">\n <textarea data-lang=\"python\" data-audio=\"\" data-coach=\"true\" style=\"visibility: hidden;\" id=\"pswadsup_4_lst-palchecker_editor\" data-question_label=\"\" data-codelens=\"true\" data-timelimit=\"25000\">from pythonds3.basic import Deque\n\n\ndef pal_checker(a_string):\n char_deque = Deque()\n\n for ch in a_string:\n char_deque.add_rear(ch)\n\n while char_deque.size() > 1:\n first = char_deque.remove_front()\n last = char_deque.remove_rear()\n if first != last:\n return False\n\n return True\n\nprint(pal_checker(\"lsdkjfskf\"))\nprint(pal_checker(\"radar\"))\n</textarea>\n </div>\n </div>\n </div>\n ","is_incorrect":false,"is_instructor":"true","is_logged_in":"true","latex_macros":"\n\n\\newcommand{\\lt}{<}\n\\newcommand{\\gt}{>}\n\\newcommand{\\amp}{&}\n","markup_system":"PreTeXt","name":"pswadsup_4_lst-palchecker","points":1,"qnumber":"ActiveCode: Listing 3.18.2","question_type":"activecode","readings":[],"score":0,"sub_chapter_label":"basic-ds_palindrome-checker"}]
[warn] No ad placements found.
[log] Timezone cookie matches, not sending timezone to server
[log] This page served by undefined
[log] triggering runestone:pre-login-complete
[log] Runestone pre-login complete
[log] Loading Runestone component: activecode
[log] Loading Runestone component: multiplechoice
[log] Loading Runestone component: answer
[log] Loading Runestone component: feedback
[log] Loading Runestone component: youtube
[log] Loading Runestone component: fillintheblank
[log] Request Failed for /ns/logger/getCompletionStatus?lastPageUrl=%2Fassignment%2Fstudent%2FdoAssignment&isPtxBook=true
[log] before get hist
[log] before get hist
[log] before get hist
[log] before get hist
[log] before get hist
[log] before get hist
[log] before get hist
[log] before get hist
[log] before get hist
[log] before get hist
[log] making a new scrubber
[log] Fake change event, skipping the log
[log] making a new scrubber
[log] Fake change event, skipping the log
[log] making a new scrubber
[log] Fake change event, skipping the log
[log] making a new scrubber
[log] Fake change event, skipping the log
[log] making a new scrubber
[log] Fake change event, skipping the log
[log] making a new scrubber
[log] Fake change event, skipping the log
[log] making a new scrubber
[log] Fake change event, skipping the log
[log] Response from server: 200
[log] Data from server: {"answer":"2","correct":true,"percent":1,"timestamp":"2026-08-31T16:09:33.376133+00:00","div_id":"pswadsup_4_stack_1","sid":"trevorb@northeast.edu","course_name":"northeastcommunitycollege_pswadsup_fall26","id":97956713,"comment":"autograded","score":1} calling repopulateFromStorage
[log] resolving checkServer with server data
[log] making a new scrubber
[log] Fake change event, skipping the log
[log] making a new scrubber
[log] Fake change event, skipping the log
[log] adding video popouts
[log] setting up pretext
[log] Response from server: 200
[log] Data from server: "no data" calling repopulateFromStorage
[log] resolving checkServer with server data
[log] Response from server: 200
[log] Data from server: "no data" calling repopulateFromStorage
[log] resolving checkServer with server data
[log] Response from server: 200
[log] Data from server: {"answer":"2","correct":true,"percent":1,"timestamp":"2026-08-31T16:12:34.411862+00:00","div_id":"pswadsup_4_stack_2","sid":"trevorb@northeast.edu","course_name":"northeastcommunitycollege_pswadsup_fall26","id":97957076,"comment":"autograded","score":1} calling repopulateFromStorage
[log] resolving checkServer with server data
[log] making a new scrubber
[log] Fake change event, skipping the log
[log] Response from server: 200
[log] Data from server: {"answer":"[\"100\"]","correct":false,"percent":0,"timestamp":"2026-09-01T17:09:09.140335+00:00","div_id":"pswadsup_4_baseconvert2","sid":"trevorb@northeast.edu","course_name":"northeastcommunitycollege_pswadsup_fall26","id":11618302,"comment":"autograded","score":0} calling repopulateFromStorage
[log] resolving checkServer with server data
[log] Response from server: 200
[log] Data from server: {"answer":"[\"10\"]","correct":false,"percent":0,"timestamp":"2026-09-01T17:09:41.936485+00:00","div_id":"pswadsup_4_baseconvert3","sid":"trevorb@northeast.edu","course_name":"northeastcommunitycollege_pswadsup_fall26","id":11618312,"comment":"autograded","score":0} calling repopulateFromStorage
[log] resolving checkServer with server data
[log] Response from server: 200
[log] Data from server: {"answer":"[\"31\"]","correct":false,"percent":0,"timestamp":"2026-09-01T17:07:53.289537+00:00","div_id":"pswadsup_4_baseconvert1","sid":"trevorb@northeast.edu","course_name":"northeastcommunitycollege_pswadsup_fall26","id":11618288,"comment":"autograded","score":0} calling repopulateFromStorage
[log] resolving checkServer with server data
[log] MathJax Ready -- dequeing a typesetting run for undefined
[log] MathJax Ready -- dequeing a typesetting run for undefined
[log] MathJax Ready -- dequeing a typesetting run for undefined
[log] MathJax Ready -- dequeing a typesetting run for undefined
[log] MathJax Ready -- dequeing a typesetting run for pswadsup_4_stack_1 undefined
[log] MathJax Ready -- dequeing a typesetting run for pswadsup_4_stack_2 undefined
[log] MathJax Ready -- dequeing a typesetting run for pswadsup_4_queue_1 undefined
[log] MathJax Ready -- dequeing a typesetting run for undefined
[log] MathJax Ready -- dequeing a typesetting run for undefined
[log] MathJax Ready -- dequeing a typesetting run for undefined
[log] MathJax Ready -- dequeing a typesetting run for pswadsup_4_stack_1_feedback undefined
[log] MathJax Ready -- dequeing a typesetting run for pswadsup_4_stack_2_feedback undefined
[log] MathJax Ready -- dequeing a typesetting run for pswadsup_4_baseconvert1_feedback undefined
[log] MathJax Ready -- dequeing a typesetting run for pswadsup_4_baseconvert2_feedback undefined
[log] MathJax Ready -- dequeing a typesetting run for pswadsup_4_baseconvert3_feedback undefined
[log] SpliceWrapper: received message subject: undefined from iframe: pswadsup_4_video_Stack2
[log] SpliceWrapper: received message subject: undefined from iframe: pswadsup_4_stack1_video
[log] SpliceWrapper: received message subject: undefined from iframe: pswadsup_4_video_Stack2
[log] SpliceWrapper: received message subject: undefined from iframe: pswadsup_4_video_Stack2
[log] SpliceWrapper: received message subject: undefined from iframe: pswadsup_4_stack1_video
[log] SpliceWrapper: received message subject: undefined from iframe: pswadsup_4_stack1_video
[log] SpliceWrapper: received message subject: undefined from iframe: pswadsup_4_stack1_video
[log] SpliceWrapper: received message subject: undefined from iframe: pswadsup_4_video_Stack2
[log] SpliceWrapper: received message subject: undefined from iframe: pswadsup_4_video_Stack2
[log] SpliceWrapper: received message subject: undefined from iframe: pswadsup_4_stack1_video
[log] starting runProg
[log] running {"div_id":"pswadsup_4_stack_ex_1","code":"from pythonds3.basic import Stack\n\ns = Stack()\n\nprint(s.is_empty())\ns.push(4)\ns.push(\"dog\")\nprint(s.peek())\ns.push(True)\nprint(s.size())\nprint(s.is_empty())\ns.push(8.4)\nprint(s.pop())\nprint(s.pop())\nprint(s.size())\n","language":"python","errinfo":"success","to_save":"False","prefix":"","partner":"","editDist":0,"changesPerSecond":null,"course":"northeastcommunitycollege_pswadsup_fall26","clientLoginStatus":true,"timezoneoffset":5}
[log] starting runProg
[log] running {"div_id":"pswadsup_4_lst-parcheck1","code":"from pythonds3.basic import Stack\n\n\ndef par_checker(symbol_string):\n s = Stack()\n for symbol in symbol_string:\n if symbol == \"(\":\n s.push(symbol)\n else:\n if s.is_empty():\n return False\n else:\n s.pop()\n\n return s.is_empty()\n\n\nprint(par_checker(\"((()))\")) # expected True\nprint(par_checker(\"((()()))\")) # expected True\nprint(par_checker(\"(()\")) # expected False\nprint(par_checker(\")(\")) # expected False\n","language":"python","errinfo":"success","to_save":"False","prefix":"","partner":"","editDist":0,"changesPerSecond":null,"course":"northeastcommunitycollege_pswadsup_fall26","clientLoginStatus":true,"timezoneoffset":5}
[log] Save logging event {"event":"fillb","div_id":"pswadsup_4_baseconvert1","act":"[\"31\"]","answer":"[\"31\"]","correct":"F","percent":0,"course_name":"northeastcommunitycollege_pswadsup_fall26","clientLoginStatus":true,"timezoneoffset":5,"assignment_id":286411}
[log] MathJax Ready -- dequeing a typesetting run for pswadsup_4_baseconvert1_feedback undefined
A problem was reported through the Runestone "Report a Problem" form.
Description
I'm using Runestone through Canvas/LTI for a Data Structures and Algorithms course. The student entered the correct answer and Runestone displays “Correct,” but the question still shows 0.0 / 1 with the scoring method set to Best Answer.
I've been seeing this with some of the quick-check/book exercises, and it is causing incorrect assignment scores to be passed back to Canvas.
Has anyone experienced this or found a setting/workaround that fixes it?
Browser console log