Commit e3803ea8c1a206e6092802ae1afcc475f3acc31a

Authored by Miguel Barão
1 parent 69d2f61d
Exists in master and in 1 other branch dev

- updated QUESTIONS.md

Showing 1 changed file with 60 additions and 26 deletions   Show diff stats
@@ -75,7 +75,7 @@ The simplest format is @@ -75,7 +75,7 @@ The simplest format is
75 75
76 ```yaml 76 ```yaml
77 - type: checkbox 77 - type: checkbox
78 - ref: question_reference 78 + ref: question_reference
79 title: My second question 79 title: My second question
80 text: | 80 text: |
81 Please mark the correct options. 81 Please mark the correct options.
@@ -83,7 +83,7 @@ The simplest format is @@ -83,7 +83,7 @@ The simplest format is
83 - this one is correct 83 - this one is correct
84 - wrong 84 - wrong
85 - this one is also correct 85 - this one is also correct
86 - correct: [1, -1, 1] # default: [0, 0, 0] 86 + correct: [1, -1, 1] # default: [1, 1, 1]
87 shuffle: yes # default: yes 87 shuffle: yes # default: yes
88 choose: 2 # default: choose all options 88 choose: 2 # default: choose all options
89 discount: yes # default: yes 89 discount: yes # default: yes
@@ -96,7 +96,9 @@ When correcting an answer, each correctly marked/unmarked option gets the corres @@ -96,7 +96,9 @@ When correcting an answer, each correctly marked/unmarked option gets the corres
96 If `discount: no` then wrong options are given a value of 0. 96 If `discount: no` then wrong options are given a value of 0.
97 Options are shuffled by default. A smaller number of options may be randomly selected by setting the option `choose`. 97 Options are shuffled by default. A smaller number of options may be randomly selected by setting the option `choose`.
98 98
99 -A more advanced format is to have 99 +A more advanced format is to have two versions for each option, one right and one wrong.
  100 +One of the versions is randomly selected when the question is generated.
  101 +For example,
100 102
101 ```yaml 103 ```yaml
102 options: 104 options:
@@ -106,21 +108,21 @@ A more advanced format is to have @@ -106,21 +108,21 @@ A more advanced format is to have
106 correct: [1, -1, -1] 108 correct: [1, -1, -1]
107 ``` 109 ```
108 110
109 -In this case, there are options that contain a list of 2 suboptions.  
110 -When the question is generated, one of the suboptions is randomly selected. If it's the first then the corresponding `correct` value is used, if it's the second then it's symmetrical is used instead. 111 +If the first version is selected then the corresponding `correct` value is used, otherwise if
  112 +the second version is selected, then the symmetrical value is used instead.
111 113
112 -This format is useful to write options with 2 different versions to avoid cheating. Example: 114 +This format is useful to write questions that are presented in different ways to different students.
  115 +It also minimizes solution memorization. Example:
113 116
114 ```yaml 117 ```yaml
115 options: 118 options:
116 - ['$\pi$ is a real number', '$\pi$ is an integer'] 119 - ['$\pi$ is a real number', '$\pi$ is an integer']
117 - ['there are more reals than integers', 'there are more integers than reals'] 120 - ['there are more reals than integers', 'there are more integers than reals']
118 -  
119 ``` 121 ```
120 122
121 -## text 123 +### text
122 124
123 -Answer is a line of text. Just compare the answered text with string provided in a list of acceptable answers. 125 +The answer is a single line of text. Just compare the answered text with the strings provided in a list of answers considered to be right.
124 126
125 ```yaml 127 ```yaml
126 - type: text 128 - type: text
@@ -130,9 +132,9 @@ Answer is a line of text. Just compare the answered text with string provided in @@ -130,9 +132,9 @@ Answer is a line of text. Just compare the answered text with string provided in
130 correct: ['week', 'Week'] # default: [] always wrong 132 correct: ['week', 'Week'] # default: [] always wrong
131 ``` 133 ```
132 134
133 -## text-regex 135 +### text-regex
134 136
135 -Similar to text, but validade using a regular expression. 137 +Similar to text, but answers are validated by a regular expression.
136 138
137 ```yaml 139 ```yaml
138 - type: text-regex 140 - type: text-regex
@@ -142,10 +144,12 @@ Similar to text, but validade using a regular expression. @@ -142,10 +144,12 @@ Similar to text, but validade using a regular expression.
142 correct: !regex '[wW]eek' # default: '$.^' always wrong 144 correct: !regex '[wW]eek' # default: '$.^' always wrong
143 ``` 145 ```
144 146
  147 +The regular expression is in a string and must be prefixed by the keyword `!regex`.
145 148
146 -## numeric-interval 149 +### numeric-interval
147 150
148 -Similar to text, but expects an integer or floating point number. The answer is correct if the number is in the given interval. 151 +Similar to text, but expects an integer or floating point number.
  152 +The answer is converted to a float and is considered correct if the number is in the given closed interval.
