apps: - bots: '' constants: - datatype: int js_value: null name: PLAYERS_PER_GROUP - datatype: int js_value: 3 name: NUM_ROUNDS - datatype: int js_value: 60 name: WORK_DURATION_SECONDS - datatype: int js_value: 60 name: BREAK_DURATION_SECONDS - datatype: int js_value: 500 name: TRIALS_PER_ROUND - datatype: int js_value: 10 name: WORK_MINUTES - datatype: float js_value: 0.1 name: PAY_PER_STRING - datatype: float js_value: 0.2 name: TAX_RATE - datatype: list_str js_value: - '!' - '@' - '#' - $ - '%' - ^ - '&' - '*' - ( - ) name: SHIFT_CHARS - datatype: int js_value: 10 name: BREAK_MINUTES custom_export: '' doc: '' includable_templates: [] models: Group: fields: [] methods: [] Player: fields: - datatype: StringField kwargs: blank: constant: null expr_type: plain js_value: true choices: null initial: null label: null widget: null name: typed_answer - datatype: BooleanField kwargs: blank: null choices: null initial: constant: null expr_type: plain js_value: false label: null widget: null name: is_correct - datatype: StringField kwargs: blank: constant: null expr_type: plain js_value: true choices: null initial: null label: null widget: null name: correct_ans methods: - code: "import random\nSPECIAL_CHARS = ['!', '@', '#', '$', '%', '^', '&', '*', '(']\n\n\nif data.get('type') == 'init':\n if 'correct_ans' not in participant.vars:\n participant.vars['correct_ans'] = ''.join(\n random.choice(SPECIAL_CHARS) for _ in range(5)\n \ )\n\n return {\n player.id_in_group: dict(\n \ new_target=participant.vars['correct_ans'],\n message='',\n \ is_correct=None,\n )\n }\ntyped = data.get('typed_answer', '').strip()\ncorrect_ans = participant.vars.get('correct_ans', '')\n\nif typed == correct_ans:\n new_string = ''.join(random.choice(SPECIAL_CHARS) for _ in range(5))\n participant.vars['correct_ans'] = new_string\n \ return {\n player.id_in_group: dict(\n is_correct=True,\n \ new_target=new_string,\n message='Correct',\n \ )\n }\n\nreturn {\n player.id_in_group: dict(\n \ is_correct=False,\n message='Try again',\n )\n \ }" name: live_strings Subsession: fields: [] methods: [] name: Labour_Decisions_JScursor pages: - app_after_this_page: null before_next_page: null error_message: null form_fields: - typed_answer form_model: player get_form_fields: null get_timeout_seconds: null is_displayed: null is_waitpage: false js_vars: null live_method: null name: Task template: content: " \n\n\n
\n This study includes 30 minutes of task time in three\n 10-minute work blocks, with 10-minute breaks between blocks.\n Type the five characters shown (Shift + digits 1–9) in order, then click Enter.\n \
\n\n \ Use Shift + number keys 1–9 (e.g. Shift+1 = !).\n
\n \n\n Total strings completed: 0
\n Total pre-tax: $0.00 ·\n Total
after-tax: $0.00\n