All you have left to do is write the asResultString script, the get selector for the asResultString derived attribute.
Select asResultString in the Script Editor. Replace the generated code with the following script:
asResultString "Answers a String that shows the total time the runner took to finish the race and the runner's number" | resultTime resultString | self finishTime == nil ifTrue: [resultString := '??:??:??'] ifFalse: [ resultTime := (self finishTime) subtractTime: (Time new hours: 10 minutes: 0 seconds: 0). resultString := (resultTime hours printStringRadix: 10 padTo: 2), ':', (resultTime minutes printStringRadix: 10 padTo: 2), ':', (resultTime seconds printStringRadix: 10 padTo: 2)]. ^resultString, ' - ', (self number).
Notice that you did not need to initialize the finishTime attribute in the finishTime script because you are intentionally checking to see whether it is nil. If finishTime is nil (because the runner has not finished the race), then the resultTime is not yet known. If the runner has finished the race and finishTime is not nil, the resultTime is calculated by subtracting the start time of 10:00:00 from the finish time.
Remember that the finishTime attribute actually holds a Time object, which understands the subtractTime:, hours:minutes:seconds:, hours, minutes, and seconds messages used in this script. Likewise, the hours, minutes, and seconds messages resolve to Integer objects, which understand the printStringRadix:padTo: message used.
Save the script and close the window, because you are finished defining your Runner part.