Skip to content

Commit

Permalink
added question set grading type options
Browse files Browse the repository at this point in the history
  • Loading branch information
sei-rreeder committed May 23, 2024
1 parent 3ca035c commit 6d714a3
Showing 1 changed file with 23 additions and 16 deletions.
39 changes: 23 additions & 16 deletions docs/topomojo/challenge.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
# Challenge
# Challenge tab

The **Challenge** page in the Topo workspace is used when both Gameboard and TopoMojo are integrated to execute a cyber competition. More information on linking those two applications together can be found elsewhere in the Foundry documentation. The Challenge page is where you create random key/values, embed them in a *gamespace* at deploy time, and ask questions of competitors (players).
The *Challenge* tab in the Topo workspace is used when both Gameboard and TopoMojo are integrated to execute a cyber competition. More information on linking those two applications together can be found elsewhere in the Foundry documentation. The Challenge tab is where you create random key/values, embed them in a *gamespace* at deploy time, and ask questionsand answers of competitors (players).

## Transforms

*Transforms* allow you to define dynamic variables that are generated based on certain criteria or types. Transforms are also a key/value pair definition – the *key* is the name of your transform and the *value* is the type of the transform. The screen print below shows a transform named “token1” that will have a value of 8 random hexadecimal characters.
**Transforms** allow you to define dynamic variables that are generated based on certain criteria or types. Transforms are also a key/value pair definition – the **key** is the name of your transform and the **value** is the type of the transform. The screen print below shows a transform named “token1” that will have a value of 8 random hexadecimal characters.

*Screen print 1:*

![transforms](img/transforms.png)

To access transforms, use the referenced "*double-pounder-key* (`##key##`)" notation. When TopoMojo deploys a gamespace, the engine generates the random values for all transforms, looks for double-pounder-keys, then replaces them with the randomly generated values for that deployment.

Any of the sections on the Challenge tab (e.g., Transforms, Markdown, Questions, Answers) can contain *double-pounder-keys* that will be replaced with transform values at deploy time. You can also use transform *double-pounder-keys* in the **Guest Settings** field of a template to inject random variables into VM guest info variables when deploying a gamespace (transforms aren’t generated when deploying workspace VMs, so the value of the variable will be the *double-pounder-key*).
Any of the sections on the Challenge tab (e.g., Transforms, Markdown, Questions, Answers) can contain *double-pounder-keys* that will be replaced with transform values at deploy time. You can also use transform *double-pounder-keys* in the *Guest Settings* field of a template to inject random variables into VM guest info variables when deploying a gamespace (transforms aren’t generated when deploying workspace VMs, so the value of the variable will be the *double-pounder-key*).

The screen print below shows the Guest Settings of a VM template configured to use two guest info variables: `var1` and `token1`. `Var1` has a value of “test” and `token1` will have a random 8-character hexadecimal string assigned when a gamespace is deployed.
The screen print below shows the Guest Settings of a VM template configured to use two guest info variables: `var1` and `token1`. `Var1` has a value of “test” and `token1` will have a random 8-character hexadecimal string assigned when a gamespace is deployed.

*Screen print 2:*

Expand All @@ -24,28 +24,35 @@ Click [here](building-a-workspace.md/#template-field-definitions) to learn more

## Markdown

The markdown you enter here gets appended to the gamespace document.

## Variants

A *variant* describes a different version of a challenge. Variants can contain different ISO attachments, different virtual machines, and different questions and answers. Each time a challenge is deployed, a variant is randomly selected for the deployment. For example, two competitors can attempt the same challenge, but one competitor may receive *variant #1* and the other competitor may receive *variant #2*. When creating a challenge using variants, make sure all variants test the same competitor skills at the same difficulty level. That is, variant #1 should test the same skills as variant #2 and one variant shouldn't be harder to solve than another variant.

### Show Variant Detail
## Question Set

**Move Up, Move Down, Remove:** These functions are self-explanatory. Use them to position the question in the sequence of questions for that set and remove it.

**Detail:**
**Question:** Enter the question you expect the participant to answer here. Your question should be specific, so that there is only one correct answer.

**Clone:**
**Answer:** Enter the correct answer that the competitor must submit to to earn a score.

**Remove:**
**Hidden:** Select **Hidden** to prevent the question from appearing when playing the challenge. Hidden questions do not appear when playing in TopoMojo or via Gameboard.

**Markdown:**
**Grader:** Select the grading type here. The Grader determines if players submitted the correct answer to a question. Select one of four types:

**Iso:** TopoMojo does allow you to attach a variant-specific ISO file to "target" templates. To attach an ISO file to a subset of VMs only when deployed in a gamespace:
- `Match`: The submission must exactly match what is in the **Answer** field. Use this when there is exactly one possible answer to a question.
- `MatchAny`: The submission must match one of the pipe-delimited answers in the **Answer** field. Use this when there is more than one possible answer to a question.
- `MatchAll`: The submission must match all of the pipe-delimited answers in the **Answer** field. Use this when a list of answers to a question is expected.
- `MatchAlpha`: The submission must exactly match what is in the **Answer** field *after* all non-alphanumeric characters are removed. This is useful if the user might submit symbols that don't affect the validity of an answer. For example, `C:/Users` and `C:\Users` are both valid answers and the symbols (`/` vs `\`) don't matter.

1. On the **Challenge** tab, enable **Show Variant Detail**.
All four graders are case-insensitive, meaning that all answers and submissions are converted to lower-case by the grader before the submission is compared to the expected answer in all grader types.

2. Under **Iso**, select an ISO file. This is the file you'll attach to the VM target.
### Weight

3. Under **Targets**, specify the VMs that should have the ISO attached when a gamespace is deployed.
Weight is the percentage of total for this question. The value should be between `0 and 1` or `0 and 100`. The weights of all questions within the set must add up to 100% or one (1). Zero (`0`) values are calculated evenly.

A different ISO can be defined for each variant.
### Example

**QuestionSet:**
Providing an example answer helps players understand the required answer format. For instance, sometimes a file needs both the name and the extension, while other times only the name is necessary.

0 comments on commit 6d714a3

Please sign in to comment.