Difference between revisions of "Merlin Builder"
Line 44: | Line 44: | ||
*Next, go out of the '''sources directory''' and open '''main.swift''' inside the '''generator directory''' | *Next, go out of the '''sources directory''' and open '''main.swift''' inside the '''generator directory''' | ||
{{ConsoleLine|john-williams@codermerlin:~/Experiences/CtoF/generator| emacs main.swift}} | {{ConsoleLine|john-williams@codermerlin:~/Experiences/CtoF/generator| emacs main.swift}} | ||
remove the code between the two comment lines and insert the following code: | |||
11 | let c = Double.random(in: 0.0 ... 100.0) | |||
12 | insertionLines.append("let c = \(c)") | |||
13 | | |||
14 | | |||
15 | let f = c * 9.0 / 5.0 + 32.0 | |||
16 | expectedStandardOutput.append("\(f)") |
Revision as of 13:16, 29 January 2021
Overview[edit]
Merlin Builder is a tool available to Merlin Mavens™ that provides the required functionality to build a challenge for use by Merlin Mission Manager . Any supported language may be used for the challenge (though the generator and verifier must be written in Swift).
The Merlin Mission Manager verifies challenges through a multi-step process. The following steps occur each and every time that a student executes merlin test:
- A generator generates a problem set. The problem set serves as input to the student's program by providing:
- Standard input (e.g. simulates a user's keyboard input)
- Command line arguments
- Text replacement within zero or more of the student's program files. This is referred to as excision because a portion of the student's program file is removed during this process.
- Expected standard output
- After the problem set is generated, the student's program is built using make.sh. The program will include any text replaced during the excision process.
- The student's (potentially modified) program is executed using run.sh and both standard output and standard input are spooled to a file
- A verifier compares the actual standard output with the expected standard output and determines whether or not the execution was successful
Usage[edit]
There are only three builder subcommands as the majority of the process involves coding of the generator.
- merlin builder init: Initializes the directory structure and must be the first command executed in an empty directory
- merlin builder prepare: Similar to the parallel merlin prepare copies the source files to serve as a starting point for the student
- merlin builder test: Similar to the parallel merlin test executes the generator and verifier
Getting Started[edit]
PLEASE NOTE: this section of the page is currently in progress
- For this example, navigate to your Experiences directory and create an empty directory named CtoF
- Run merlin builder init inside your newly-created directory. This creates the required Merlin Builder directory structure
john-williams@codermerlin:~/Experiences/CtoF merlin builder init
- Navigate to the sources directory, and open instructions.txt in emacs. These are the instructions that the student will see when they prepare the mission
john-williams@codermerlin:~/Experiences/CtoF/sources emacs instructions.txt
- Since this mission will require the user to convert a given temperature from Celsius to Farenheight, change the instructions to tell the user to convert from C to F given constant c.
- Save and exit emacs
- Next, open main.swift in emacs
john-williams@codermerlin:~/Experiences/CtoF/sources emacs main.swift
- remove the constant definition and create a constant c equal to 21.2
- append let degreesF = 0 above the print statemnet
- change the print statement to print degreesF
- Save and exit emacs
- Next, go out of the sources directory and open main.swift inside the generator directory
john-williams@codermerlin:~/Experiences/CtoF/generator emacs main.swift
remove the code between the two comment lines and insert the following code:
11 | let c = Double.random(in: 0.0 ... 100.0) 12 | insertionLines.append("let c = \(c)") 13 | 14 | 15 | let f = c * 9.0 / 5.0 + 32.0 16 | expectedStandardOutput.append("\(f)")