149 153
150 ```yaml 154 ```yaml
151 - type: numeric-interval 155 - type: numeric-interval
@@ -155,9 +159,11 @@ Similar to text, but expects an integer or floating point number. The answer is @@ -155,9 +159,11 @@ Similar to text, but expects an integer or floating point number. The answer is
155 correct: [3.141, 3.142] # default: [1.0, -1.0] always wrong 159 correct: [3.141, 3.142] # default: [1.0, -1.0] always wrong
156 ``` 160 ```
157 161
158 -## textarea 162 +### textarea
159 163
160 -Provides a multiline textarea for the answer. The answered text is sent to the stdin of an external program for assessment. The printed stdout output of the program is parsed as YAML to get the grade and optional comments. 164 +Provides a multiline textarea for the answer.
  165 +The answered text is sent to the standard input of an external program for grading.
  166 +The printed output to standard output of the program is parsed as YAML to get the grade and optional comments.
161 167
162 ```yaml 168 ```yaml
163 - type: textarea 169 - type: textarea
@@ -169,14 +175,20 @@ Provides a multiline textarea for the answer. The answered text is sent to the s @@ -169,14 +175,20 @@ Provides a multiline textarea for the answer. The answered text is sent to the s
169 timeout: 15 # default: 5 175 timeout: 15 # default: 5
170 ``` 176 ```
171 177
172 -Example program output: 178 +The external program prints a dictionary with the grade and optional comments.
  179 +For example,
173 180
174 ```yaml 181 ```yaml
175 grade: 0.8 182 grade: 0.8
176 comments: Almost there 183 comments: Almost there
177 ``` 184 ```
178 185
179 -## information, warning, alert and success 186 +It can also just print the grade as a single number.
  187 +
  188 +
  189 +### information, warning, alert and success
  190 +
  191 +These are not really questions, but just provides information for the student.
180 192
181 ```yaml 193 ```yaml
182 - type: information 194 - type: information
@@ -185,12 +197,30 @@ comments: Almost there @@ -185,12 +197,30 @@ comments: Almost there
185 text: You can use your calculator. 197 text: You can use your calculator.
186 ``` 198 ```
187 199
188 -## generator 200 +Grading these type of "questions" yields always correct.
  201 +
  202 +### generator
189 203
190 -Generators are external programs that generate a question dynamically.  
191 -Questions should be printed to the stdout in YAML format (without the list dash). The parsed output is used to update the question dict, redefining `type` and other fields. 204 +Questions can be generated by external programs instead of being defined directly.
  205 +This allows great flexibility, and allows each instance of a question to be always different.
192 206
193 -Example of a generator written in python (any language can do): 207 +```yaml
  208 +type: generator
  209 +ref: some-reference
  210 +script: executable_program
  211 +arg: 10,20
  212 +```
  213 +
  214 +A generator is an external program that generates a question dynamically.
  215 +In the example above, the program to be run is `executable_program`.
  216 +The `arg` is sent to the standard input of the `executable_program`.
  217 +
  218 +Questions should be printed to the stdout in YAML format, similarly to how they are defined above (but without the list dash).
  219 +The printed question is then parsed to a dictionary which is then used to update the question.
  220 +The `type` is redefined from generator to something else and the other fields are also updated.
  221 +
  222 +A generator can be any executable program (written in any language) that prints to the standard output.
  223 +Example of a generator written in python:
194 224
195 ```python 225 ```python
196 #!/usr/bin/env python3 226 #!/usr/bin/env python3
@@ -198,7 +228,7 @@ Example of a generator written in python (any language can do): @@ -198,7 +228,7 @@ Example of a generator written in python (any language can do):
198 from random import randint 228 from random import randint
199 import sys 229 import sys
200 230
201 -arg = sys.stdin.read() # read arguments 231 +arg = sys.stdin.read() # read arguments from stdin as a string
202 a,b = (int(n) for n in arg.split(',')) 232 a,b = (int(n) for n in arg.split(','))
203 233
204 q = fr''' 234 q = fr'''
@@ -222,13 +252,15 @@ q += 'correct: ' + str(correct) @@ -222,13 +252,15 @@ q += 'correct: ' + str(correct)
222 print(q) 252 print(q)
223 ``` 253 ```
224 254
  255 +A generator cannot generate another generator, only real questions are acceptable.
  256 +
225 # Writing text 257 # Writing text
226 258
227 -The text in the questions is interpreted as markdown with LaTeX formulas.  
228 -The best way to avoid gotchas is to indent text like this: 259 +The text in the questions is interpreted as markdown with support for LaTeX formulas.
  260 +The best way to write text is to use indentation like this:
229 261
230 ```yaml 262 ```yaml
231 - text: | 263 +text: |
232 Yes. this is ok: If not indented, "Yes" would be a boolean 264 Yes. this is ok: If not indented, "Yes" would be a boolean
233 and colon would be interpreted as a dictionary key. 265 and colon would be interpreted as a dictionary key.
234 266
@@ -246,4 +278,6 @@ The best way to avoid gotchas is to indent text like this: @@ -246,4 +278,6 @@ The best way to avoid gotchas is to indent text like this:
246 header1 | header2 278 header1 | header2
247 --------|--------- 279 --------|---------
248 value1 | value2 280 value1 | value2
249 -```  
250 \ No newline at end of file 281 \ No newline at end of file
  282 +```
  283 +
  284 +Options of radio and checkbox questions are also interpreted as markdown.