Last Changed: Monday 7:06pm
Q:
Are we required to detect
runtime errors in surface functions or may we silently continue?
A:
You should detect errors like subscript out of bounds and type errors, but
overflow, division-by-zero, etc. may be ignored.
Q: Can the phong exponent be negative? How do we
deal with a complex result from (N dot H_j) ^ n?
A: The phong
exponent will not be negative in our tests.
The result is undefined if you are given a negative phong exponent.
Q: Should the md5 checksum be on the tar file or the gzipped-tar file? Also, should the md5 checksum include the filename as is output by the md5sum command on Linux or should it just have the sum?
A: The md5 checksum should be on the
gzipped-tar file. The checksum you put
in your mail message should not include the filename. Rather, it should look something like this “c3bad6bc1db9ff6bdd4e21bb7400121c”.
Q: Is it legitimate to statically reject programs containing unbound variables even if such uses are unreachable at run time?
A: Yes.
Q: If there is an error in the input, must we
silently exit with non-zero status or may we also produce text on stdout or
stderr?
A: You may print anything you like on stdout or stderr.
Q: Can I exit with error, if I have “5 0 divi”
in the program even in a function which will never get evaluated or should I
raise the error only when evaluating the expression?
A: If the function never gets evaluated, then you shouldn’t raise an error. E.g., “true { } { 5 0 divi } if” should never cause an error.
Q: What is the precise meaning of depth?
A: If depth = 0, then there are no specular reflection rays (i.e., the component contributed from the S direction). You still need to compute the diffuse and specular illumination from lights at depth 0.
Q:
What is the behavior for a ray
hitting an object where the origin of the ray is within the object? Does the ray
continue to the outside of the object or does it reflect back inside?
A: This situation can arise in two ways: the
model placed the viewer inside an object, or rounding error caused a shadow or
reflected ray's origin to slip inside an object. In the former case, you can either cull the surface or flip the
normal; we will not test for it. In the
latter case, you need to make sure that the ray is not obstructed by its
originating surface.
Q:
I gather that colours,
intensities will (normally) be in the range 0 to 1, but the ppm file uses
values 0 to 255. So do I take it that we need to "clampf" the
intensities and then scale them to the range 0-255?
A: That’s right.
Q: I'm not sure if I understand the illumination
equation correctly. I gather that C, I_s, I_j and I_a are all triples (eg RGB
values). Is this correct? And if so, do the expressions I_j C, I_S C,
I_a C denote component-wise multiplication and that thus I is a triple?
A:
Yes. I (the intensity) is a
vector of the resulting intensities for the red, green, and blue components. We
represent intensities as “points” with x corresponding to red, y to green, and
z to blue. You compute the intensity
for each component independently. Thus,
to compute the red component of I, you would use only the red components of
I_s, I_j, etc.
Q: You don’t give any types for the arguments
to the light primitives. What are they?
A: You're right. The directions and colors should definitely be points (see the sample code.) The cutoff and the exp are reals.
Q: Is it all right to print messages on stdout
while executing? (If it is, I don’t
need to remove my debugging stuff.)
A: Yes, it’s fine.
Q: Can we open temporary files in /tmp? Can we open files anywhere?
A: You can open temporary files in /tmp or in the directory that we place your code.
Q: What should we do in a Tier-1 implementation
if we see a Tier-2/3 operator? Signal
an error?
A: That would be nice, but we’re not going to test this.
Q: The
requirements state, "The second phase tests the basic correctness of
submissions (without regards to performance). We will use a selection of Tier-1
test cases and compare the output with that generated by our sample
implementations. Submissions that deviate significantly from the reference
outputs will be disqualified." We're wondering what "deviate[s]
significantly" means... any difference in the output file? any visible difference? or a major visible
difference? (like "Oops, that sphere is in the wrong place") We're
curious about this for some time-saving routines we're contemplating.
A: We'll be using relatively simple statistical
tests, such as calculating the median distance of each pixel (in color space)
from the reference image. So minor
roundoff differences in placement or color should have little effect. (Our two reference implementations,
developed independently and in different languages, agree almost
pixel-for-pixel with each other.)
Q: What is the rounding behavior of modi?
A: We'll
follow a couple of other languages and require that "n1 n2 modi"
results in a value n3 such that n3 is the remainder of the division of n1 by n2
and has the same sign as n1 n2.
(Note: I had a bug here
previously and wrote n2 instead of n1.)
So, the following should hold (for n2<>0):
(n1
/ n2) * n2 + (n1 mod n2) = n1
Q: With
respect to the eye position at (0,0,-1) and the image plane being the XY plane,
does this imply that object surfaces in front of the "image plane"
(for the viewer) are treated differently from surfaces behind the "image
plane"? Or does it simply mean that the direction of view (for the centre
of the image) is the +Z direction?
A: The latter; objects between the view position and the image plane should be rendered.
Q: Is there a bug in the definition of the
surface of a sphere?
A: There was a bug in version 1.10 and earlier of the task description. We should have that fixed by version 1.11.
Q: Are newlines allowed in strings?
A: Strings are made up of printable characters according to C’s isprint() except for double quotes (“). This includes all ASCII characters between 0x20 (space) and 0x7E (~). So carriage returns and linefeeds are not allowed in strings. We are unlikely to test this sort of thing. We’re much more likely to test that the basic arithmetic works as described.
Q: Are the Tier 2+ operators reserved words in
a Tier 1 program?
A: Yes.
Q: The
`render' operation takes eight parameters.
The specification is not entirely clear about the requirements on the types
of those arguments. For example, must
`ht' and `wid' be integers? Or are reals OK too? Likewise can the `fov'
argument be an integer, or must it be a real? Does the `file' argument have to
be a string? Does `amb' have to be a color? Does the `render' operation push
anything on the stack?
A:
The ht and wid arguments must be integers, the fov argument must be a
real, the file argument must be a string, and the amb argument must be a color,
etc. The render operation should not
leave anything on the stack.
Q: Does frac map –1.2 to –0.2?
A: Yes.
Q: Is render only valid at top level or can it (a) be called inside a loop (say), (b) be called from inside a callback (say a surface definition?)
A: Yes, render is valid inside a loop. However, a call to render inside a surface
definition function is undefined. The
intention is to allow a number of images to be generated by the same basic
scene construction.
Q: Can a space (‘ ‘) be a character in a string?
A: Yes.
(Previously I said no, but spaces can be in strings!) Any character accepted by C’s isprint() is
allowed in strings.
Q: There appears to be a bug in the definition of divi/divf. It says that both the numerator and denominator are n1.
A: Yes, the bug is fixed in version 1.5 of the task.htm document. The description should read: “computes the quotient n3 by dividing the number n1 by the number n2.”
Q: Is it permissible to implement [ and { by pushing a mark on the stack and having ] and } pop down to it (as in Postscript).
A: Perhaps, but note that “[ /x” is an illegal
program.
Q: Is input guaranteed to follow the grammar rules, and if not, then are we required to issue a diagnostic on faulty input?
A: See the second paragraph of section 4.
Q: Do tokens have to be separated by whitespaces or are things such as {}[] self-delimiting? How should “6f” be lexed?
A: Tokens do not have to be separated by white
space when it is unambiguous.
Whitespace is not allowed in numbers or (obviously) identifiers. So, for example, “6f” would lex as two
separate tokens, a number (6) and an identifier (f).
Q: In an array, can you do calculations while forming the array? (e.g., [2 3 addi 10 7 subi ] => [5 3])
A: Yes. See rule 6 in Figure 2.
Q: There seems to be a bug in the
factorial example at the end of section 2.7.
A: You’re right – there was a bug. The last line of 2.7 should’ve read “12 fact fact apply”. Version 1.4 of the Task has the update.
Q: Are true and false keywords or are we allowed to rebind them?
A: true and false are keywords.
Q: Is it an error to use Integers instead of Reals or vice versa? For example, can I write "1 2.0 addf" or "1.0 2.5 addi"?
A: You must explicitly convert integers to reals and vice versa. So both of the examples above are illegal.
Q: Are identifiers case-sensitive?
A: Yes.
Q: You specify real numbers should be represented using 64-bit (double) IEEE representation. What should the precision for integers be and should we worry about overflow or divide by zero?
A: To accommodate different language implementations, we'll be pretty loose here. Your integers should support at least 24 bits worth of precision. The output of a GML program is undefined if either integer overflow or division by 0 occurs.
Q: What pre-existing libraries are we allowed to use?
A: Anything that's legal. That is, you shouldn't ship us any code for which you do not have a legal license.
Q: Which characters terminate a line in a GML program?
A: A carriage return, linefeed, carriage return/linefeed pair, a vertical tab, or the end of a file terminate a line. The task.htm document has been updated to reflect this clarification.
Q: Is the array subscripting operation "get" or "sub"? The example in the array section indicates one thing, but the text and table indicate another.
A: The array subscripting operation is "get". The task documents have been updated to reflect the change.
Q: Can I use my favorite language?
A: The short answer is "as long as you can produce a statically linked executable". The longer answer is that you can submit several support executables (such as an interpreter for your favorite language) and script to run them. See the submission page for more details.
Q: Will you install my language on your test machines?
A: We'd like to, but for testing purposes we've already burned a CD of a stable machine configuration. However, it's not really necessary that your language be installed on the testing machine (see the above question). We only installed languages in case there are problems (we'll try to do some simple debugging if we also have the source).
Back to the ICFP Programming Contest Main page.